Autor Beitrag
jaenicke
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19315
Erhaltene Danke: 1747

W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: Sa 13.08.11 21:53 
Na, zuerst zeigst du das zweite Formular an und wenn der Benutzer mit Ok bestätigt hat (die Abfrage hast du ja schon), dann holst du dir darüber das Ergebnis. Dann kannst du mit dem UserLevel weiterarbeiten.
chickenfigt1989 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 444
Erhaltene Danke: 2



BeitragVerfasst: Sa 13.08.11 22:13 
Ok dann mal anders.
Mein erster Code wirft mir ja nen Fehler aus weil es zu den Zeitpunkt noch keine Form 1 gibt.
Früher hab ich es irgendwie geschafft das Form2 vor Form 1 angezeigt wird ohne diesen code
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
Application.Initialize;
  Application.CreateForm(TForm2, Form2);
IF Form2.ShowModal=mrOK Then Begin
Form2.Free;
Application.CreateForm(TForm1, Form1);
  Application.Run;


Weil früher funktionierte es ja auch
chickenfigt1989 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 444
Erhaltene Danke: 2



BeitragVerfasst: So 14.08.11 03:05 
Hab es nun so:
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
program Project1;

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


{$R *.res}

begin
  Application.Initialize;
  Application.CreateForm(TForm2, Form2);
IF Form2.ShowModal=mrOK Then Begin
Form2.Free;
Application.CreateForm(Form2.FUserLevel);
  Application.Run;

end;


Es kommt:
[Error] Unit2.pas(81): Record, object or class type required

