Beim Laden Hauptform. verbergen und zweites Form. laden?
-
Heyho, ich bin´s schon wieder. Manchmal sind es die kleinen Probleme, die einen zum Verzweifeln bringen. Ich habe nun ein Projekt, in dem ein Hauptformular geladen wird. Ich unterbinde aber das Anzeigen, indem ich
Application->ShowMainForm = false;setze. Nun möchte ich beim Start aber ein zweites Formular (Login) laden über das ich dann nach erfolgreichem Login das Hauptformular wieder sichtbar mache.
Wenn ich im Hauptform. beim Laden
FormLogin->Show();eingebe (.h-file ist includet) bekomme ich eine Exception ?!?
Wenn ich das Formular auf die gleiche Weise über einen Button aus dem Hauptformular öffne, funktioniert es. In der OnCreate-Aktion geht es aber wiederum nicht. Wo liegt mein Fehler?Grüße,
Tobias
-
Hallo
das liegt natürlich daran, das auch die Forms zur Laufzeit der Reihe nach erzeugt werden. Das bedeutet, das das Hauptformular, meistens ja das erste im Projekt erstellte, auch zuerst zur Laufzeit erzeugt wird. Und das dann andere Forms noch gar nicht erzeugt sind, wenn der Konstruktor oder OnCreate des Hauptformulars aufgerufen wird.
Ich empfehle folgendes vorgehen :
Öffne die Hauptquellcode-Datei des projekts, die ja <projektname>.cpp heißt. Dort findest du die main-Funktion, mitsamt den vom Builder erzeugten Aufrufen, um die Forms zu erstellen und die Application auszuführen.Dort includest du erstmal nach allen anderen includs die Header deines Login-Forms. Dann kannst du nach allen *Application->CreateForm
*und vor Application->Run(); jetzt dein LoginForm aufrufen.bis bald
akari
-
Super, great, thx akari!!! Funktioniert

-
Bei dieser Vorgehensweise hab ich immer das Problem, dass beim Hinzufügen einer weiteren Unit alle manuellen Änderungen an der 'Project.cpp' verloren gehen.
Ich erzeuge deshalb lieber im Konstruktor der MainForm eine Instanz der Login-Form.
-
Hallo
Bei dieser Vorgehensweise hab ich immer das Problem, dass beim Hinzufügen einer weiteren Unit alle manuellen Änderungen an der 'Project.cpp' verloren gehen
Kann ich nicht nachvollziehen. Ich habe in meiner project.cpp viele Änderungen gemacht, und trotz dutzender neuer Units geht nichts verloren.
bis bald
akari
-
Dann muß ich das wohl nochmal probieren. Ich glaub im BCB6 hab ich das noch gar nicht probiert, aber im BCB5 hab ich damit richtig Ärger gehabt. Jedesmal nach dem Einfügen eines Forms verschwand der Code, den ich zum Anzeigen eines Splash-Screens eingefügt hatte. Diesen Code hatte ich in dem try-Block der WinMain eingefügt.
Irgendwann war ich es dann leid, und hab es eben im Konstruktor des MainForms gemacht...Ach so, in diesem Projekt befand sich auch eine Mutex-Behandlung (außerhalb des try-Blocks), der blieb immer erhalten. Nur die Änderungen innerhalb des try-Blocks wurden immmer wieder entfernt.