Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   Showmodal - modalresult (https://www.delphipraxis.net/136977-showmodal-modalresult.html)

youuu 11. Jul 2009 16:09


Showmodal - modalresult
 
Hi,

ich möchte gern ein Login realisieren, wie mach ich das am besten?

Ich hatte gedacht es am besten so zurealisieren:

Login Form anzeigen --> eingabe ok --> login Form schließen --> Main Form öffnen.

Wenn ich dies aber so realisier, wird unten in der Taskleiste mein Programm nicht mehr angezeigt, da das Login Fenster als Hauptanwendungs-Fenster deklariert ist und mit Hide verschwindet.

Wie kann ich dies besser per Showmodal realisieren?

Häng grad fest.

Bernhard Geyer 11. Jul 2009 16:16

Re: Showmodal - modelresult
 
Erzeuge dein Login-Form im OnCreate des Hauptformulars.
Und bei fehlerhaften Login beende das Hauptformular mit PostMessage(self.Handle, WM_CLOSE, 0, 0);

jaenicke 11. Jul 2009 16:20

Re: Showmodal - modelresult
 
Man kann das Loginformular auch einfach im Projektquelltext erzeugen. Dann spart man sich die Verrenkung mit der Message und auch gleich das Erzeugen des Hauptfensters, wenn der Login nicht erfolgreich war.

Man darf das Loginfenster nur nicht mit Application.CreateForm erzeugen, sondern muss ganz normal den Konstruktor benutzen, dann geht das...

youuu 11. Jul 2009 16:22

Re: Showmodal - modelresult
 
Zitat:

Zitat von Bernhard Geyer
Erzeuge dein Login-Form im OnCreate des Hauptformulars.
Und bei fehlerhaften Login beende das Hauptformular mit PostMessage(self.Handle, WM_CLOSE, 0, 0);

Problem dabei ist das ich im Main Form etwas im OnShow Event habe und das Ereignis darf vor dem Login einfach nicht auftreten.

jaenicke 11. Jul 2009 16:28

Re: Showmodal - modelresult
 
OnCreate wird vor OnShow ausgelöst. Das heißt du könntest an der Stelle auch einfach ein Flag setzen, ob das ausgeführt werden soll.

Aber das ist wie gesagt alles gar nicht notwendig, erzeuge das Hauptformular einfach gar nicht erst, wenn der Login nicht erfolgreich war.

youuu 11. Jul 2009 16:34

Re: Showmodal - modelresult
 
Zitat:

Zitat von jaenicke
OnCreate wird vor OnShow ausgelöst. Das heißt du könntest an der Stelle auch einfach ein Flag setzen, ob das ausgeführt werden soll.

Aber das ist wie gesagt alles gar nicht notwendig, erzeuge das Hauptformular einfach gar nicht erst, wenn der Login nicht erfolgreich war.

Kannst du mir ein Beispiel geben, habe da mit noch gar keine Erfahrung.

jaenicke 11. Jul 2009 16:37

Re: Showmodal - modelresult
 
Naja, wie ich geschrieben habe...
Delphi-Quellcode:
  Application.Initialize;
  frmLogin := TfrmLogin.Create(nil);
  try
    if (frmLogin.ShowModal <> mrOk) or (frmLogin.UserName <> 'Test') then
      Exit;
  finally
    frmLogin.Free;
  end;
  Application.CreateForm(TfrmMain, frmMain);
  Application.Run;

youuu 11. Jul 2009 16:39

Re: Showmodal - modelresult
 
âh danke

jaenicke 11. Jul 2009 16:40

Re: Showmodal - modelresult
 
Ich habe gerade noch die Freigabe des Formularobjekts hinzugefügt, das hatte ich eben vergessen. ;-)

youuu 11. Jul 2009 17:10

Re: Showmodal - modelresult
 
