Entwickler-Ecke
Grafische Benutzeroberflächen (VCL & FireMonkey) - Account Komponente
chickenfigt1989 - Fr 25.03.11 22:37
Titel: Account Komponente
Hallo
Besitze eine Account KOmponente.
Die Loginform ist meine MAin Form und folgendes wird ausgeführt bei klick auf Loginn:
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7:
| if AccountSystemClient1.Login(edtUsername.Text, edtPassword.Text) then begin ModalResult := mrOK; Close; end else ShowMessage('Falsche Benutzerdaten!'); |
Allerdings wird wenn die benutzerdaten stimmen nicht Form1 aufgerufen sondern das programm wird geschloßen.
wo liegt der Fehler bei mir?
lg
elundril - Fr 25.03.11 22:45
vermutung: Weil das ding wo deine Komponente draufliegt das hauptformular ist. wenn du im hauptformular close; aufrufst dann wird das programm geschlossen, nicht nur das fenster. Hat man dir aber glaub ich schon ein paar mal gesagt, demnach: hawara. lern. die. grundlagen.
lg elundril
chickenfigt1989 - Fr 25.03.11 23:05
Nein die Komponente liegt auf Form5
Das kann ich schon mal ausschließen
lg
elundril - Fr 25.03.11 23:13
darf ich fragen was das mit dem hauptformular zu tun hat, wie jetzt dein formular heißt? ich kann 500 Formular erzeugen und je nach lust und laune irgendeins davon zum hauptformular machen. Ich kann Form5 oder Form500 zum Hauptformular machen, je nach dem wie lustig und besoffen ich bin. Alles nur 1 Klick in den Projektoptionen...
lg elundril
jaenicke - Fr 25.03.11 23:16
chickenfigt1989 hat folgendes geschrieben : |
| Nein die Komponente liegt auf Form5 |
chickenfigt1989 hat folgendes geschrieben : |
| Die Loginform ist meine MAin Form und folgendes wird ausgeführt bei klick auf Loginn: |
Was denn nun? :roll:
Zuerst hast du geschrieben, dass das Loginfenster dein Hauptformular ist, was natürlich ein Fehler wäre. Und jetzt plötzlich doch nicht?
chickenfigt1989 - Fr 25.03.11 23:19
Sorry hab nochmal nachgeschaut.
Hab Form5 zum hauptformular gemacht damit die als erstes kommt.
Wie ruf ich den Form5 als erstes auf ohne das dass das hauptformular ist?
lg
ALF - Fr 25.03.11 23:22
Ich frage mich wie Du in Deinem anderen Prog mit 300 Formen die anderen aufgerufen hast?
ALf
chickenfigt1989 - Fr 25.03.11 23:25
Das andere Programm existiert nicht mehr.
Hab se schon über Form2.show und so aufgerufen
Aber ich will das das login formular nicht das hauptformular ist aber trotzdem beim start als erstes kommt.
lg
ALF - Fr 25.03.11 23:31
Wie währe es zur Abwechslung mal die Forensuche um Hilfe zu bitten für so simple Dinge.
Alf
chickenfigt1989 - Fr 25.03.11 23:32
Und unter welchen wort soll ich suchen?
hab bei 2stunden suchen vorhin nichts gefunden
lg
jaenicke - Fr 25.03.11 23:43
Nach SplashScreen zum Beispiel, das Prinzip ist das gleiche. Kurzfassung: Du musst das Formular einfach im Projektquelltext erzeugen, aufrufen und wieder freigeben.
ALF - Fr 25.03.11 23:44
Das ist jetzt nicht Dein ernst: 'Form2 Form1' einzugeben und Du findest x Beispiele mit Deinem Problem und Lösungen!
Ist das Faulheit bei Dir?
ALF
chickenfigt1989 - Sa 26.03.11 21:01
Ich bekomms einfach nicht hin
Habe in Sourcecode folgendes Probiert:
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8:
| Application.CreateForm(TForm5, Form5); IF Form5.Showmodal:=mrOK Then Begin Form2.Free; Application.CreateForm(TForm1, Form1); Application.CreateForm(TForm2, Form2); Application.CreateForm(TForm3, Form3); Application.CreateForm(TForm4, Form4); Application.Run; |
Da kommt immer
[Error] Project1.dpr(17): Type of expression must be BOOLEAN
[Error] Project1.dpr(24): Record, object or class type required
[Error] Project1.dpr(26): 'END' expected but end of file found
Hab auch unter Uses Controls eingefügt.
Wo liegt der fehler?
lg
jaenicke - Sa 26.03.11 21:19
Die allerersten Grundlagen... :roll:
chickenfigt1989 hat folgendes geschrieben : |
Delphi-Quelltext 1: 2:
| Application.CreateForm(TForm5, Form5); IF Form5.Showmodal:=mrOK Then Begin | |
Davon abgesehen ist deine Logik bestechend:
chickenfigt1989 hat folgendes geschrieben : |
Delphi-Quelltext 1: 2: 3: 4: 5:
| Application.CreateForm(TForm5, Form5); IF Form5.Showmodal:=mrOK Then Begin Form2.Free; Application.CreateForm(TForm1, Form1); Application.CreateForm(TForm2, Form2); | |
Also mal auf deutsch:
Erstelle Form5 (und setze es als Hauptformular, da du es mit Application.CreateForm erstellst), dann zeige es an und wenn mit Ok bestätigt wurde gib Form2 frei. Öh... Form2? Wie jetzt, das gibt es doch noch gar nicht?
Na gut, weiter: Erstelle Form1, Form2... Moment, sollte das nicht gerade erst freigegeben werden?
...
:autsch:
chickenfigt1989 - So 27.03.11 18:08
Hallo
Habs jetzt so:
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8:
| Application.CreateForm(TForm1, Form1); Application.CreateForm(TForm5, Form5); IF Form5.Showmodal:=mrOK Then Begin Form1.Free; Application.CreateForm(TForm2, Form2); Application.CreateForm(TForm3, Form3); Application.CreateForm(TForm4, Form4); Application.Run; |
Allerdings kommt immer:
[Error] Project1.dpr(1 8): Type of expression must be BOOLEAN
[Error] Project1.dpr(24): Record, object or class type required
[Error] Project1.dpr(26): 'END' expected but end of file found
Ich weis echt nimmer Weiter.
Die suche hat mir auch nicht geholfen.
Lg
elundril - So 27.03.11 18:27
GRUNDLAGEN
Delphi-Quelltext
1: 2:
| IF Form5.Showmodal:=mrOK Then Begin Form1.Free; |
gut, folgenden lösungsvorschlag:
erstmal: Fenster aufmachen, frischluft hilft immer beim denken.
dann: Du startest den Computer, rufst Delphi auf, prägst dir das bild ganz genau ein wie es aussieht. Dann fährst du den Computer wieder runter und schmeißt das ding so weit es geht aus dem Fenster hinaus, machst das Fenster wieder zu und kaufst dir erst wieder nen PC wenn du gelernt hast das manche menschen einfach die finger von dingen lassen sollten, wenn sie zu faul/unmotiviert/ oder sonstwas sind um mal sich auf ihren hintern zu setzen und zu lernen. Und wenn das mal der fall sein sollte, dann kauf dir wieder nen PC aber bitte, bitte, installier nie wieder Delphi.
lg elundril
chickenfigt1989 - So 27.03.11 18:31
meinte nicht Form1.free; sondern Form5.free;
aber kommen imemr ncoh die gleichen fehlermeldungen
lg
jaenicke - So 27.03.11 18:33
elundril hat folgendes geschrieben : |
| wenn sie zu faul/unmotiviert/ |
Und dazu kommt noch eine gehörige Portion Dummheit, anders kann ich mir das echt nicht erklären,
schließlich hatte ich den Fehler ja schon genau markiert, und trotzdem wurde genau die Stelle gleich gelassen. Vielleicht als Info: Der IQ des Nutzers sollte höher als die Compilerversion von Delphi sein, das sollte mal in die Systemvoraussetzungen rein... :roll:
Um die sinnlose Diskussion zu beenden:
Ein Vergleich passiert mit einem Gleichheitszeichen, mehr nicht.
chickenfigt1989 - So 27.03.11 18:38
Auch wenn ich es so mache:
Delphi-Quelltext
1:
| IF Form5.Showmodal=mrOK Then Begin |
Kommt:
[Error] Project1.dpr(18): Undeclared identifier: 'mrOK'
[Error] Project1.dpr(24): Record, object or class type required
[Error] Project1.dpr(26): 'END' expected but end of file found
lg
elundril - So 27.03.11 18:44
weil die Units bei den uses fehlen in dem mrOK definiert ist. Ins blaue reingeraten wohl die unit Dialogs.
lg elundril
jaenicke - So 27.03.11 18:44
Ja, dann überleg einmal woran das liegen kann... da fehlt eine Unit in der uses Klausel.
chickenfigt1989 - So 27.03.11 18:46
Daran kann es nicht liegen weil bei Form1 und Form5 ist die Unit Dialogs in den Uses drin.
Bei Form 5 wenn man auf Login klickt passiert das:
Delphi-Quelltext
1: 2: 3:
| if AccountSystemClient1.Login(edtUsername.Text, edtPassword.Text) then begin ModalResult := mrOK; |
Und da geht auch das mrOk
lg
jaenicke - So 27.03.11 18:51
Dann brauchst du ja dort nur schauen welche Unit es ist, woher die Konstante kommt...
chickenfigt1989 - So 27.03.11 18:53
Habe jetzt die Gleichen Units eingebunden wie bei Form1, da wo das mrOk geht aber leider ohne Erfolg.
lg
jaenicke - So 27.03.11 18:57
Dann hast du wohl die Unit Controls vergessen. Außerdem kannst du auch ID_OK aus der Unit Windows direkt nutzen.
chickenfigt1989 - So 27.03.11 18:58
Wenn ich ID_OK benutze kommt
[Error] Project1.dpr(18): Undeclared identifier: 'ID_OK'
Hab folgende Units eingebunden:
Delphi-Quelltext
1: 2: 3: 4: 5:
| Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, XPMan, ExtCtrls, jpeg, mmsystem, ComCtrls, sSkinManager, sButton, IdBaseComponent, IdComponent, IdTCPConnection, IdTCPClient, IdHTTP, IdAuthentication, Menus, URLMon, shellapi, JvGIF, JvComponentBase, JvTrayIcon, AccountSystem, Registry, sCheckBox; |
,lg
jaenicke - So 27.03.11 19:05
Dann poste doch einmal den gesamten Quelltext in der Datei...
chickenfigt1989 - So 27.03.11 19:07
Quelltext Form5:
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: 125: 126: 127:
| unit Unit5;
interface
uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, XPMan, ExtCtrls, jpeg, mmsystem, ComCtrls, sSkinManager, sButton, IdBaseComponent, IdComponent, IdTCPConnection, IdTCPClient, IdHTTP, IdAuthentication, Menus, URLMon, shellapi, JvGIF, JvComponentBase, JvTrayIcon, AccountSystem, Registry, sCheckBox;
type TForm5 = class(TForm) AccountSystemClient1: TAccountSystemClient; edtUsername: TEdit; edtPassword: TEdit; Button1: TButton; Label1: TLabel; Label2: TLabel; Button2: TButton; CheckBox1: TsCheckBox; procedure Button1Click(Sender: TObject); procedure AccountSystemClient1LoggedIn( AUserLevel: TAccountSystemUserLevel; AExpired: Boolean); procedure Button2Click(Sender: TObject); procedure FormCreate(Sender: TObject); procedure SaveLoginData; procedure LoadLoginData; private public end;
var Form5: TForm5; implementation
uses Unit1, Unit2;
{$R *.dfm}
procedure TForm5.Button1Click(Sender: TObject); begin if AccountSystemClient1.Login(edtUsername.Text, edtPassword.Text) then begin ModalResult := mrOK; close; end else ShowMessage('Falsche Benutzerdaten!'); end;
procedure TForm5.AccountSystemClient1LoggedIn( AUserLevel: TAccountSystemUserLevel; AExpired: Boolean); begin Form1.Caption := 'Farmerama Wecker Version 1.5 Herzlich Willkommen ' + Form5.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;
end;
procedure TForm5.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', Checkbox1.Checked); Reg.CloseKey; end; finally Reg.Free; end; SaveLoginData; end;
procedure TForm5.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'); Checkbox1.Checked := Reg.ReadBool('AutoLogin'); Reg.CloseKey; end; finally Reg.Free; end; end; procedure TForm5.Button2Click(Sender: TObject); begin Application.terminate; end;
procedure TForm5.FormCreate(Sender: TObject); begin LoadLoginData; end;
end. |
Lg
jaenicke - So 27.03.11 19:12
Und was hat die Unit jetzt mit dem Projektquelltext zu tun, in dem der Fehler auftritt? :gruebel: :autsch:
chickenfigt1989 - So 27.03.11 19:13
Hier tritt der Fehler auf:
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:
| program Project1;
uses Forms, Unit1 in 'Unit1.pas' , Unit2 in 'Unit2.pas' , Unit3 in 'Unit3.pas' , Unit4 in 'Unit4.pas' , Unit5 in 'Unit5.pas' ;
{$R *.res}
begin Application.Initialize; Application.Title := 'Farmerama Wecker'; Application.CreateForm(TForm2, Form2); Application.CreateForm(TForm5, Form5); IF Form5.Showmodal=ID_OK Then Begin Form5.Free; Application.CreateForm(TForm1, Form1); Application.CreateForm(TForm3, Form3); Application.CreateForm(TForm4, Form4); Application.Run; end. |
jaenicke - So 27.03.11 19:18
Das heißt du hast dort wo die Unit gebraucht worden wäre, diese immer noch nicht in die Unit gepackt und wunderst dich dann, dass es immer noch nicht geht? Na, herzlichen Glückwunsch an dein logisches Denkvermögen... :roll:
Wie gesagt, schreib die Unit in die uses... in diesem Fall jetzt die Unit Windows...
chickenfigt1989 - So 27.03.11 19:20
Oke Dankeschön hab sie eingebunden.
Das programm startet jetzt nur wenn ich mich einlogge wird immernoch das Programm beendet
lg
jaenicke - So 27.03.11 19:25
Benenne halt erst einmal deine Formulare anständig, dann kann dir vielleicht auch jemand dabei helfen. :roll:
chickenfigt1989 - So 27.03.11 20:11
Hab ein anders Problem.
Hab auf der Login Form einen Button wo man sich registrieren kann.
Hab in den Button geschrieben:
frmNewUser.show;
Allerdings wenn ich das anklicken will kommt immer eine Access Violation.
Delphi hinterlegt folgendes in ROt:
IF Form5.Showmodal=mrOK Then Begin
Form1.Free;
lg
jaenicke - So 27.03.11 20:17
Weil das Formular da noch nicht erzeugt ist. Das ist ein Problem, weil du dich auf die automatische Erzeugung der Formulare durch Delphi verlässt anstatt das selbst zu machen.
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9:
| var NewUserForm: TfrmNewUser; begin NewUserForm := TfrmNewUser.Create(Self); try NewUserForm.ShowModal; finally NewUserForm.Free; end; |
Wie du im Projektquelltext leicht siehst, wird dieses Formular ja erst nach dem Quelltext erzeugt, in dem du es verwendest.
Gausi - So 27.03.11 20:20
Ich möchte an der Stelle eine Verwarnung aussprechen:
Wenn hier nicht bald etwas mehr Eigeninitiative erkennbar wird, dann wird dieses Topic für 24h gesperrt, damit der Threadersteller etwas Zeit zum Nachdenken hat.
Bitte bei folgenden Antworten berücksichtigen. Danke.
chickenfigt1989 - So 27.03.11 20:28
Oke ich lass die Form jetzt selbst erstellen mit Klick auf den Button Neuer Benutzer.
Wie soll ich das dann mit den Code machen der beim Onklick ereigniss des Buttons auf der
Form NewUser ist? Kann ich den Drin lassen oder muss ich des irgendwie anders lösen?
lg
jaenicke - So 27.03.11 20:32
Der gehört da nicht hin, ganz einfach. Das Formular fragt die Daten vom Benutzer ab und gibt dir zurück, ob der Benutzer Ok geklickt hat. Eben in ModalResult.
Wenn er Ok geklickt hat, nimmst du die Daten aus dem Formular und machst damit etwas. Aber nicht in dem Code im Formular, sondern dort wo du das Formular aufgerufen hast.
chickenfigt1989 - So 27.03.11 20:40
Wenn ich auf den Button Neuen Benutzer klicke, wird die Form NewUser aufgerufen mit dem Code den du vorher gepostet hast. Das Formular wird aufgerufen und Funktioniert.
Allerdings wenn ich einen Neuen Benutzer anlegen will meckert der Compiler bei :
Delphi-Quelltext
1:
| data.AddFormField('email', frmNewUser.edtMail.Text); |
Und es kommt eine Access Violation
lg
HenryHux - So 27.03.11 20:44
jaenicke hat folgendes geschrieben : |
| Vielleicht als Info: Der IQ des Nutzers sollte höher als die Compilerversion von Delphi sein |
Ich glaube das sollte man glatt mal als Signatur nehmen :D :D
ALF - So 27.03.11 20:50
Auf welcher Form befindet sich was?
Delphi-Quelltext
1:
| data.AddFormField('email', frmNewUser.edtMail.Text); |
das ist bei Dir nie so richtig klar. Wie soll man da Helfen?
Und Access Violation sagt meistens das was nicht da ist!
ALf
chickenfigt1989 - So 27.03.11 21:13
Oke Habe nun auf meiner Login Form einen BUtton mit Neuer benutzer.
Da wenn man draufklickt wird die Form NewUser erstelllt mit :
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9:
| var NewUserForm: TfrmNewUser; begin NewUserForm := TfrmNewUser.Create(Self); try NewUserForm.ShowModal; finally NewUserForm.Free; end; |
Wenn ich nun auf den Button Neuer Benutzer klicke, kommt das gewünschte Formular.
Da wenn ich alles ausfülle und auf Benutzer anlegen klicke kommt eine Acces Violation wie in Sccreen gezeigt. und der Compiler färbt diese Zeile rot ein:
Delphi-Quelltext
1:
| data.AddFormField('email', frmNewUser.edtMail.Text); |
Dieser Code liegt auf der NewUser Form wenn man auf den Button Benutzer anlegen Klickt.
lg
Gausi - So 27.03.11 21:18
Ich mach hier jetzt mal zu. Du solltest dir einfach mal gründlich überlegen, was du da machst, und was für Formen du verwendest. Morgen abend gehts hier weiter.
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2026 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!