AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Object-Pascal / Delphi-Language Delphi Programm beenden bevor Mainform angezeigt wird
Thema durchsuchen
Ansicht
Themen-Optionen

Programm beenden bevor Mainform angezeigt wird

Ein Thema von r_kerber · begonnen am 28. Feb 2006 · letzter Beitrag vom 28. Feb 2006
Antwort Antwort
Benutzerbild von r_kerber
r_kerber

Registriert seit: 11. Feb 2003
Ort: Trittau
3.538 Beiträge
 
Delphi XE Professional
 
#1

Programm beenden bevor Mainform angezeigt wird

  Alt 28. Feb 2006, 15:02
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).
  Mit Zitat antworten Zitat
Benutzerbild von SirThornberry
SirThornberry
(Moderator)

Registriert seit: 23. Sep 2003
Ort: Bockwen
12.235 Beiträge
 
Delphi 2006 Professional
 
#2

Re: Programm beenden bevor Mainform angezeigt wird

  Alt 28. Feb 2006, 15:05
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.
Jens
Mit Source ist es wie mit Kunst - Hauptsache der Künstler versteht's
  Mit Zitat antworten Zitat
Benutzerbild von r_kerber
r_kerber

Registriert seit: 11. Feb 2003
Ort: Trittau
3.538 Beiträge
 
Delphi XE Professional
 
#3

Re: Programm beenden bevor Mainform angezeigt wird

  Alt 28. Feb 2006, 15:16
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.
  Mit Zitat antworten Zitat
Benutzerbild von dataspider
dataspider

Registriert seit: 9. Nov 2003
Ort: 04539 Groitzsch
1.350 Beiträge
 
Delphi 11 Alexandria
 
#4

Re: Programm beenden bevor Mainform angezeigt wird

  Alt 28. Feb 2006, 15:20
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
Frank Reim
  Mit Zitat antworten Zitat
Benutzerbild von r_kerber
r_kerber

Registriert seit: 11. Feb 2003
Ort: Trittau
3.538 Beiträge
 
Delphi XE Professional
 
#5

Re: Programm beenden bevor Mainform angezeigt wird

  Alt 28. Feb 2006, 15:24
Das Problem ist aber, daß die Login-Funktion aus dem MainWindow aufgerufen werden muß, da als Parameter die Statusbar übergeben wird.
  Mit Zitat antworten Zitat
alzaimar
(Moderator)

Registriert seit: 6. Mai 2005
Ort: Berlin
4.956 Beiträge
 
Delphi 2007 Enterprise
 
#6

Re: Programm beenden bevor Mainform angezeigt wird

  Alt 28. Feb 2006, 15:29
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.
"Wenn ist das Nunstruck git und Slotermeyer? Ja! Beiherhund das Oder die Flipperwaldt gersput!"
(Monty Python "Joke Warefare")
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 18:23 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