du musst den Edit1.text schon am Anfang in eine Variable einlesen. Auf die greifst du dann zu:
Delphi-Quellcode:
var
i,cha,neu:integer;
serial,s:
string;
const
hexes:string='
0123456789ABCDEF';
begin {Procedure}
if length(Edit1.Text) < 3
then
Edit2.Text := '
Der Benutzername ist zu kurz!'
else if length(Edit1.Text) > 50
then
Edit2.Text := '
Der Benutzername ist zu lang!'
else
begin {if}
s:=edit1.text;
for i:=1
to length(Edit1.Text)
do
begin
cha := integer(s[i]);
{Get char }
asm
MOV eax,cha
XOR eax,201527
ADD eax,3735928559
IMUL eax,eax, 1638
SUB eax,464370355
SHL eax,3
XOR eax,3545092109
ADD ebx,eax
MOV neu,ebx
end;
end;
{Hier muss EBX noch in einen HEX-Wert geändert werden}
serial := hexes[neu
div 16]+hexes[neu
mod 16];
Edit2.Text := serial;
end;
{if}
end;
jetzt gibt es noch eine
AV weil deine Hex-Umwandlungs-Prozedur nur für Zahlen unter 256 geht.
Zur Hex-Umwandlung kannst du diese Proc verwenden:
Delphi-Quellcode:
function hextostr(hex:int64):string;
const
hexes:string='0123456789ABCDEF';
var
hextmp:int64;
kn:boolean;
begin
hextmp:=hex;
kn:=false;
result:='';
if hextmp<0 then begin
hextmp:=-hextmp;
kn:=true;
end;
if hextmp=0 then begin
result:='0';
exit;
end;
while hextmp<>0 do begin
result:=hexes[1+(hextmp mod 16)]+result;
hextmp:=hextmp div 16;
end;
if kn then result:='-'+result;
end;
diese Funktion habe ich gerade selbst gebastelt. Müsste funktionieren für Zahlen zwischen +9223372036854775808 und -9223372036854775807.
aufdieselbe Art kannst du auch dein eigenes inttostr schreiben: einfach 16 durch 10 ersetzen und fertig.
Michael Enßlin
Ich, der ich weiß, mir einzubilden, dass ich weiß, nichts zu wissen, weiß, dass ich nichts weiß.
Sokrates