Zwei Delphi Formulare verbinden
Hallo,
Ich habe eine Frage bzgl. wie man zwei Delphi Formulare/Unit miteinander verbindet. Als Compiler verwende ich Lazarus.
Mein Problem ist aber nicht das eigentliche Einbinden, ich habe einfach Unit2 in der Uses-Klausel hinzugefügt und das hat eigentlich auch funktioniert, ich konnte also mit einem Button über Form2.Show dieses anzeigen lassen. Ich brauche in meinem Programm aber auch so etwas wie einen Home-Button. Also wieder Form1.Show, habe ich gedacht, hat aber nicht funktioniert. Was genau mache ich falsch. ich habe auch Unit1 in die Uses Klausel eingefügt, hat jedoch nichts verändert.
Ich hoffe, hier kann mir das jemand erklären, für mich ist es nämlich komplett unverständlich...
Danke schonmal im Vorraus!!!
Lg.
2 Antworten
Hi,
die Funktion Show ändert nur die Eigenschaft visible. Ist das Formular also schon sichtbar passiert gar nichts.
Suchst du eine Möglichkeit das Formular in den Vordergrund zu schieben? Dann musst du die Methode BringToFront verwenden.
Ich benutze dafür immer eine eigene Methode, welche das Formular auch anzeigt, wenn es zB minimiert ist.
hier der Code:
procedure ForceShow(const frm: TForm);
begin
if frm.WindowState = wsMinimized then
ShowWindow(frm.Handle, SW_RESTORE);
if not frm.Visible then
frm.Show
else
frm.BringToFront;
end;
Aufruf zB : ForceShow(Form1)
viel Erfolg , gruss dj
Dann kannst du die Komponente TNotebook verwenden. Diese stellt dir Seiten zur Verfügung, ..welche du anschalten kannst. Dann bleibt alles in einem Formular.
...oder du verwendest Frames (TFrame). Die kannst du wie ein Formular programmieren und dann in deinem Formular verwenden.
Oder du verwendest Panels mit alClient Alignment und schaltest immer nur eines visibile.
Bitte sieh mir nach, dass ich dir hier keinen Einsteigerkurs in Anwendungsentwicklung geben kann. Die paar Brotkrumen sollten dir bei deiner weiteren Recherche helfen.
Gruss, dj
Wie DataJockey schon schreibt, kann man in 1 Formular mehrere Ebenen verwalten - ich würde dir aber TPageControl empfehlen, weil das einfacher zu handlen ist (finde ich). Einfach aufs Formular setzen, draufzeigen, rechte Maustaste und "neue Seiten einfügen".
Übrigens kannst du unter Windows nicht "gleichzeitig" 2 Fenster "aktiv" haben. Der Focus ist entweder auf dem einen oder auf dem anderen Fenster (Formular). WOhl aber kannst du mehrere Fenster optisch steuern, also "gleichzeitig" Ausgaben generieren, die dort angezeigt werden. - aber für Eingaben benutzen jeweils nur das aktive Fenster. Ok, manche Fenster sind nicht aktiv und du kannst trotzdem mit dem Mausrad den Inhalt scrollen - das wird aber mit dem Maustreiber über Hooks gelöst...
Zu deinem Thema zurück - einen Home-Button: du kannst das mit einem globalen Hotkey lösen (zB wenn man die Pause-Taste drückt; "global", wenn er auch in anderen Fenstern anderer Programme funktionieren soll, zB um Screenshots zu erzeugen). Oder du hast auf jedem Formular einen Button, der das Hauptfenster vorholt.
Danke für die Antwort.
Leider hilft mir das aktuell nicht weiter, da ich nicht wirklich weiß, wie ich es verwenden soll bzw. wie die Prozedur ForceShow funktioniert. Was ich auch nicht will ist, dass ich (bis aus wenige Ausnahmen) zwei Fenster Gleichzeitig nutzen kann, ich will immer nur eines haben, und auch nur dieses in der Taskleiste haben. Ich will sozusagen die Navigation durch mein Programm durch mehrere Formulare besser strukturieren, da mir die Visible true/false Sachen auf dauer bei einem so großen Programm zu unübersichtlich werden, und hab halt gedacht, ich könnte es so machen.
Würde mich riesig freuen, wenn du mir das also erklären könntest oder vielleicht noch eine andere Idee hast. Danke :D
Lg.