Toon posts:

[delphi] inlogscherm laten zien en verder gaan

Pagina: 1
Acties:

Verwijderd

Topicstarter
Dag ik heb net een programmatje gemaakt, nu wil ik dat mensen eerst een inlogscherm krijgen.

als het paswoord klopt moeten ze verder gaan, het scherm krijg ik nu wel te zien maar na het succesvol inloggen start de applicatie niet.

ik gebruik dit in mijn main unit om een inlogscherm te laten zien:
begin
Application.Initialize;
Application.CreateForm(TF_inloggen, F_inloggen);
F_inloggen.Showmodal; //aanzetten voor passwoord controle
F_inloggen.show;
F_inloggen.update;
Application.CreateForm(TF_versie, F_versie);
F_inloggen.ProgressBar1.StepIt;
Application.CreateForm(TF_maakgebruikers, F_maakgebruikers);
F_inloggen.ProgressBar1.StepIt;
Application.CreateForm(TF_maakurencodes, F_maakurencodes);
F_inloggen.ProgressBar1.StepIt;
Application.CreateForm(TF_Instellingen, F_Instellingen);
F_inloggen.ProgressBar1.StepIt;
Application.CreateForm(TF_maakklanten, F_maakklanten);
F_inloggen.ProgressBar1.StepIt;
Application.CreateForm(TF_main, F_main);
F_inloggen.ProgressBar1.StepIt;
F_inloggen.Free;
Application.Run;
end.

is hier iets mis mee????

  • Delphi32
  • Registratie: Juli 2001
  • Laatst online: 20:17

Delphi32

Heading for the gates of Eden

Het form dat als eerste na je Application.Initialize wordt aangemaakt, beschouwt Delphi als het main form van de applicatie. Dit Main Form wordt getoond. En dan kun je in de .dpr nog zoveel andere forms creëren, die worden dus niet zomaar getoond (standaard Visible := false).
Je hebt verschillende opties om dit op te lossen, afhankelijk van de functionaliteit die je aan je F_Inloggen hebt gehangen. Wat dacht je van deze:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
program MijnZooi.dpr;

uses blabla;

var MyLoginForm: TF_Inloggen;
begin
  Application.Initialize;
  MyLoginForm := TF_Inloggen.Create(nil);
  try
    if MyLoginForm.ShowModal = mrOk then begin 
    //dit betekent dat we door de password controle zijn
    //dus maken we nu het main form
    Application.CreateForm(TF_Main, F_Main);
    //eventueel andere forms
    end;
  finally
    MyLoginForm.Free;
  end;
  Application.Run;
end.

Untested btw :)

Verwijderd

Topicstarter
jeah, nu kom ik er wel uit. dankje

  • Cheater
  • Registratie: Januari 2001
  • Laatst online: 00:51
Ik zou hier even op terug willen komen.
Ik heb de volgende code, en weet niet precies hoe ik deze aan moet passen. De bovenstaande code lijkt me juist, maar ik weet niet of de check werkt, dat hij kijkt of ik ingelogd ben. (het inloggen gelukt is).

Dit is m'n huidige code:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
begin
  Application.Initialize;
  Application.CreateForm(TForm2, Form2);
  Form2 := TForm2.Create(Application);
  Form2.Show;
  Form2.Update;
  Form2.ProgressBar1.Position := 0;
  Form2.ProgressBar1.StepBy(25);
  Sleep(500);
  Form2.ProgressBar1.StepBy(25);
  Sleep(100);
  Application.CreateForm(TForm1, Form1);
  Form2.ProgressBar1.StepBy(25);
  Sleep(800);
  Form2.ProgressBar1.StepBy(25);
  Sleep(200);
  Application.run;
end.

Zoals je ziet zit er een ProgressBar1 tussen te knoeien. Lekker laten staan natuurlijk, want die wil ik zo. Maar de check om te kijken of je ingelogd bent, loopt hier dan wel tussendoor.
Iemand een ideetje?

Verwijderd

Cheater, je maakt 2x een instantie van TForm2 en stopt die in dezelfde variabele; lijkt me niet de bedoeling :)

Kun je niet het Delphi vb bij CreateForm gebruiken? Dus bv ook een try..finally, gebruik van with etc.

