Autor Beitrag
mtm
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 64

Windows 10 Pro 64 Bit
Delphi XE 6
BeitragVerfasst: Sa 10.04.10 15:54 
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 :

ausblenden volle Höhe 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 334
Erhaltene Danke: 3



BeitragVerfasst: 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:
ausblenden 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.
ausblenden 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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 64

Windows 10 Pro 64 Bit
Delphi XE 6
BeitragVerfasst: 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.