.
.{generated code snipped here}
.
.
Function ispalindromic(n:int64):boolean;
{returns true if N is a palindrome}
var
i:integer;
  s:string;
Begin
result:=true;
if n>0 then
Begin
s:=inttostr(n);{make it a string}
i:=length(s);
{fill out the beginning with as many 0's as are at the end}
while s[i]='0' do s:='0'+s;
    i:=1;
{check digits forward from beginning against backwards from end}
while result and (i<= length(s) div 2 ) do
Begin
if s[i]<>s[length(s)-i+1] then result:=false;
      inc(i);
End;
end
else result:=false;
End;

Function reverse(n:int64):int64;
{make an integer that has the digits of input reversed}
var
s,s2:string;
  i:integer;
Begin
s:=inttostr(n);
  s2:='';
for i:= length(s) downto 1 do s2:=s2+s[i];
  result:=strtoint64(s2);
end;

Function sumpalindrome(n:int64; var lpsum:int64; var lsteps:integer):boolean;
{Find the palindromic sum of n and reverse(n)}
{makes rescursive call to itself until palindrome is found}
var n2:int64;
const
limit=high(int64) div 2;
Begin
lsteps:=lsteps+1;
  n2:=reverse(n);
  lpsum:=n+n2;
if (n<=Limit) and (n2<=limit)
then if  not ispalindromic(lpsum)
then result:=sumpalindrome(n+n2,lpsum,lsteps)
else result:=true
else result:=false;
end;

procedure TForm1.SolveBtnClick(Sender: TObject);
{User clicked Solvebtn}
var
n,steps:integer;
  psum:int64;
begin
listbox1.clear;
for n:= 10 to 99 do
Begin
psum:=0;
    steps:=0;
if sumpalindrome(n,psum,steps)
then listbox1.Items.Add(inttostr(n) + ' PSum='+inttostr(psum)
                             +' Steps='+inttostr(steps))
else listbox1.Items.Add(inttostr(n)
              + ' ****** No palindrome found (at least ' +inttostr(steps) +' steps')
end;
end;

end.