[edit] ik zou btw zoiets gebruiken:
code:
1
2
3
  Application.Initialize;
  if TLogInDlg.Execute then
    Application.Run;

en dan TLogInDlg:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
  TLogInDlg = class(TForm)
  public
    class function Execute: Boolean;
    
    // property die aangeeft of de login geslaagd is: 
    property LoggedIn: Boolean read GetLoggedIn;
  end;

..

class function TLogInDlg.Execute: Boolean;
begin
  with TLogInDlg.Create(Application) do
  try 
    Result := (ShowModal = mrOk) and LoggedIn; 
  finally
    Free;
  end;
end;

  • whoami
  • Registratie: December 2000
  • Laatst online: 21:51
That's the way I do it... ongeveer dan toch.
Ik toon m'n login-scherm in de OnCreate of OnActivate event. (In dat laatste geval moet je er wel voor zorgen dat het maar 1x getoont wordt).

https://fgheysels.github.io/


  • Delphi32
  • Registratie: Juli 2001
  • Laatst online: 20:17

Delphi32

Heading for the gates of Eden

Op donderdag 28 februari 2002 21:01 schreef DiFool het volgende:
code:
1
2
3
  Application.Initialize;
  if TLogInDlg.Execute then
    Application.Run;

en dan TLogInDlg:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
  TLogInDlg = class(TForm)
  public
    class function Execute: Boolean;
    
    // property die aangeeft of de login geslaagd is: 
    property LoggedIn: Boolean read GetLoggedIn;
  end;

..

class function TLogInDlg.Execute: Boolean;
begin
  with TLogInDlg.Create(Application) do
  try 
    Result := (ShowModal = mrOk) and LoggedIn; 
  finally
    Free;
  end;
end;
[mierenneukmodus]
Ik vind je oplossing goed, gebruik ik zelf ook meestal. Alleen vind ik de naamgeving (class function Execute) niet beschrijven wat hij doet. Execute wordt standaard gebruikt voor dialogs met Ok-Cancel functionaliteit, waarbij het result van Execute true is als men op Ok heeft geklikt; hier gaat het om het succesvol inloggen en niet om de Ok/Cancel knop. Voorstel:
code:
1
class function TLoginDialog.CanUserLogin: boolean;

Deze function handelt dan af het tonen van het form en het evalueren van de login-actie. De grap is dat het tonen van het form in dat geval facultatief is; als je je login met behulp van een soort 'cookie' zou hebben opgeslagen kan het TLoginDialog dat gewoon controleren.
Goed, dat is natuurlijk maar een naamgevingskwestie, ik zal je er niet om afschieten (doe ik sowieso bij weinig mensen :))
[/mierenneukmodus]

Verwijderd

Delphi32:
Alleen vind ik de naamgeving (class function Execute) niet beschrijven wat hij doet. Execute wordt standaard gebruikt voor dialogs met Ok-Cancel functionaliteit, waarbij het result van Execute true is als men op Ok heeft geklikt; hier gaat het om het succesvol inloggen en niet om de Ok/Cancel knop.
Ja, klopt wel denk ik; maar ik bekijk het zo: Execute betekent, laat dialog zien, executeer de code die er bij hoort en als alles goed gaat is Result True anders False.

In dit geval betekent -als alles goed gaat- dat de gebruiker ingelogd is.

Ik gebruik altijd Execute en geen - per dialog verschillende namen; dat heeft ook wel voordelen denk ik. [Keuze zou dan misschien nog zijn om een andere naam te pakken, zodat andere lezers het ook nog begrijpen]
Voorstel:
code:
1
class function TLoginDialog.CanUserLogin: boolean;

Deze function handelt dan af het tonen van het form en het evalueren van de login-actie. De grap is dat het tonen van het form in dat geval facultatief is; als je je login met behulp van een soort 'cookie' zou hebben opgeslagen kan het TLoginDialog dat gewoon controleren.
Ipv CanUserLogin zou ik dan kiezen voor IsUserLoggedIn; en als je het facultief wilt aanpakken dan zou ik voor een TLogin object kiezen, die dan weer eventueel een TLoginDialog kan aanroepen [met Execute natuurlijk :)]
Pagina: 1