'TEdit.Change' nur bei Tasteneingabe !

Ich verwende eine Ereignisprocedure in OnChange eines TEdit.
Ich will die Ausführung einer solchen Ereignisprocedure nur, wenn TEdit über Tastatur verändert wurde.
Wenn ich dem TEdit einen Wert über den Code zuweisen, darf die „OnChange“ Ereignisprocedure nicht ansprechen.
„OnKeypressed“ geht nicht, weil die Ereignisprocedure erst ausgeführt werden soll, wenn die TEdit-Tasteneingabe abgeschlossen ist (mehrstellige Zahlen).

Danke für einen Tip

E. B.

Hi Eric,

Auf die schnelle geht´s z.B. so

beim setzen des Textes per Code benutze folgende Proc

Procedure SetText(s:String);
begin
SetByCode:=true; //die muß global vefügbar sein
edit1.Text:=s;
end;

in die Form1.Edit1Change schreibst Du

Begin
If SetByCode then Begin SetByCode:=False Exit; End;
{hier Deine üblichen Anweisungen}
End;

Besser wäre allerdings, wenn Du die ein Object aus TCustomEdit ableitest und diese Funktionen vernünftig kapselst.

Viel Erfolg,

Manfred

[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]

Hallo,

Ich verwende eine Ereignisprocedure in OnChange eines TEdit.
Ich will die Ausführung einer solchen Ereignisprocedure nur,
wenn TEdit über Tastatur verändert wurde.
Wenn ich dem TEdit einen Wert über den Code zuweisen, darf die
„OnChange“ Ereignisprocedure nicht ansprechen.
„OnKeypressed“ geht nicht, weil die Ereignisprocedure erst
ausgeführt werden soll, wenn die TEdit-Tasteneingabe
abgeschlossen ist (mehrstellige Zahlen).

Für deinen Zweck eignet sich wahrscheinlich die OnExit-Prozedur besser. Sie wird aufgerufen, wenn du das Editierfeld verlässt (also nach einer Änderung via Tastatur mit Tab oder der Maus den Fokus auf eine andere Komponente setzt.) Bei Zuweisung aus dem Code wird das Ereignis nicht aufgerufen.

Das OnChange-Ereignis ist nicht geeignet, weil es nach jedem Tastendruck aufgerufen wird (wie OnKeyPressed).

Gruss, Niels

Versuchs mal so:

procedure TForm1.Edit1Change(Sender: TObject);
begin
if (Sender as TEdit).focused then
// Durch Eingabe geändert
else
// Durch Zuweisung geändert
end;

Hi Ing,

Dein Vorschlag geht aber nicht immer!
Es kann ja sein, dass Edit1 den Focus hat, aber trotzdem per Code der Text verändert wird. Dann gerätst Du mit Deinem Code in den falschen Block!

Manfred

[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]