Gibt es im BCB etwas wie Cookie oder einer Session-Variable?
-
zur verschlüsselung:
http://www.codeproject.com/useritems/dcipher.asp
-
Häh ? In ne Datei schreiben? Es soll doch ne Session-Variable sein... Also einfach in einer Variablen (Datenstruktur) speichern.
Das kommt dabei raus, wenn man zuerst Web-"Programmiert" und dann richtig. ^^
-
Hallo Zusammen,
danke für eure Hinweise.@Dingo,
die Session-Variable sollte ein Beispiel sein um mein Problem ziemlich leicht jemand anderem verständlich zu machen.Jetzt habe ich noch eine Frage:
Ich habe jetzt als Hauptfenster das Login-Formular. Wenn sich der User jetzt einloggt möchte ich, dass sich das Login Fenster schließt und ein neues Formular aufgeht.
Das habe ich so weit auch hin bekommen. Jetzt meine Frage:
Kann ich während eines erfolgreichen Login-Versuchs dem neuen, zweiten Formular mitteilen, dass es jetzt das Hauptformular ist und das Login-Formular komplett schließen??Danke im voraus
Gruß
EPMS
-
Sicher.
Praktischer wäre es aber wohl, das Hauptformular Hauptformular sein zu lassen und ein extra Login-Formular zu machen, was man anzeigt und versteckt nach belieben.
Das leichte Verständlich machen deines Problems ist dir gründlich Missglückt.
-
@Dingo,
und wie sage ich dem Hauptformular beim Programm-Start das es nicht sichtbar sein soll??Und so schlecht scheint mein Versuch mit dem "Verständlich" machen nicht gewesen zu sein. Es hat anscheind jeder gleich verstanden was mein Problem war.
Gruß
EPMS
-
z.B. indem Du das Login-Fenster nicht automatisch erzeugen läßt, sondern von Hand im Konstruktor des Hauptformulars erzeugst und Modal anzeigst. Hauptformular ist zu dem Zeitpunkt noch nicht sichtbar und durch den modalen Aufruf wird es auch nicht weiter abgearbeitet.
-
Hallo Joe_M.,
wie rufe ich denn das Login-Fenster Modal auf??
-
Hallo
LoginForm->ShowModal();bis bald
akari
-
Hallo akari,
wo genau muß ich das LoginForm dann starten??
Und was muß ich machen damit das HauptForm nach dem Schließen des LoginForm richtig angezeigt wird??Gruß
EPMS
-
Hallo
ich mach sowas immer aus der Hauptprojektdatei aus, die ja immer <Projetktname>.cpp heißt.
Das LoginForm bekommt eine neue Methode namens Execute(), die das Fenster mit ShowModal() aufruft und die Eingabe überpüft. Ist die Eingabe positiv, gibt Execute() true zurück, ansonsten false.
In der Haupt-Projektdatei wird das ganze dann ausgeführt#include "LoginForm.h" // Include hinzufügen, wenn noch nicht da ... Application->Initialize(); Application->CreateForm(__classid(TMainForm), &MainForm); Application->CreateForm(__classid(TLoginForm1), &LoginForm); if (LoginForm->Execute()) // Hier wird der Login durchgeführt und ausgewertet Application->Run();bis bald
akari
-
@akari,
jui jetzt wirds schwierig. Wie füge ich denn dem LoginForm eine neue Methode hinzu??
-
Hallo
per Hand einfach in die Headerdatei LoginForm.h
public: ... bool Execute(); // Deklaration der Methode hinzufügen ... };und in die Implementationsdatei LoginForm.cpp
... bool TLoginForm::Execute() { ... // Form vorbereiten ShowModal(); // Form modal anzeigen ... // Eingabe auswerten }Dies sind grundlegende Dinge der OOP, die solltest du dir unbedingt aneignen, wenn du tiefer in den BCB und die VCL einsteigen willst.
bis bald
akari
-
Hallo akari,
kennst du im Internet Seiten wo ich mich darüber schlau machen kann??Also habe das jetzt mal so gemacht. Funktioniert leider nicht:
login.h#ifndef login_cppH #define login_cppH //--------------------------------------------------------------------------- #include <Classes.hpp> #include <Controls.hpp> #include <StdCtrls.hpp> #include <Forms.hpp> //--------------------------------------------------------------------------- class Tlogin : public TForm { __published: // Von der IDE verwaltete Komponenten TLabel *Label1; TLabel *Label2; TEdit *e_username; TEdit *e_passwort; TLabel *Label3; TCheckBox *c_login_speichern; TButton *Button1; TLabel *Label4; void __fastcall Button1Click(TObject *Sender); private: // Anwender-Deklarationen public: // Anwender-Deklarationen __fastcall Tlogin(TComponent* Owner); bool Execute(); // Deklaration der Methode hinzufügen }; //--------------------------------------------------------------------------- extern PACKAGE Tlogin *login; //--------------------------------------------------------------------------- #endifDie 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() { ShowModal(); // Form modal anzeigen } //--------------------------------------------------------------------------- void __fastcall Tlogin::Button1Click(TObject *Sender) { AnsiString sql_insert; ShowMessage(e_username->Text + " " + e_passwort->Text); 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') { hauptmenu->Show(); login->Close(); login_username = DataModule1->sql_user->FieldByName("username")->AsString; } } //---------------------------------------------------------------------------und die projekt.cpp
//--------------------------------------------------------------------------- #include <vcl.h> #include <login_cpp.h> #pragma hdrstop //--------------------------------------------------------------------------- USEFORM("hauptmenu_cpp.cpp", hauptmenu); USEFORM("DataModul.cpp", DataModule1); /* TDataModule: File Type */ USEFORM("login_cpp.cpp", login); //--------------------------------------------------------------------------- WINAPI WinMain(HINSTANCE, HINSTANCE, LPSTR, int) { try { Application->Initialize(); Application->CreateForm(__classid(Thauptmenu), &hauptmenu); Application->CreateForm(__classid(TDataModule1), &DataModule1); if (login->Execute()) // Hier wird der Login durchgeführt und ausgewertet Application->Run(); } catch (Exception &exception) { Application->ShowException(&exception); } catch (...) { try { throw Exception(""); } catch (Exception &exception) { Application->ShowException(&exception); } } return 0; } //---------------------------------------------------------------------------Leider klappt das noch nicht. Es kommt eine Exception Fehler Meldung.
Kannst mir da noch weiter helfen??
Gruß
EPMS
-
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