Autor Beitrag
Brainiac
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: Fr 17.12.04 08:57 
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:

ausblenden 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
  //Assert(AOwner is TForm,'FullscreenManager must be placed directly on the main form!');
  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?