Hallo Leute... melde mich nach langer Zeit mal wieder zurück, weil ich wiedermal auf ein Problem gestoßen bin, dass mich schon öfter genervt hat.
Ich habe bereits mehrere Komponenten geschrieben, die beim Starten des Programms eine Aktion ausführen müssen, sobald alle Formkomponenten erstellt sind, allerdings noch keine Handles angelegt wurden. In meinem Fall jetzt ist es eine Komponente für Fullscreen-Darstellung, aber auch bei meinen GLBitmapFonts ist das Problem schon aufgetaucht.
Nun das TForm.OnCreate Ereignis ist dafür eigentlich perfekt, weil es eben genau in diesem Moment zwischen Erstellen der Komponenten und Erstellen der Handles ausgelöst wird. Allerdings kann ich schlecht mit meiner Komponente das OnCreate blockieren, immerhin verwendet das fast jeder. Eine mögliche Lösung wäre natürlich, das Original-OnCreate zu kopieren und dann in meiner Prozedur wiederum aufzurufen.
Würde dann ungefähr so aussehen:
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16:
| Constructor TFullscreenManager.Create(AOwner:TComponent); begin inherited; DestDispMode.dmSize:=SizeOf(DestDispMode); If not (csDesigning in ComponentState) then begin Bkp_OnCreate:=TForm(AOwner).OnCreate; TForm(AOwner).OnCreate:=OnFormCreated; end; end; Procedure TFullscreenManager.OnFormCreated(Sender:TObject); begin ChangeDispMode; If Assigned(Bkp_OnCreate) then Bkp_OnCreate(Sender); end; |
Geht natürlich... ist aber nicht so elegant und kann vielleicht auch zu unvorhersehbaren Fehlern führen.
Weiß jemand eine bessere Möglichkeit?