Delphi-PRAXiS
Seite 2 von 4     12 34      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   Delphi Loginform soll geschlossen werden bevor MainForm erscheint (https://www.delphipraxis.net/77802-loginform-soll-geschlossen-werden-bevor-mainform-erscheint.html)

alzaimar 25. Sep 2006 14:58

Re: Loginform soll geschlossen werden bevor MainForm erschei
 
Zitat:

Zitat von MuTzE
:shock: MuTzE bitte und nich Muetze!!!!!!!!! :evil:

:wall: :oops:

alzaimar 25. Sep 2006 15:04

Re: Loginform soll geschlossen werden bevor MainForm erschei
 
@moonwhaler: MuTzE :mrgreen: ) seine Version ist aber doch ein klein wenig kürzer. Und auch gilt, das ich den Projektquelltext nicht so gerne anfasse. Da kommt dann Delphi ab und an doch durcheinander.

Die Version im OnCreate ist latürnich noch eleganter. Sagen wir:
MuTzE's Version mit meiner Anmerkung und MuTzE's abschließenden Kommentar ist optimal*, ergo:

Delphi-Quellcode:
Procedure TMyMainForm.OnCreate (Sender : TObject);
Begin
  If Not LoginCorrect then Application.Terminate;
End;
* jedenfalls meine Meinung.

MuTzE 25. Sep 2006 15:11

Re: Loginform soll geschlossen werden bevor MainForm erschei
 
Also ich hab ja hier schon nen Programm, aber da haut das nich hin, wenn ich das Passwortformular zeige im OnCreate! Es geht bei mir nur im OnShow Modus, wobei, das wie du schon sagtest immer kommt, wenn das Formular eingeblendet wird.

Man könnte aber noch eine 2. Varible einbinden, anhand der überprüft wird, ob das Passwort bereits richtig eingegeben wurde.


Hauptformular:

Delphi-Quellcode:
public
  Passed: Booloean;
end;

procedure TMainFrm.FormShow(Sender: TObject);
begin
  if not Passed then
   PasswordFrm.ShowModal;
end;

Passwortformluar:

Delphi-Quellcode:
procedure TPasswordFrm.AcceptBtnClick(Sender: TObject);
begin
  if PasswordEdit.Text = 'Passwort' then
   begin
    Accepted := True;
    MainFrm.Passed := True;
    Close;
   end
  else
   begin
    ShowMessage('Das Passwort ist ungültig!');
    PasswordEdit.Clear;
  end;
end;

alzaimar 25. Sep 2006 15:24

Re: Loginform soll geschlossen werden bevor MainForm erschei
 
Ich kenn das Problem. Weil ich Dir erstmal gar nicht geglaubt habe, hab ich also einen Drei-Zeiler geschrieben, mit der Passwortabfrage im OnCreate. Dann darf aber kein anderes Formular automatisch instantiiert werden.

Dr Projekt-Quelltext sieht also so aus:

Delphi-Quellcode:
Begin
  Application.Initialize;
  Application.CreateForm(TMyMainForm, MyMainForm);
  Application.Run
End.
Und die MyMainForm wie oben beschrieben. Dann kann ich mich einloggen (oder nicht).
Delphi-Quellcode:
Procedure TMyMainForm.FormCreate (Sender : TObject);
Begin
  If InputBox('Login','Benutzername','') <> 'MuTzE' Then
    Application.Terminate
  Else Begin
    // Initialize application's datamodules, forms etc.
  End;
End;
wichtig ist, das das 'Application.Terminate' ja nicht sofort aufhört, sondern nur eine WM_QUIT Message in die Messagequeue schiebt. Das Application.Run fängt dann an, die Messages zu verarbeiten. Mehr oder minder früh wird dann das WM_QUIT entdeckt. Deshalb ist es imho wichtig, wirklich nur die eine Form im Hauptprogramm der Anwendung zu instantiieren.

Mackhack 25. Sep 2006 16:11

Re: Loginform soll geschlossen werden bevor MainForm erschei
 
Hi,

vielen Dank euch allen hier. Werd mich da mal durchwurschteln heute abend!

TStringlist 25. Sep 2006 18:54

Re: Loginform soll geschlossen werden bevor MainForm erschei
 
Zitat:

Zitat von alzaimar
wichtig ist, das das 'Application.Terminate' ja nicht sofort aufhört, sondern nur eine WM_QUIT Message in die Messagequeue schiebt. Das Application.Run fängt dann an, die Messages zu verarbeiten. Mehr oder minder früh wird dann das WM_QUIT entdeckt.

..und weil das ungefähr so ist, geht es im FormCreate-Eventhandler der MainForm auch nicht, da nämlich die MainForm zu diesem Zeitpunkt schlicht schon instantiiert ist! ...Und weshalb also bei genauem Hinsehen dieses MainWindow beim Programm-Abbruch doch noch einmal minmalst aufflackert. Und das will Mackhack ja gerade nicht.

So wie es aussieht, scheint nur die Methode von igel457 und moonwahler diesbezüglich was zu taugen (allerdings fehlte irgendwie im positiven Login-Fall jeweils noch ein Free, oder?). Nur durch ein erstes Aufrufen von Application.CreateForm scheint die MainForm definiert zu werden, so dass mittels 'nur' TForm.Create-Anweisungen ohne Schwierigkeiten davor andere Formen erzeugt und genutzt werden können.

..und warum nicht im Projekt-File herumschreiben. Das ist imo Raum für Quellcode wie jeder andere!

MuTzE 25. Sep 2006 19:10

Re: Loginform soll geschlossen werden bevor MainForm erschei
 
:roll:

TStringlist 25. Sep 2006 20:13

Re: Loginform soll geschlossen werden bevor MainForm erschei
 
Zitat:

Zitat von MuTzE
:roll:

Ja bitte? Ich habe deinen Code nochmal kurz ausgetestet und bei diesem flackert es eben auch. Also genau wie es NICHT gewünscht war. Mach deine MainForm mal schön knallrot, dann kannst du es nicht übersehen.

edit: gut gut, ich meinte jetzt natürlich das MainForm-Flackern, welches ebenfalls für einen Bruchteil einer Sekunde in dem Falle zu sehen ist, in dem man den Login abbricht. Dann nämlich taucht das MainWindow nochmal ganz kurz auf, weil es ja eben schon createt ist. Und ich nehme doch mal sehr schwer an, dieses Flackern mag Mackhack mindestens genausowenig.... :mrgreen: :mrgreen: :mrgreen: :mrgreen: :mrgreen:

Mackhack 25. Sep 2006 21:02

Re: Loginform soll geschlossen werden bevor MainForm erschei
 
Genau,

ich will kein Flackern des Login-Fensters. Also muss ich als MainForm das Login-Fenster in den Projekt-Optionen einstellen sehe ich das richtig?

MuTzE 25. Sep 2006 21:07

Re: Loginform soll geschlossen werden bevor MainForm erschei
 
Bei mir flackert nicht das Loginfenster, sondern das Hauptformular, wenn man das Programm schon beim Loginfenster beendet.

Du müsstest dich mal entscheiden, ob du willst das es nicht flackert oder ob du etwas im projectcode veränderst, das du ja nicht gerne machst, wie du meintest. Ich denke mehr Optionen gibt es nicht, es sei denn jemand finde eine.

____________
EDIT:

Ähhhhhh, der letzte Absatz kommt einfach weg, da hab ich mich wohl verlesen :mrgreen:


Alle Zeitangaben in WEZ +1. Es ist jetzt 08:07 Uhr.
Seite 2 von 4     12 34      

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