![]() |
Komponente vor der Erzeugung der 1. Form aktivieren?
Hallo,
Endlich habe ich den Prototypen meiner Exception-Handler-Komponente fertig, schon habe ich wieder ein (für mich) unlösbares Problem: Ich 'klebe' meine Komponente auf das Hauptformular, in meiner Kompo steht:
Delphi-Quellcode:
und alles funktioniert soweit.
PROCEDURE TFlappError.Loaded;
BEGIN IF Active THEN Application.OnException := onFlappException; // globalen Exception-Handler aktivieren END; Nun habe ich aber eine Applikation, wo im onCreate-Ereignis Ini-Dateien, Oracle-Db Anmeldungen u.ä. verarbeitet werden. Tritt nun dort ein Fehler auf, (sozusagen bevor die Form fertig erstellt wurde) ist auch meine Exception-Kompo machtlos, da sie ja auch noch nicht erstellt wurde. Meine Frage ist nun, kann ich eine Komponente vor dem Erzeugen der allerersten Form aktivieren, oder ist meine ganze Arbeit umsonst bzw. mein Ansatz falsch? Ich habe auch beim Jedi Projekt nachgeschaut, dort gibt es eine Unit Namens "ExceptDlg.pas" die in den Projektquelltext eingebunden wird. Mir ist das mit meiner Kompo nicht gelungen, außerdem wollte ich ja eine Kompo und keine Unit. Vielleicht weiß jemand Rat? :cry: Armin |
poste ma den source mit dem du sie im projektquelltext eingebunden hast und wo der fehler auftritt.
|
@MadMason,
danke für Dein Angebot, aber die ganze Kompo posten würde den Rahmen dieses Forums wohl sprengen. Die Kernfrage meines ersten Postings war eigentlich ob es möglich sei, eine Komponente vor dem 1. Formular zu erzeugen/aktivieren. Ich habe mich nun intensiver mit der Jedi-Library beschäftigt und werde wohl die Unit "ExceptDlg.pas" benutzen und ggf. erweitern und die Arbeit an meiner Kompo als "Lehrstück" betrachten. Armin |
Du kannst Komponenten auch ausserhalb Deines Forms erstellen, allerdings, können die dann nicht im Form sein. Dass heisst, eigentlich würde es auch eine "stinknormalle" Klasse tun, da die Komponente manuell im Code erstellt und zerstört werden muss. (Zwischen Application.Initialize; und Application.CreateForm(...);)
...:cat:... |
Moin Armin,
wenn die Kompo Bestandteil des Formulares ist, dann ist sie im FormCreate bereits vorhanden (sonst könnte man dort ja auch keine Eigenschaften der Komponenten einstellen). Du könntest auch mal versuchen die Kompo (wenn sie ausserhalb des Formulares ist) in der Projektdatei zu erzeugen, oder im initialization Abschnitt der Formular Unit (Freigabe nicht vergessen ;-) ) |
Hallo Christian,
genau das ist mein Probblem, irgendwie habe ich im Moment keine Idee wie der Code aussehen muß :oops: :
Delphi-Quellcode:
Armin
PROGRAM Compo_test;
uses Forms, FlappError, // Meine Komponente uMain in 'uMain.pas' {Form1}, Unit2 in 'Unit2.pas' {Form2}, Flapp_Utils in 'Flapp_Utils.pas'; {$R *.res} BEGIN Application.Initialize; ???? :-) Application.CreateForm(TForm1, Form1); Application.CreateForm(TForm2, Form2); Application.Run; END. |
Moin Armin,
hier mal zwei Möglichkeiten: Beide setzen allerdings voraus, dass sich die Kompo nicht auf einem der Formulare befindet.
Delphi-Quellcode:
// Variante 1
PROGRAM Compo_test; uses Forms, FlappError, // Meine Komponente uMain in 'uMain.pas' {Form1}, Unit2 in 'Unit2.pas' {Form2}, Flapp_Utils in 'Flapp_Utils.pas'; {$R *.res} var leWork : TFlappError; BEGIN Application.Initialize; leWork := TFlappError.Create; try Application.CreateForm(TForm1, Form1); Application.CreateForm(TForm2, Form2); Application.Run; finally FreeAndNil(leWork); end; END. // Variante 2 Unit Unit1; interface //... var leWork : TFlappError; //... implementation //... initialization begin leWork := TFlappError.Create; end; finalization begin FreeAndNil(leWork); end; |
Chris,
es funktioniert (wie üblich nach Deiner Lösung), vielen Dank! :bounce2: Armin p.s. Das Naheliegende kann oft sehr weit weg sein... |
Alle Zeitangaben in WEZ +1. Es ist jetzt 10:12 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz