Autor |
Beitrag |
jaenicke
      
Beiträge: 19315
Erhaltene Danke: 1747
W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
|
Verfasst: 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 
      
Beiträge: 444
Erhaltene Danke: 2
|
Verfasst: 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 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 
      
Beiträge: 444
Erhaltene Danke: 2
|
Verfasst: So 14.08.11 03:05
Hab es nun so:
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' , Unit1 in 'Unit1.pas' ;
{$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
      
Beiträge: 19315
Erhaltene Danke: 1747
W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
|
Verfasst: 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 
      
Beiträge: 444
Erhaltene Danke: 2
|
Verfasst: So 14.08.11 09:46
Wenn ich nun noch wüsste was ein setter ist bzw. wie man den anlegt 
|
|
Xion
      

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)
|
Verfasst: 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.
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:
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; 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 
      
Beiträge: 444
Erhaltene Danke: 2
|
Verfasst: So 14.08.11 14:46
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 FUserLevel: TAccountSystemUserLevel; public 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
      
Beiträge: 19315
Erhaltene Danke: 1747
W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
|
Verfasst: So 14.08.11 16:06
|
|
chickenfigt1989 
      
Beiträge: 444
Erhaltene Danke: 2
|
Verfasst: So 14.08.11 16:42
Ich will das nur Leute die als admin eingeloggt sind, diesen Button sehen.
lg
|
|
|