OnEditingDone - 2 Forms

Rund um die LCL und andere Komponenten
Antworten
Knittel
Beiträge: 12
Registriert: Sa 26. Mär 2016, 14:43

OnEditingDone - 2 Forms

Beitrag von Knittel »

Hallo allerseits,

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;  
- Wenn im OpenGL Fenster auf ein Objekt geklickt wird, dann aktualisiert das die Edit und Memo Felder in der 2ten Form, daher sollte die Lösung
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]

Benutzeravatar
theo
Beiträge: 10874
Registriert: Mo 11. Sep 2006, 19:01

Re: OnEditingDone - 2 Forms

Beitrag von theo »

Kannst du nicht sowas machen?

Code: Alles auswählen

procedure TForm2.FormDeactivate(Sender: TObject);
begin
  if ActiveControl is TEdit then ShowMessage('Tuwas mit '+ActiveControl.Name);
end; 

Knittel
Beiträge: 12
Registriert: Sa 26. Mär 2016, 14:43

Re: OnEditingDone - 2 Forms

Beitrag von Knittel »

Ja, funktioniert super. Die Lösung sieht bei mir jetzt einfach so aus:

Code: Alles auswählen

procedure TEditorForm.FormDeactivate(Sender: TObject);
begin
if (ActiveControl <> nil) then
  ActiveControl.EditingDone();
end;     
Vielen Dank! :)

Antworten