Algorithm Math Delphi

Title: Convert Numbers To Hebrew
Question: How can i change my 12345 numbers to hebrew numbering style ?
Answer:
Well I have created long ago in the pascal days a function to do this.
A few month ago i converted it to Delphi, and created a new function to do it.
It's much faster then the old one... but still it is to slow (I hope you can help me to make it even faster).
Note: this is a recorsive function, and also this is the first time i published it, I took it from my String unit, so it might be that there are some functions that apper only in this unit, so I'm sorry from a head :) :
{ Hebrew Numbers }
const
hZerrowToNine : array[0..9] of char =
// 0 1 2 3 4 5 6 7 8 9
(#255,'','','','','','','','','');
//No Zerro in hebrew !!!!
hTenToNinte : array[1..9] of char =
// 10 20 30 40 50 60 70 80 90
('','','','','','','','','');
hHandredToFour : array[1..4] of char =
//100 200 300 400
('','','','');
///////// Inner function for the "hIntToStrNumber" function \\\\\\\\\
function Single(strNum : string) : string;
begin
result := hZerrowToNineNumbers[strToInt(strNum)];
end;
function Tens(strNum : string) : string;
begin
case strNum[1] of
'1' : if strNum[2] ='0' then result := hTenToNinteNumbers[strToInt(strNum[1])]
else result := hZerrowToNineNumbers[StrToInt(strNum[2])] + #32 + hTeen;
'2'..'9' : result := hTenToNinteNumbers[strToInt(strNum[1])];
else result := #255;
end;
end;
function Hundreds(strNum : string) : string;
begin
case strNum[1] of
'1', '2' : result := hHanderndToNineHandrend[StrToInt(strNum[1])];
'3'..'9' : result := hZerrowToNineNumbers[strToInt(strNum[1])] + #32 + hHundrends;
else result := #255;
end;
end;
function Thousand(strNum : string) : string;
begin
case strNum[1] of
'1', '2' : result := hOneThousandToNineThousand[strToInt(strNum[1])];
'3'..'9' : result := hZerrowToNineNumbers[strToInt(strNum[1])]+ #32 + hThousand;
else result := #255;
end;
end;
/////////////////////////////////////////////////////////////////////
function hIntToStrNumber(Number : integer) : string;
//Thanks for HU-Man for helping to fix a bug that was in this function ...
var
strNum : string;
begin
strNum:= IntToStr(Number);
Case Length(strNum) of
1 : begin // 0 - 9
result := Single(strNum);
end;
2 : begin // 10 - 99
result := Tens(strNum);
if strNum[1] ='2' then
if strNum[2]'0' then result := result + #32 + hAnd + hIntToStrNumber(StrToInt(strNum[2]));
end;
3 : begin // 100 - 999
result := Hundreds (strNum);
if strNum[2] '0' then
if strNum[3] = '0' then result := result + #32 + hAnd + hIntToStrNumber(StrToInt(strNum[2]+strNum[3]))
else result := result + #32 + hIntToStrNumber(StrToInt(strNum[2]+strNum[3]));
if (strNum[2] ='0')and(strNum[3]'0') then result := result + #32 + hAnd + hIntToStrNumber(StrToInt(strNum[3]));
end;
4 : begin // 1,000 - 9,999
result := Thousand(strNum);
if (strNum[2] '0') then result := result + #32 + hIntToStrNumber(StrToInt(strNum[2]+strNum[3]+strNum[4]));
end;
else result := '';
end;
result := DeleteChar(Result,#255);
end;