Delphi-Quellcode:
  Application.Initialize;
  FormLogin :=  Application.Initialize;
  FormLogin := FormLogin.Create(nil);
  try
    if Login_exist then
      Exit;
  finally
    FormLogin.Free;
  end;
  Application.CreateForm(TFormMain, FormMain);
  Application.CreateForm(TFormKunden, FormKunden);
  Application.CreateForm(TFormPosition, FormPosition);
  Application.Run;
Edit ok hab

Delphi-Quellcode:
FormLogin.Create(nil);
in
Delphi-Quellcode:
TFormLogin.Create(nil);
geändert dummer Fehler meinerseits, allerdings wenn ich nun starte, wird trotzdem wieder FormMain.Show gestartet und ich krieg logischerweise eine Fehlermeldung, da meine Objekte alle noch af nil stehen.

Jedoch sollte das Ereignis FormShow des Hauptformulars noch warten bis der Login erfolgreich war.

youuu 11. Jul 2009 19:25

Re: Showmodal - modalresult
 
keiner eine Idee ich versteh das mit Modalresult und Showmodal einfach nicht.

Hier nochmal der Ausgangspunkt:
Delphi-Quellcode:
  Application.Initialize;
  Application.MainFormOnTaskBar:= true;
  Application.Title:= 'Kunden Verwalrungsmanager';
  Application.CreateForm(TFormLogin, FormLogin);
  Application.CreateForm(TFormMain, FormMain);
  Application.CreateForm(TFormKunden, FormKunden);
  Application.CreateForm(TFormPosition, FormPosition);
  Application.Run;
Ich möchte das FormLogin nicht das MainFomular ist, da wenn ich es schließe die Anwendung geschlossen wird und wenn ich Hide die Anwendung in der Taskleiste verschwindet.

Es soll also nur ein dazwischen geschoebenes Fenster sein.
Allerdings das FormMain welches das eigentliche Hauptformular sein soll, nicht bei Anwendungsstart das Ereigenes OnShow ausgführt werden, da Die Objekte erst in FormLogin Initialisiert werden bei efolgreichen Login.

jaenicke 11. Jul 2009 19:33

Re: Showmodal - modalresult
 
Statt das Loginfenster anzuzeigen, hast du ja da auch nur Login_exist abgefragt, was auch immer das bedeuten soll...

Du musst zuerst das Loginfenster anzeigen. Dann fragst du den Login ab und wenn der nicht erfolgreich ist, dann springst du einfach raus. Dann wird das Hauptfenster weder erzeugt noch angezeigt noch irgendwas.

Und was haben Objektinitialisierungen im Loginfenster verloren? Das ist doch nur zum Login da...
Die kannst du doch in OnShow machen, wenn der Login erfolgreich war.

youuu 11. Jul 2009 19:39

Re: Showmodal - modalresult
 
Ich versteh nur das ganze Prinzip noch nicht, als ich es so machte wie du geschrieben hattest sagte er mir mrOk ist nicht deklariert.

Kannst du mir das einmal für dumme mit etwas Code erklären, ich hab total den hänger.

Nach erfolgreichen Login wird ein Objekt mit Daten gefüllt des jeweiligen Users, diese Daten werden dann im Programm ständig benutzt.

jaenicke 11. Jul 2009 20:11

Re: Showmodal - modalresult
 
mrOk steht in der Unit Controls, wenn ich mich recht entsinne, die müsste oben in die uses.

Ach ja: Und zum Prinzip: Du setzt ModalResult z.B. von einem Ok-Button auf mrOk. Wenn der gedrückt wurde, dann prüfst du die Eingaben. Und nur wenn Ok gedrückt wurde und die Eingaben stimmen, springst du nicht mit Exit raus.
Wenn das Programm also beim Erzeugen und Anzeigen des Formulars ankommt, dann war der Login erfolgreich und du kannst in OnShow alles initalisieren etc., am besten solltest du das auch zusätzlich noch anders prüfen.

youuu 11. Jul 2009 20:50

Re: Showmodal - modalresult
 
Danke habs mit der Erklärung nun geschaft umzusetzen.


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