Gibt es im BCB etwas wie Cookie oder einer Session-Variable?
-
Hallo
Leider klappt das noch nicht. Es kommt eine Exception Fehler Meldung.was ja daran liegt, das login zu dem Zeitpunkt nach gar nicht erschaffen ist.
Geh mal über Menü Projekt/Optionen in den Tab Formulare und setzt login in die Liste der automatisch zu erzeugenen Formulare (also nach links)Das muß dann so aussehen :
... Application->CreateForm(__classid(Tlogin), &login); // Formular wird erschaffen ... if (login->Execute()) // Formular wird verwendet ...Desweiteren must du aus Execute() noch einen passenden Bool-Wert zurückgeben, je nachdem ob die Anmeldung erlaubt ist oder nicht.
bis bald
akari
-
Hallo akari,
wann wird das Execute() denn ausgeführt?? Gleich am Anfang, wenn das Formular ausgestellt wird??
Momentan muß der User bei mir seinen Benutzernamen und Passwort eingeben und dann einen Button betätigen. Dann wird geschaut ob die Eingaben richtig waren.
Aber wie realisiere ich das im Execute()?? Kann ich das Execute() im Button1Click ausführen??
Gruß
EPMS
-
Hallo,
Du fürst das Execute doch selbst aus (siehe dein eigener Quelltext).
Tlogin::Execute() ruft ShowModal() auf, d.h. deine Dialog wird angezeigt bis du ihn schliesst. ShowModal hat auch einen Rückgabewert. Den könntest du auswerten. Desweiteren kannst du ja im OnClose (oder besser in OnCloseQuery) von Tlogin testen ob das Passwort stimmt und dann die Variable ModalResult entsprechend setzen. Also entweder auf mrOk oder mrCancel oder mrNo ...Ciao
-
Hallo Braunstein,
danke für deine Tipps. Leider bin ich zu blöd dafür. Habe es jetzt ein bischen umgebaut.Also die Exception kommt nicht mehr. Hier mal meine geänderte Datei
login.cpp
//--------------------------------------------------------------------------- #include <vcl.h> #pragma hdrstop #include "login_cpp.h" #include "hauptmenu_cpp.h" #include "DataModul.h" //--------------------------------------------------------------------------- #pragma package(smart_init) #pragma resource "*.dfm" AnsiString login_username; Tlogin *login; //--------------------------------------------------------------------------- __fastcall Tlogin::Tlogin(TComponent* Owner) : TForm(Owner) { } //--------------------------------------------------------------------------- bool Tlogin::Execute() { return ShowModal(); // Form modal anzeigen } //--------------------------------------------------------------------------- void __fastcall Tlogin::FormCloseQuery(TObject *Sender, bool &CanClose) { AnsiString sql_insert; sql_insert = "select * from user where username = '"+e_username->Text+"' AND passwort = '"+e_passwort->Text+"'"; DataModule1->sql_user->SQL->Clear(); DataModule1->sql_user->SQL->Add(sql_insert); DataModule1->sql_user->Open(); DataModule1->sql_user->First(); if(DataModule1->sql_user->RecordCount != '1') { login_username = DataModule1->sql_user->FieldByName("username")->AsString; ModalResult = mrOk; } else { ModalResult = mrCancel; } } //--------------------------------------------------------------------------- void __fastcall Tlogin::Button1Click(TObject *Sender) { Close(); } //---------------------------------------------------------------------------Wenn ich das jetzt den Button betätige kommt ich jedesmal ins Hauptmenü. Das will ich ja nicht. Wenn der Username und das Passwort falsch sind möchte ich wieder das Login-Fenster haben und das Hauptmenü soll noch nicht zu sehen sein.
Gruß
EPMS
-
Hallo
hast du dir das mal angeschaut
bool &CanCloseMfG
Klaus
-
Setze doch CanClose auf false. Dann schliesst sich dein Login-Dialog nicht. Du mußt deinen Nutzer natürlich auch die Chance geben den Dialog abzubrechen und das Programm zu beenden.
-
Ui, ist das kompliziert. Wo finde ich oder benutze ich denn CanClose???
In der Hilfe steht nichts darüber.Bin glaube ich echt zu blöd dafür.
Gruß
EPMS
-
Schau doch mal in deinen eigenen Quelltext. Da findest du das hier:
[cpp]void __fastcall Tlogin::FormCloseQuery(TObject *Sender, bool &CanClose)[/cpp]
-
Wenn ich das jetzt so versuche:
void __fastcall Tlogin::FormCloseQuery(TObject *Sender)kommt: [C++ Fehler] login_cpp.cpp(27): E2316 'Tlogin::FormCloseQuery()' ist kein Element von 'Tlogin'
Also einfach weg lassen kann ich es anscheind auch nicht.
Hast du sowas wie icq oder so?? Dann schreibt man hier das Board nicht so voll...
EPMS
-
Du sollst es nicht weglassen, sonder in der OnCloseQuery schreiben CanClose = false. Dann schliesst sich deine Form nicht.
Schau bitte mal in die Hilfe zu OnCloseQuery.