Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi While Schleife um Application.Run (https://www.delphipraxis.net/70626-while-schleife-um-application-run.html)

backdraft 1. Jun 2006 19:10


While Schleife um Application.Run
 
Hallo zusammen,

ich möchte einen Login Dialog machen, der vor der Mainform ausgeführt wird.
Dann soll die Möglichkeit bestehen, das man sich abmelden und neu anmelden kann.

Dachte ich mach es einfach so:

Delphi-Quellcode:
 WHILE TRUE DO BEGIN
  IF NOT(frm_Login.Create(self).Execute) THEN halt;
  Application.Run;
  IF vabmelden = FALSE THEN break;
 END;
klappt aber gar nicht. geht trotzdem immer raus...

SirThornberry 1. Jun 2006 19:49

Re: While Schleife um Application.Run
 
ich seh hier aber auch nirgends etwas das die variable vabmelden auf False setzt. Desweiteren seh ich den Sinn hier nicht. Application.Run startet die Nachrichtenschleife. Wenn die ganzen Forms aber zuerstört sind etc. macht das 0 sinn.

Vjay 2. Jun 2006 09:07

Re: While Schleife um Application.Run
 
Hallo Backdraft,

deine Idee ist logisch gesehen richtig, du musst aber wissen, dass wie SirThornberry bereits angemerkt hatte Application.Run nicht dein Hauptformular darstellt.

Du müßtest also das Hauptformular ebenfalls in der Schleife erzeugen, womit wir zum nächsten Problemchen kommen.
Deine Delphianwendung kennt nur ein Hauptformular, dieses definiert sich darüber welches Form zuerst erzeugt wird (ist evtl. über das APplication-Objekt im nachhinnein änderbar, bin mir da aber nicht sicher). Wird dieses "Hauptforumlar" geschlossen, wird das Application.Run, also deine Nachrichtenschleife verlassen und die Anwendung beendet sich normalerweise.

An deiner Stelle würde ich das so machen, dass ich das Loginform vor der Schleife erzeuge, in der Schleife mit showModal anzeige und den Rückgabewert auswerte.
Wenn der Rückgabewert ok ist, zeige ich das eigentliche Forumlar an. Somit ist das Loginform das Hauptformular und es sollte eigentlich funktionieren. Ein Action:= caHide; in der OnClose des Loginforms müßtest du allerdings auch verwenden. In die OnClose des Hauptformulars schreibst du sendMessage(Application.handle, WM_QUIT, 0, 0); Dies durchbricht die Nachrichtenschleife in Application.run, somit brauchst du dir keine eigene Programmieren, die nur solange läuft, wie das Form existiert.

Oder du machst ein drittes Form zur Hauptform, lässt alles wie es ist und die beiden Login+Hauptschirm rufen sich nur gegenseitig auf.


Alle Zeitangaben in WEZ +1. Es ist jetzt 18:51 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