Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Programm beenden bevor Mainform angezeigt wird (https://www.delphipraxis.net/64177-programm-beenden-bevor-mainform-angezeigt-wird.html)

r_kerber 28. Feb 2006 15:02


Programm beenden bevor Mainform angezeigt wird
 
Moin

ist es möglich eine Delphi-Anwendung "sauber" zu beenden, bevor überhaupt Application.Run ausgeführt wird und das Hauptfenster sichtbar ist. Ich habe hier ein Programm vor, in dem zunächst diverse DataModule und Formulare erzeugt werden. Und im OnCreate eines dieser Formulare wird dann "festgestellt" daß das Programm gar nicht erst starten soll (in einem DB-Anmeldefenster wird auf Abbrechen geklickt).

SirThornberry 28. Feb 2006 15:05

Re: Programm beenden bevor Mainform angezeigt wird
 
was verstehst du unter "sauber" beenden?
du könntest zum einen "Halt" verwenden. Oder die sauberste Variante ist "Application.Run" nur auszuführen wenn eine Bedingung erfüllt ist.

r_kerber 28. Feb 2006 15:16

Re: Programm beenden bevor Mainform angezeigt wird
 
Zitat:

Zitat von SirThornberry
was verstehst du unter "sauber" beenden?

Ohne jegliche Schutzverletzungen, Fehlermeldungen oder Signaltöne. Ich habe es zur Zeit so gelöst, daß ich im Create der Form ein Boolean-Eigenschaft belege und in der dpr (nach dem Create) diesen Wert abfrage. Dann erhalte ich jedoch eine Schutzverletzung. Und diese will ich möglichst umgehen.

dataspider 28. Feb 2006 15:20

Re: Programm beenden bevor Mainform angezeigt wird
 
Ich habe es in die DPR geschrieben:

Delphi-Quellcode:
{----------------------------------------------------------------------------}
{$IFDEF MEMCHECK}
  MemCheckLogFileName := 'mc.log';
  MemChk;
{$ENDIF}
{----------------------------------------------------------------------------}

Application.Initialize;

{----------------------------------------------------------------------------}
if not LoginDialog then
begin
  // Achtung, sonst Exception, wird nicht ganz fertig
  Application.ProcessMessages;
  Exit;
end;
{----------------------------------------------------------------------------}

Application.CreateForm(TFRMMain, FRMMain);
Application.Run;
Die Anwendung wird so sauber beendet.

Cu, Frank

r_kerber 28. Feb 2006 15:24

Re: Programm beenden bevor Mainform angezeigt wird
 
Das Problem ist aber, daß die Login-Funktion aus dem MainWindow aufgerufen werden muß, da als Parameter die Statusbar übergeben wird.

alzaimar 28. Feb 2006 15:29

Re: Programm beenden bevor Mainform angezeigt wird
 
Dein Ansatz ist falsch: Im OnCreate sollte man nicht abbrechen (wie Du ja gemerkt hast)
Ich mache es so:
1. Das eigentliche Hauptfenster, sei es 'TfmMain', wird erst zur Laufzeit erzeugt.
2. Ich habe einen kleinen Login-Dialog
3. Ich erzeuge im Hauptprogramm nur die Datenmodule und als Letztes den Login-Dialog. Also ist der Logindialog die Hauptform der Anwendung!

Der Login-Dialog hat 2 Knöppels (OK und Abbruch, btOk und btCancel) sowie zwei Eingabefelder (edLogin und edPassword).

Delphi-Quellcode:
Procedure TfmLoginDialog.btOkClick (Sender : TObject);
Begin
  If DM.LoginOk (edLogin.Text, edPassword.Text) Then Begin
    Self.Hide;
    With TfmMain.Create (Nil) Do Begin
      ShowModal;
      Release;
    End;
    Self.Show;
  End
  Else Raise Exception.Create('Login inkorrekt');
End;

Procedure TfmLoginDialog.btCancelClick (Sender : TObject);
Begin
  If AskUserYesNo('Wirklich beenden?') = mrYes Then
    Close;
End;
Also sauberer hab ich es bisher nicht hinbekommen.

Oje: Neue Beiträge... Die Sache mit der Statusbar...
Na dann so:
Mein Hauptfenster ist im Gegensatz zum o.g. Ansatz weiterhin das Hauptfenster.
Ich habe ein Panel, das über allen Controls liegt. In der Mitte des Panels ist ein Login-Edit sowie die bekannte Ok/Abbruch-Knöpfe.

Das Panel ist beim Start sichtbar und überdeckt ALLES (bis auf -von mir aus- die Statusbar). Der Login 'dialog' befindet sich auf dem Panel. Wer sich Mühe gibt, verwendet eine Pagecontrol mit 2 Seiten (tcLogin und tcMain). Die Page-Reiter sind unsichtbar.

Wenn der Login ok ist, wird das dicke Panel einfach unsichtbar gemacht und die Hauptanwendung wird sichtbar.

Vom Rumwerkeln im Projekt-Quellcode halte ich Nichts.


Alle Zeitangaben in WEZ +1. Es ist jetzt 17:11 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz