AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein GUI-Design mit VCL / FireMonkey / Common Controls Delphi Loginform soll geschlossen werden bevor MainForm erscheint

Loginform soll geschlossen werden bevor MainForm erscheint

Ein Thema von Mackhack · begonnen am 25. Sep 2006 · letzter Beitrag vom 26. Sep 2006
Antwort Antwort
Seite 1 von 4  1 23     Letzte » 
Benutzerbild von Mackhack
Mackhack

Registriert seit: 29. Nov 2003
Ort: San Diego, CA/USA
1.446 Beiträge
 
Delphi 2006 Architect
 
#1

Loginform soll geschlossen werden bevor MainForm erscheint

  Alt 25. Sep 2006, 10:03
Hi,

ich habe hier ne Anwendung die eine MainForm hat sowie eine Form mit Login und n paar anderen Forms. Als erstes wird die Login Form erzeugt und angezeigt. Wenn Username und Password stimmen soll die Form aber verschwinden und die MainForm angezeigt werden.

Ich habe mir ueberlegt ich kann ja die LoginForm mit .Hide verstecken und wenn ich die MainForm schliesse ist sie mit weg. ABER: Man sieht sie nochmal fuer einen Bruchteil einer Sekunde. Das moechte ich aber nicht. Mit .Close kann ich die LoginForm auch nicht schliessen da dann das ganze Programm geschlossen wird komischerweise.

Hat mir jemanden n guten Rat/Idee deshalb?

Danke
Um etwas Neues zu schaffen muss man seine Ohren vor den Nein-sagern verschliessen um seinen Geist öffnen zu können.
(George Lukas)
  Mit Zitat antworten Zitat
hsg

Registriert seit: 24. Apr 2006
Ort: Wustermark
354 Beiträge
 
Delphi 10.3 Rio
 
#2

Re: Loginform soll geschlossen werden bevor MainForm erschei

  Alt 25. Sep 2006, 10:16
Wird das Login-Fenster mit Close geschlossen und dadurch das Programm beendet, dann bedeutet das, das dein Login-Fenster das Hauptformular deines Programmes ist.
Besser ist es, die Automatische Erzeugung des Login-Fensters komplett zu verbieten und im OnCreate-Event deines Mainforms das Login-Fenster händisch zu erzeugen und im Fehlerfall die Applikation zu beenden (Application.Terminate())
  Mit Zitat antworten Zitat
TStringlist

Registriert seit: 1. Dez 2003
360 Beiträge
 
Turbo Delphi für Win32
 
#3

Re: Loginform soll geschlossen werden bevor MainForm erschei

  Alt 25. Sep 2006, 12:08
Hi, ...schon mal versucht, den ShowModal-Aufruf deiner Login-Form in der Projektdatei noch vor dem deiner Mainform zu starten?


Delphi-Quellcode:
program Project1;

uses
  Forms,
  Controls,
  Unit1 in 'Unit1.pas{Form1},
  Unit2 in 'Unit2.pas{Form2};

{$R *.res}

begin
  Application.Initialize;
  Application.CreateForm(TForm1, Form1);
  Application.CreateForm(TForm2, Form2); // deine Login-Form

  if Form2.ShowModal = mrCancel then Application.Terminate;

  Application.Run;
end.
MfG (& Thx ggf.)
  Mit Zitat antworten Zitat
Benutzerbild von igel457
igel457

Registriert seit: 31. Aug 2005
1.622 Beiträge
 
FreePascal / Lazarus
 
#4

Re: Loginform soll geschlossen werden bevor MainForm erschei

  Alt 25. Sep 2006, 14:21
Ich würde das eher so machen:

Delphi-Quellcode:
program Project1;

uses
  Forms,
  Controls,
  Unit1 in 'Unit1.pas{Form1},
  Unit2 in 'Unit2.pas';

{$R *.res}
var login:TForm2;
begin
  Application.Initialize;
  login := TForm2.Create(nil);
  if login.ShowModal = mrCancel then
  begin
    Application.Terminate;
  end
  else
  begin
    Application.CreateForm(TForm1,Form1);
    Application.Run;
  end;
end.
An dieser Stelle verweise ich dich auch mal auf den Sourcecode von meinem Spiel: http://crashpoint.cvs.sourceforge.ne...ew=markup#l_88

[Edit]Kleiner Fehler[/Edit]
[Edit2]Fehler im URL Tag[/Edit2]
[Edit3]Noch eine kleine Verbesserung[/Edit3]
Andreas
"Sollen sich auch alle schämen, die gedankenlos sich der Wunder der Wissenschaft und Technik bedienen, und nicht mehr davon geistig erfasst haben als die Kuh von der Botanik der Pflanzen, die sie mit Wohlbehagen frisst." - Albert Einstein
  Mit Zitat antworten Zitat
alzaimar
(Moderator)

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

Re: Loginform soll geschlossen werden bevor MainForm erschei

  Alt 25. Sep 2006, 14:55
Und ich würde sogar das Login-Form als Hauptformular definieren.
Klickt man auf Login, wird einfach eine Instanz des 'Mainforms' erzeugt und angezeigt. Nach Beendigung des MainForms ist man wieder im Login-Formular. Alternativ kann man die Eigenschaft 'ModalResult' des Login-Buttons auch auf mrClose setzen. Im OnClick-Ereignis des Login-Buttons wird die Hauptanwendung mit ShowModal gezeigt. Wenn der Anwender dann in der Hauptanwendung auf 'Beenden' klickt, wird zuerst das Hauptformular und dann der Login-Dialog geschlossen.

Delphi-Quellcode:
Procedure TMyLoginDialog.btLoginClick (Sender : TObject);
Begin
  With TMainForm.Create(Nil) Do Begin
    ShowModal;
    Release;
  End;
  // ModalResult := mrClose; <-- die '//' wegnehmen, wenn der Login-Dialog immer da sein soll.
End;
Das hat gegenüber den anderen beiden Lösungen den Vorteil, das man erstens nicht im Projektquelltext rumwurschteln muss und 2. keine unliebsamen Überrraschungen erlebt, wenn man im OnCreate der Hauptanwendung gleich ein Application.Terminate aufruft.
"Wenn ist das Nunstruck git und Slotermeyer? Ja! Beiherhund das Oder die Flipperwaldt gersput!"
(Monty Python "Joke Warefare")
  Mit Zitat antworten Zitat
Benutzerbild von MuTzE
MuTzE

Registriert seit: 24. Sep 2003
59 Beiträge
 
#6

Re: Loginform soll geschlossen werden bevor MainForm erschei

  Alt 25. Sep 2006, 15:35
Ich würde gar nix davon machen!


Hauptformular:

Delphi-Quellcode:
procedure TMainFrm.FormShow(Sender: TObject);
begin
  PasswordFrm.ShowModal;
end;


Passwortformular:

Delphi-Quellcode:
var
  AllowClose: Boolean;


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

procedure TPasswordFrm.ExitBtnClick(Sender: TObject);
begin
  Application.Terminate;
end;

procedure TPasswordFrm.FormCloseQuery(Sender: TObject; var CanClose: Boolean);
begin
  if AllowClose = True then
   CanClose := True
  else
   CanClose := False;
end;
  Mit Zitat antworten Zitat
alzaimar
(Moderator)

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

Re: Loginform soll geschlossen werden bevor MainForm erschei

  Alt 25. Sep 2006, 15:42
Äh...Soll ich mich jedesmal einloggen, wenn das Hauptformular mal wieder sichtbar wird?
Wenn überhaupt, dann im OnActivate. Das ist dann besser.

Also: Nachdem hier alle wild durcheinander gepostet haben, ist das hier (99% Muetze) wohl das Einfachste:

Delphi-Quellcode:
Procedure MyMainForm.OnActivate (Sender : TObject);
Begin
  If Not LoginCorrect Then Application.Terminate;
End;
Wobei 'LoginCorrect' natürlich eine Funktion ist, die True liefert, wenn der Anwender sich korrekt eingeloggt hat und False, wenn nicht.
"Wenn ist das Nunstruck git und Slotermeyer? Ja! Beiherhund das Oder die Flipperwaldt gersput!"
(Monty Python "Joke Warefare")
  Mit Zitat antworten Zitat
Benutzerbild von MuTzE
MuTzE

Registriert seit: 24. Sep 2003
59 Beiträge
 
#8

Re: Loginform soll geschlossen werden bevor MainForm erschei

  Alt 25. Sep 2006, 15:53
MuTzE bitte und nich Muetze!!!!!!!!!
  Mit Zitat antworten Zitat
moonwhaler

Registriert seit: 22. Dez 2005
57 Beiträge
 
Delphi 5 Enterprise
 
#9

Re: Loginform soll geschlossen werden bevor MainForm erschei

  Alt 25. Sep 2006, 15:53
Ich habe das in mehreren kommerziellen Applikationen wie folgt gelöst und fahre sehr gut damit:
Delphi-Quellcode:
begin
  Application.Initialize;

  if ( not Assigned( FPassword ) ) then
    FPassword := TFPassword.Create( FPassword );

  if ( not Session.Users.LoadFromFile( ApplicationPath +
                                       c_ConfigDir + 'Users.xml' ) ) then
    mBox( _( 'FEHLER!' ),
          _( 'Ein Fehler beim Lesen der Benutzerdaten ist aufgetreten. '+
             'Login NUR Superuser möglich. Abbruch!' ),
          TRUE );

  if ( FPassword.Check( mode_start, TRUE, FALSE ) = pass_ok ) then
  begin
    Application.CreateForm(TFUserManager, FUserManager);
    Application.CreateForm(TFTrackoutManager, FTrackoutManager);

    Application.Run;
  end else
  begin
    Session.Free();
    FPassword.Free();
  end;
end.
Nachtrag! Die Funktion CHECK im Formular / Unit "FPassword":
Delphi-Quellcode:
function TFPassword.Check( mode: TMode;
                           ShowCloseButton: Boolean;
                           ShowOKButtonOnly: Boolean = FALSE ): TPasswordResultType;
begin
  result := pass_failed;
  MayClose := FALSE;
  PWResult := pass_failed;

  accessmode := mode;

  if ( ShowOKButtonOnly ) then
    button_cancel.Enabled := FALSE
  else
    button_cancel.Enabled := TRUE;

  if ( showCloseButton ) then
  begin
    button_cancel.ModalResult := mrAbort;
    button_cancel.Caption := _( '&Beenden' );
  end else begin
    button_cancel.ModalResult := mrCancel;
    button_cancel.Caption := _( '&Abbrechen' );
  end;

  // If the workstation has a valid login, quit here...
  if ( Session.Active ) then
  begin
    if ( ( ( Session.CheckUserRights( mode ) ) AND
           ( Session.Users.Count > 0 ) ) OR
         ( Session.UserType = type_superuser ) ) then
    begin
      result := pass_ok;
      exit;
    end else
    begin
      if ( mBox( _( 'Zugriff verweigert!' ),
                 _( 'Sie besitzen nicht die nötigen Rechte, um auf diese ' +
                    'Resource zugreifen zu können. Wollen Sie den Vorgang ' +
                    'abbrechen?' ), FALSE ) ) then
        exit;
    end;
  end;

  self.ShowModal();

  result := PWResult;
  accessmode := mode_none;
  resetInput();

  close();
end;
  Mit Zitat antworten Zitat
Benutzerbild von MuTzE
MuTzE

Registriert seit: 24. Sep 2003
59 Beiträge
 
#10

Re: Loginform soll geschlossen werden bevor MainForm erschei

  Alt 25. Sep 2006, 15:55
Und außerdem! Wenn dann beim OnCreate und nich beim OnActivate!

* OnCreate
* OnShow
* OnPaint
* OnActivate
* OnResize
* OnPaint




_____________
EDIT:

So und wie ich grad feststellen musste geht mit meiner Methode nur OnShow!
Ich wusste schon warum das so ist. Aber wenn die von moonwhaler geht, nimm die.
  Mit Zitat antworten Zitat
Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

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 08: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