Lazarus-Tom hat geschrieben:An dieser Stelle ist der Rezeptname eingegeben UND überprüft worden. Eine weiter Eingabe ist nicht nötig!
Ich habe das mal rausgelassen: Trotzdem der Artefakt.
Habs eben getestet, wenn ich es auskommentiere, kommt es nicht zu einem zweiten Aufruf:
Code: Alles auswählen
procedure TForm1.LabeledEdit1EditingDone(Sender: TObject);
var
Rezept: String;
begin
Rezept := LabeledEdit1.Text;
// LabeledEdit1.Enabled:=False;
if Application.MessageBox(PChar('Rezeptname ok: "' + Rezept + '"?'), 'Bestätigung', MB_ICONQUESTION + MB_YESNO) = idYes then
begin
ShowMessage('Alles OK');
LabeledEdit1.Enabled:=True;
end
else
begin
ShowMessage('Rezeptnamen bitte neu eingeben!');
LabeledEdit1.Enabled:=True;
end;
end;
Lazarus-Tom hat geschrieben:An dieser Stelle ist der Rezeptname eingegeben UND überprüft worden. Eine weiter Eingabe ist nicht nötig!
Soweit konnt ich mir das schon denken, das Problem ist, dass Du dadurch das Event vom LabeledEdit nicht ordentlich abarbeiten lässt. IMHO, entweder Du verzichtest darauf das LabeledEdit auszustellen, verbiegst das Event oder nutzt den Ansatz von wp_xyz mit einem separaten Button (was in diesem Fall wahrscheinlich die sauberste Lösung wäre).
[Edit]Mit einem Application.Processmessage wird das LabeledEdit bei mir dann auch ordentlich ausgeschaltet und .EditingDone nicht doppelt aufgerufen:
Code: Alles auswählen
procedure TForm1.LabeledEdit1EditingDone(Sender: TObject);
var
Rezept: String;
begin
Rezept := LabeledEdit1.Text;
LabeledEdit1.Enabled:=False;
Application.ProcessMessages;
if Application.MessageBox(PChar('Rezeptname ok: "' + Rezept + '"?'), 'Bestätigung', MB_ICONQUESTION + MB_YESNO) = idYes then
begin
ShowMessage('Alles OK');
LabeledEdit1.Enabled:=True;
end
else
begin
ShowMessage('Rezeptnamen bitte neu eingeben!');
LabeledEdit1.Enabled:=True;
end;
end;
...gefällt mir trotzdem irgendwie nicht.