Ich arbeite an einem Projekt mit 2 Forms: Form1 welchen den Inhalt mittels OpenGL anzeigt und in der anderen benutze ich die ganz normalen Lazarus Controls (Form2) zum editieren des Inhalt im OpenGL Fensters.
Dabei habe ich folgendes Problem: In der 2ten Form habe ich Edit und Memo Felder mit einem OnEditingDone Event versehen. Wenn ich innerhalb von Form2 herumklicke wird OnEditingDone auch immer schön ausgelöst,
aber wenn ich auf Form1 klicke, wird das Event nicht ausgelöst. Ich habe es auch mal mit OnExit probiert, aber dieses Event wird ebenfalls nicht ausgelöst.
Gibt es da eine schöne Lösung, wie ich dieses Event trotzdem auslösen kann? (wenn man den Fokus auf Form1 wechselt).
Anmerkung:
- In meiner 2ten Form hat es einen ganzen Haufen solcher Edit Felder, daher sollte die Lösung nicht einfach all OnEditingDone() Events aufrufen.
- Ich hatte schon die Idee in Form1.OnActivate() das OnEditingDone() Event der aktiven Komponente in Form2 aufzurufen, aber dazu habe ich keine passende Funktion gefunden die mit diese Komponente gibt.
Vielen Dank schonmal im Vorraus,
Mit freundlichen Grüßen Knittel
Zusätzliche Infos (falls benötigt):
- Dass das Event tatsächlich nicht ausgelöst wird, habe ich sowohl über den Debugger als auch mit einem showmessage in der ersten Zeile der Funktion getestet.
- Hier mal der Code von Event, obwohl ich mir nicht vorstellen kann, das hier der Fehler liegt:
Code: Alles auswählen
procedure TEditorForm.MContentTextEditingDone(Sender: TObject);
begin
assert(FTextComponent <> nil, 'TEditorForm.MContentTextEditingDone(): Editing text should only be possible if there is a text component.');
FTextComponent.Text := MContentText.Text;
end;
das Event aufrufen, bevor der OnClick Handler des OpenGL-Fensters abgehandelt wird.
- Wenn ich Text im Edit-Feld bearbeite, dann auf den Rahmen vom OpenGL Fenster klicke und dann auf eine andere Control in Form2 klicke löst das Event aus. Es scheint also,
als denkt er, dass das Textfeld noch nicht verlassen wird, wenn man auf ein anderes Fenster klickt.[/i]