![]() |
Komponente - Constructor MainForm.Hide = Access Violation???
.
. . . . . . . . . . . . . . . |
Re: Komponente - Constructor MainForm.Hide = Access Violatio
Wo wird denn die Komponente erzeugt?
Sie darf auf jeden Fall NICHT im MainForm-Create sein. Also wenn deine Hauptform Form1 heisst und du die Komponente auf Form1 packst bzw. in Form1.OnCreate erzeugst, ist klar, dass es da knallt. Denn da gibt es noch keine "MainForm" im Programm, sondern erst, nachdem FormCreate durchgelaufen ist (... und wahrscheinlich noch 'n paar Events später). |
Re: Komponente - Constructor MainForm.Hide = Access Violatio
Zitat:
Auf jeden Fall ist es eine schlechte Idee 'soetwas' im Constructor des Mainforms zu veranstalten. Ich rate jetzt mal: Versuch im Constructor ein Flag zu setzen, das definiert, ob das Mainform oder das RegForm angezeigt werden soll dann im Projektquelltext so etwas aehnliches wie:
Delphi-Quellcode:
...
Application.CreateForm(TfrmMain, frmMain); if frmMain.statusFlag then Application.Run else begin frmMain.RunRegDlg end; Dazu muesstest Du eben noch die Methode RunRegDlg implementieren, die den entsprechenden Dialog anzeigt
Delphi-Quellcode:
[edit=SirThornberry]Delphi-Tags gesetzt - Mfg, SirThornberry[/edit]
frmRegDlg:=TfrmRegDlg.create(self);
frmRegDlg.showmodal; frmRegdlg.free; self.close; |
Re: Komponente - Constructor MainForm.Hide = Access Violatio
Also.. erstmal danke für das feedback!
Das ganze soll eine Komponente sein, die prüft ob eine Registrierungsdatei für die Anwendung vorhanden ist, oder nicht. Wenn nicht, dann soll nicht das mainForm angezeigt werden, sondern aus meiner Komponente ein Registrierungsformular. Da das Programm ohne Registrierung nicht nutzbar sein soll, möchte ich das direkt nach dem Start prüfen und ausführen. Die Idee die dahinter steckt ist, das ich meine Programme mit einfachem setzen meiner Komponente auf das Hauptformular schütze. Wie das geht und ob das im Constructor geht ist eben die Frage. Das ist meine erste Komponente. Ich habe den Constructor gewählt, weil der ja beim Anwendungsstart ausgeführt wird. Wichtig ist nur, das die Komponente das alles selber regeln soll, ohne das man später eine Zeile Code eingeben muss. |
Re: Komponente - Constructor MainForm.Hide = Access Violatio
Okay, dann mach es so wie ich oben geschrieben habe.
Setze ein Flag im constructor Wenn das Flag gesetzt ist, entweder im Hauptprogramm den Reg-Dialog starten oder im OnShow-event das Flag ueberpruefen und ggf. den RegDialog von dort aus starten. |
Re: Komponente - Constructor MainForm.Hide = Access Violatio
Wenn du es nicht über Flags und Properties lösen kannst, dann könnten dir noch Messages helfen.
|
Re: Komponente - Constructor MainForm.Hide = Access Violatio
Delphi-Quellcode:
if Assigned(Application.MainForm) then // nur wenn es schon eine Mainform gibt
Application.MainForm.Hide; // dann verstecken |
Re: Komponente - Constructor MainForm.Hide = Access Violatio
Danke! Das werde ich mal ausprobieren. Melde mich dann wieder!
|
Re: Komponente - Constructor MainForm.Hide = Access Violatio
Also das...
Delphi-Quellcode:
Funktioniert im Constructor nicht. Das Fenster wird ganz normal angezeigt.
..
if Assigned(Application.MainForm) then // nur wenn es schon eine Mainform gibt Application.MainForm.Hide; // dann verstecken ... Wie kann ich denn mit meiner Komponente auf das onShow Event von MainForm zugreifen? Denn Die Komponente soll ja alles steuern. |
Re: Komponente - Constructor MainForm.Hide = Access Violatio
Und wenn Du es mal mit
Delphi-Quellcode:
versuchst? Ist nur so ein Gedanke.
Application.ShowMainForm := false
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 08:45 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-2025 by Thomas Breitkreuz