![]() |
Programm beenden
Hallo,
ich habe eine Komponente die beim Start meines Programmes ein Fenster öffnet. (es ist ein LoggIn Dialog) Wie kann ich es erreichen das bei einem nicht erfolgreichen loggin der Start des Programmes abgebrochen wird und das Programm sofort beendet wird. Im Augenblick mache ich es so:
Delphi-Quellcode:
Dann wird aber das Fenster des Programmes erst noch fertig erstellt und dann das Porgramm geschlossen.
procedure TRegisterDlg.loaded();
begin inherited; IF csDesigning IN ComponentState THEN // Komponente ist zur Designtime (=DragDrop) erstellt worden BEGIN Exit; END; if FShowonstartup then begin showform; end; end; function TRegisterDlg.showForm() : Integer; begin IF csDesigning in ComponentState THEN BEGIN Exit; END; if not Assigned(FRegisterform) then begin FRegisterform := TStart.Create(Nil); end; if FRegisterform.ShowModal = idCancel then begin FRegisterform.Close; freeAndNil(FRegisterform); Application.terminate; end; end; Wie kann ich den Programmstart abbrechen? Danke für Eure Hilfe EarlyBird |
Re: Programm beenden
Hallo,
Halt ? Heiko |
Re: Programm beenden
Danke für den Tipp.
leider geht es nicht mit Halt innerhalb der Komponente. Ich mache es jetzt im onCreate des DataModules
Delphi-Quellcode:
Das funktioniert.
procedure TOraData.DataModuleCreate(Sender: TObject);
begin if not RegisterDlg1.isLoggedIn then Halt; end; Ist aber nicht so schön da ich das Programm gern in der Komponente selbst beenden würde. Ist das überhaupt möglich? EarlyBird |
Re: Programm beenden
Zur Not Forms in die uses aufnehmen und per Application.Terminate in die ewigen Jagdgründe übergehen.
|
Re: Programm beenden
Application.Terminate beendet den create Prozess des Programmes nicht.
Der Prozess wird erst fertig ausgeführt und dann wird das Programm beendet. |
Re: Programm beenden
Hi,
ok, andere Möglichkeit, die ich gerne nutze: Quellcode der dpr-Datei:
Delphi-Quellcode:
Ich hoffe, dass Prinzip ist Dir klar?
LoginForm := TLoginForm.Create(Application);
if (LoginForm.ShowModal = mrOK) then begin FreeAndNil(frmLanguageSelector); Application.CreateForm(TdmData, dmData); Application.CreateForm(TfrmMain, frmMain); Application.Run; end; |
Re: Programm beenden
Um ein Formular während des Aufrufs abzubrechen, bevor es überhaupt erscheint, überschreibe ich immer den Konstruktor des Formulars.
Delphi-Quellcode:
In der aufrufenden Prozedur muss die Exception dann per Try .. Except abgefangen werden, damit sie nicht nach außen dringt.
Type
TMyForm = Class(TForm) ... public constructor Create(AOwner: TComponent); override; ... end; implementation constructor TMyForm.Create(AOwner: TComponent); begin ... Abbruchprüfung ... if <Abbruchbedingung erfüllt> then Raise Exception.Create(<Fehlermeldung>); inherited; ... end; Gruß Daddy |
Re: Programm beenden
@Daddy:
Im Prinzip mache ich es jetzt auch so. Im DataModul das meine Komponente enthält prüfe ich im onCreate den Booleanwert einer Property meiner Komponente.
Delphi-Quellcode:
So kann ich auf die Exeption verzichten.
procedure TOraData.DataModuleCreate(Sender: TObject);
begin if not MeineKomponente.isLoggedIn then Halt; end; Das klappt auch ganz gut so. Noch lieber wäre es mir aber ich könnte das Ganze direkt in meine Komponente verlagern. Da habe ich noch keinen Weg gefunden. @Muhkuh: Das Prinzip ist mir klar. Hilft mir aber leider mit meiner Komponente nicht weiter. Gruß EarlyBird |
Re: Programm beenden
Hallo EarlyBird!
Was mir noch nicht ganz klar ist: Kannst Du denn nicht im DPR-File den Aufruf Deines Formulars verhindern? Etwa in dieser Form:
Delphi-Quellcode:
Gruß
...
begin ... if MeineKomponente.isLoggedIn then begin ... Application.Run; ... end; ... end. Daddy [Edit] Siehe auch bereits Beitrag #6 [/Edit] |
Re: Programm beenden
Genau das wollte ich damit auch sagen ;-)
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 15:46 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