Bin am verzweiflen :(
jaenicke
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19315
Erhaltene Danke: 1747

W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: So 14.08.11 09:29 
Leg dir in deinem anderen Formular genauso eine Property an. Der verpasst du noch einen Setter, in dem du dann den Button entsprechend behandelst.
chickenfigt1989 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 444
Erhaltene Danke: 2



BeitragVerfasst: So 14.08.11 09:46 
Wenn ich nun noch wüsste was ein setter ist bzw. wie man den anlegt :(
Xion
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
EE-Maler
Beiträge: 1952
Erhaltene Danke: 128

Windows XP
Delphi (2005, SmartInspect), SQL, Lua, Java (Eclipse), C++ (Visual Studio 2010, Qt Creator), Python (Blender), Prolog (SWIProlog), Haskell (ghci)
BeitragVerfasst: So 14.08.11 10:55 
Eine Setter dient zum Setzen.

Da Delphi in der Hinsicht sehr komfortabel ist, wird das durch das property schon realisiert.

ausblenden Delphi-Quelltext
1:
2:
3:
4:
 private
       FUserLevel: TUserLevel;
  public
     property UserLevel: TUserLevel read FUserLevel write FUserLevel;


Das hinter read ist der Getter und das hinter write ist der Setter. Super ist, dass hier Delphi schon alles macht. Wenn man jetzt tatsächlich mal einen Setter selber schreiben muss geht das so:

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
 private
       FUserLevel: TUserLevel;
       procedure SetUserLevel(v: TUserLevel);
  public
     property UserLevel: TUserLevel read FUserLevel write SetUserLevel;

[...]

procedure TWhatever.SetUserLevel(v: TUserLevel);
begin
  if v<>nil then
  FUserLevel:=v; //ACHTUNG: Hier nicht UserLevel:=v; zuweisen, sonst hat man ne Endlosschleife
end;


So könnte man z.B. gucken, ob das Objekt v vom Typ TUserLevel ungleich nil ist, und nur dann zuweisen. Als Beispiel.

_________________
a broken heart is like a broken window - it'll never heal
In einem gut regierten Land ist Armut eine Schande, in einem schlecht regierten Reichtum. (Konfuzius)
chickenfigt1989 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 444
Erhaltene Danke: 2



BeitragVerfasst: So 14.08.11 14:46 
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:
61:
62:
63:
64:
65:
66:
67:
68:
69:
70:
71:
72:
73:
74:
75:
76:
77:
78:
79:
80:
81:
82:
83:
84:
85:
86:
87:
88:
89:
90:
91:
92:
93:
94:
95:
96:
97:
98:
99:
100:
101:
102:
103:
104:
105:
106:
107:
108:
109:
110:
111:
112:
113:
114:
115:
116:
117:
118:
119:
120:
121:
122:
123:
124:
unit Unit2;

interface

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

type

  TForm2 = class(TForm)
    Label1: TLabel;
    edtUsername: TEdit;
    Label2: TLabel;
    edtPassword: TEdit;
    Button1: TButton;
    Button2: TButton;
    AccountSystemClient1: TAccountSystemClient;
    chkAutoLogin: TCheckBox;
    procedure Button2Click(Sender: TObject);
    procedure Button1Click(Sender: TObject);
    procedure SaveLoginData;
    procedure LoadLoginData;
    procedure AccountSystemClient1LoggedIn(
      AUserLevel: TAccountSystemUserLevel; AExpired: Boolean);
    procedure FormCreate(Sender: TObject);
  private
    { Private declarations }
       FUserLevel: TAccountSystemUserLevel;
  public
    { Public declarations }
    property AccountSystemUserLevel: TAccountSystemUserLevel read FUserLevel write FUserLevel;
  end;

var
  Form2: TForm2;

implementation

uses Unit1;

{$R *.dfm}

procedure TForm2.FormCreate(Sender: TObject);
begin
LoadLoginData;
end;

procedure TForm2.Button2Click(Sender: TObject);
begin
Application.Terminate;
end;

procedure TForm2.Button1Click(Sender: TObject);
begin
if AccountSystemClient1.Login(edtUsername.Text, edtPassword.Text) then
  begin
    ModalResult := mrOK;
    
      end
  else
    ShowMessage('Falsche Benutzerdaten!');
end;

procedure TForm2.AccountSystemClient1LoggedIn(
  AUserLevel: TAccountSystemUserLevel; AExpired: Boolean);
begin
Form1.Caption := 'Farm-House Manager Herzlich Willkommen ' + Form2.AccountSystemClient1.UserName;
if AExpired then
  begin
    ShowMessage('Dein Benutzerkonto ist abgelaufen!');
    Application.Terminate;
  end
  else if AUserLevel = aulDisabled then
  begin
    ShowMessage('Dein Benutzerkonto wurde deaktiviert!');
    Application.Terminate;
  end;
  SaveLoginData;

  FUserLevel.Button1.Enabled:=(FUserLevel = aulAdmin) or (FUserLevel = aulAdmin);


end;

procedure TForm2.SaveLoginData;
var
  Reg: TRegistry;
begin
  Reg := TRegistry.Create;
  try
    Reg.RootKey := HKEY_CURRENT_USER;
    if Reg.OpenKey('Software\' + Application.Title + ' ' + ExtractFileName(Application.ExeName), True) then
    begin
      Reg.WriteString('UserName', edtUsername.Text);
      Reg.WriteString('Password', edtPassword.Text);
      Reg.WriteBool('AutoLogin', chkAutoLogin.Checked);
      Reg.CloseKey;
    end;
  finally
    Reg.Free;
  end;
end;

procedure TForm2.LoadLoginData;
var
  Reg: TRegistry;
begin
  Reg := TRegistry.Create;
  try
    Reg.RootKey := HKEY_CURRENT_USER;
    if Reg.OpenKey('Software\' + Application.Title + ' ' + ExtractFileName(Application.ExeName), False) then
    begin
      edtUsername.Text := Reg.ReadString('UserName');
      edtPassword.Text := Reg.ReadString('Password');
      chkAutoLogin.Checked := Reg.ReadBool('AutoLogin');
      Reg.CloseKey;
    end;
  finally
    Reg.Free;
  end;
end;

end.


Er sagt mir aber immer noch
[Error] Unit2.pas(81): Record, object or class type required
jaenicke
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19315
Erhaltene Danke: 1747

W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: So 14.08.11 16:06 
user profile iconchickenfigt1989 hat folgendes geschrieben Zum zitierten Posting springen:
ausblenden Delphi-Quelltext
1:
  FUserLevel.Button1.Enabled:=(FUserLevel = aulAdmin) or (FUserLevel = aulAdmin);					
Was möchtest du denn mit dieser Zeile bezwecken?
Den Button, der irgendwo im UserLevel versteckt sein könnte, ansprechen? :shock:
chickenfigt1989 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 444
Erhaltene Danke: 2



BeitragVerfasst: So 14.08.11 16:42 
Ich will das nur Leute die als admin eingeloggt sind, diesen Button sehen.
lg