Hallo,
ich habe ein Problem. Hier erstmal der Code:
Delphi-Quellcode:
procedure TForm1.Edit1KeyPress(Sender: TObject; var Key: Char);
var
x:integer;
begin
if not (key in [#12]) then begin
if (key in [#8]) then begin
x:= Length(Label2.Caption);
Label2.Caption := Copy(Label2.Caption,1,x-1);
end
else begin
Label2.Caption := (Label2.Caption + key);
end
end;
if (key = GetCharFromVKey(vk_divide))or(key = GetCharFromVKey(vk_subtract))or(key = GetCharFromVKey(vk_add))or(key = GetCharFromVKey(vk_multiply)) then begin
hoch:=false;
end
end;
procedure TForm1.Edit1KeyDown(Sender: TObject; var Key: Word;
Shift: TShiftState);
var
test:string;
begin
x:= Length(Edit1.Text);
test:= GetCharFromVKey(key);
if Edit1.Text <> '' then begin
if (Shift=[ssAlt]) and ((test='1')or(test='2')or(test='3')or(test='4')or(test='5')or(test='6')or(test='7')or(test='8')or(test='9')or(test='0')) then begin
Label2.Caption := (Label2.Caption+'^'+test);
if hoch = false then begin
Edit1.Text := (Edit1.Text+'^'+GetCharFromVKey(key));
hoch := true;
end
else begin
Edit1.Text := (Edit1.Text+GetCharFromVKey(key));
end ;
end
end
end;
Das ganze soll folgendes bewirken:
Ich möchte in ein Edit-Feld eine Funktion eingeben. z.B. f(x)= x³+2x²+9x (wobei "f(x)=" nicht mit eingegeben wird).
Da Edit-Felder ja keine Exponenten darstellen können, habe ich nach langem Suchen eine Lebel-Komponente gefunden, die auch die Exponenten anzeigen kann (=> sub/superscript).
Wenn ich etwas ins Edit-Feld eingebe, soll es auch gleichzeitig im Label dargestellt werden. Jedoch gibt es nun einen Unterschied:
Im Lebel wird der Exponent richtig dargestellt und im Edit-Feld mithilfe von '^'. Wenn man die Alt-Taste in Verbindung mit einer Zahl drückt, dann erkennt das Programm, dass es sich hierbei um einen Exponenten handelt. Also trägt er im Edit-Feld '^'+dieZahl ein. Wenn ich aber z.B. x^23 haben möchte, soll er er nicht x^2^3 machen. Daher der Code oben.
Das klappt auch alles soweit. Das Problem nun ist jedoch, dass immer wenn ich die Alt-Taste drücke, der blinkende Cursor zum Anfang des Edit-Felds springt. D.h. wenn man danach wieder eine Variable oder eine Zahl eingibt, erscheint diese ganz am Anfang, anstatt am Ende.
Warum macht der das eigentlich? Soetwas steht ja nirgendwo im Code mit drin....
Gibt es nun die Möglichkeit, am Ende des Codes einen Befehl zu schreiben, der veranlasst, dass der Cursor wieder hinter die letzte Variable/Zahl springt?
Viele Grüße
Sascha