Hallo!
Ich habe wiedereinmal ein Problem.
Ich würde gerne das mein Cursor in einem Edit wieder an eine bestimmte stelle im Text springt.
SelStart funktioniert nicht, da bei meiner Lazarus-Version man anscheinend noch keine Position setzen kann.
Ich hab bis jetzt folgendes:
Delphi-Quellcode:
procedure TMyDatumEdit.MyOwnKeyDown(var Key: Word);
begin
// Zahlen 0..9:
if (Key>=$30) and (Key<=$39) then exit
else
// Zahlen 0..9 auf dem Nummpat:
if (Key>=$60) and (Key<=$69) then exit
else
// Enter:
if (Key=$0D) then exit
else
// Clear-Taste:
if (Key=$0C) then exit
else
// Tab:
if (Key=$09) then exit
else
// Page-Down:
if (Key=$28) then exit
else
// Esc:
if (Key=$1B) then exit
else
// F1..F16:
if (Key>=$70) and (Key<=$7F) then exit
else
// Backspace:
if (Key=$08) then exit
else
// Dezimalpunkt:
if (Key=$6C) then exit
else
// Pfeil Links und Rechts:
if (Key=$25) or (Key=$27) then exit
else
// Tastendruck zurücksetzen:
Key:=$00;
end;
procedure TMyDatumEdit.KeyDown(var Key: Word; Shift: TShiftState);
begin
MyOwnKeyDown(Key);
DeleteChar(Key);
inherited KeyDown(Key, Shift);
end;
procedure TMyDatumEdit.KeyUp(var Key: Word; Shift: TShiftState);
var tmp:integer;
amsg:TLMKey;
begin
inherited KeyUp(Key, Shift);
if (Text[3]<>'.')then
begin
Text:=UTF8Copy(Text,1,2)+'.'+Text[3]+UTF8Copy(Text,5,5);
// Hier würde ich gerne Den Cursor um 5 Zeichen zurücksetzen.
// Meine lösung funktioniert nicht. (Result=false)
amsg.CharCode:=$25;
for tmp:=10 downto 5 do
Showmessage(booltostr(DoKeyPress(amsg))+' '+char(amsg.CharCode));
end;
end;
procedure TMyDatumEdit.DeleteChar(Var Key:Word);
begin
if (Length(Text)=10) and (Key<>$00) and (Key<>$0D) and (Key<>$08) then
begin
// Überschreibmodus Simulieren:
if (SelLength = 0) then
SelLength:=1;
end;
end;
Wisst ihr wie ich da ranngehen soll?
gruß Teekeks