Entwickler-Ecke

Delphi Language (Object-Pascal) / CLX - Problem mit eigenem Login-Dialog


mtm - Sa 10.04.10 15:54
Titel: Problem mit eigenem Login-Dialog
Hallo zusammen,

ich hätte da mal ein Problem. Ich versuche gerade einen eigenen Login-Dialog zu proggen. Dazu soll die Funktion login aufgerufen werden. Ich benutze die variable 'result' um zu speichern, ob der Dialog abgebrochen wurde oder mit OK bestätigt wurde. Leider ist nach dem entsprechenden Click in der funktion Login der Wert von result immer false.
Vielleicht habe ich da einen Denkfehler, hier ist schon mal der Code :


Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
42:
43:
44:
45:
46:
47:
48:
49:
50:
51:
52:
53:
54:
55:
56:
57:
58:
59:
60:
unit frmsLogin;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls;

type
  TfrmLogin = class(TForm)
    GroupBox1: TGroupBox;
    lblDB: TLabel;
    Label1: TLabel;
    txtUser: TEdit;
    txtPW: TEdit;
    Label2: TLabel;
    btnOK: TButton;
    btnCancel: TButton;
    procedure Button1Click(Sender: TObject);
    procedure btnOKClick(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
    function Login(db:String;var user,pw:String):Boolean;
  end;

var
  frmLogin: TfrmLogin;
  result : Boolean;

implementation

{$R *.dfm}

function TfrmLogin.Login(db:String;var user,pw:String):Boolean;
var
  fn : String;
begin
  fn := ExtractFileName(db);
  lblDB.Caption := fn;
  txtUser.Text := user;
  txtPW.Text := pw;
  self.ShowModal;
  Login := result;
end;

procedure TfrmLogin.btnCancelClick(Sender: TObject);
begin
  result := false;
  self.Close;
end;

procedure TfrmLogin.btnOKClick(Sender: TObject);
begin
  result := true;
  self.Close;
end;

end.


Ich hoffe, mir kann da einer von Euch helfen.

vielen Dank im Voraus
mtm


SvenAbeln - Sa 10.04.10 17:07

Dein Problem ist die Variable Result, denn die ist in Delphi dazu da um das Ergebnis einer Funktion zurückzugeben.

In diesem Beispiel machen beide Zeilen genau das selbe und setzen das Ergebnis der Funktion:

Delphi-Quelltext
1:
2:
3:
4:
5:
function machwas():Boolean;
begin
  machwas := true; 
  result := true;
end;

In deiner Funktion Login wird nun auch das lokale Result benutzt und nicht deine globale Variable.

Delphi-Quelltext
1:
  Login := result;  // Dem Ergebnis der Funktion wird das Ergebnis zugewiesen                    

Wenn du deine Variable umbenennst sollte es Funktionieren.
Außerdem sollte man für so etwas keine globalen Variablen benutzen, sondern Eigenschaften des Formulars.


mtm - Sa 10.04.10 17:35

VielenDank für Deine Antwort. Habe aber mittlerweile selber eine Lösung gefunden.
Da der Login-Dialog Modal geöffnet wird, kann ich mit dem Rückgabewert von ShowModal arbeiten.