![]() |
Nahtlosen Formularwechsel erzeugen - Bin ratlos!!!
Hallo Leutz...
Irgendwie hänge ich gerade in der Luft... Ich habe in Delphi 7.0 das folgende Problem: Ich möchte einen Wechsel von Form1 zu Form2 erzeugen, ohne dass auf einmal zwei Formulare offen sind. Das heißt in der Praxis, dass der Anwender auf einen Button klickt und (scheinbar) umblättert. Was soll eigentlich passieren? Normalerweise soll in der Prozedur "Button1Click" eine Close-Anweisung für Form1 ausgeführt werden. Parallel dazu soll das Form2 in der Form2Create - Prozedur geöffnet werden. Selbstverständlich habe ich beide Units in der Uses-Anweisung der jeweils anderen Unit eingetragen. Was habe ich gemacht, um dies umzusetzen? Nun, ich habe in die "procedure(Button1Click)" der Unit1 ein "Form1.Close;" geschrieben. In Unit2 habe ich in die "procedure(Form2Create)" ein "Form2.show;" eingetragen. Rein theoretisch sollte diese Variante funktionieren. Doch starte ich die Anwendung und Klicke den Button, wird das Programm geschlossen. Kann mir da irgendwie jemand weiterhelfen??? P.S.: Sorry, dass kein Quelltext gepostet ist. Der wird in den nächsten Tagen nachgereicht... Sorry für den Post im falschen Forum... Bitte ins richtige Forum verschieben!!! |
Re: Nahtlosen Formularwechsel erzeugen - Bin ratlos!!!
Hast du dir die PageControl-Komponente mal angesehen?
|
Re: Nahtlosen Formularwechsel erzeugen - Bin ratlos!!!
Hallo
Vermutlich gäbe es noch bessere Varianten, aber versuch mal das Form1.Close ins Create von Form2 zu schreiben. Gruss DiComm |
Re: Nahtlosen Formularwechsel erzeugen - Bin ratlos!!!
Außerdem erzeugt das Schließen des Hauptformulars in der Regel die Terminierung des Programms.
@diComm: Nein, das geht nicht. Grund siehe 2 Zeilen weiter oben. Außerdem wird ein Formular i.d.R. nur 1 mal erzeugt, wenn schon dann muss es ins OnShow. |
Re: Nahtlosen Formularwechsel erzeugen - Bin ratlos!!!
Hoppla, ja klar, wenn dann ins OnShow...
Falls du es nicht mit PageControl machen willst, würde ich das Hauptformular invisible machen und die Steuerung über dieses Hauptformular realisieren... Würde aber trotzdem PageControl empfehlen |
Re: Nahtlosen Formularwechsel erzeugen - Bin ratlos!!!
Nimm statt "Close()" einfach "Hide()". :)
Delphi-Quellcode:
// erste Form
procedure TForm1.Button1Click(Sender: TObject); begin Form2.Width := Form1.Width; Form2.Height := Form1.Height; Form2.Left := Form1.Left; Form2.Top := Form1.Top; Form2.Show; Form1.Hide; end; // zweite Form procedure TForm2.Button1Click(Sender: TObject); begin Form1.Width := Form2.Width; Form1.Height := Form2.Height; Form1.Left := Form2.Left; Form1.Top := Form2.Top; Form1.Show; Form2.Hide; end; Ich würde aber auch eher zu PageControl, etc. raten. Schon allein, weil er von der Erweiterbarkeit wesentlich einfacher ist als jedes Mal eine neue Form zu bauen. :) |
DP-Maintenance
Dieses Thema wurde von "Chakotay1308" von "Neuen Beitrag zur Code-Library hinzufügen" nach "Sonstige Fragen zu Delphi" verschoben.
*wuppdi* Einmal in\\\'s richtige Forum... ;) |
Re: Nahtlosen Formularwechsel erzeugen - Bin ratlos!!!
Zitat:
Zitat:
Delphi-Quellcode:
Entsprechend auf Form2:
procedure TForm1.Button1Click(Sender: TObject);
begin Self.Hide; Form2.Show; end;
Delphi-Quellcode:
procedure TForm2.Button1Click(Sender: TObject);
begin Self.Hide; Form1.Show; end; |
Re: Nahtlosen Formularwechsel erzeugen - Bin ratlos!!!
Habe das etwa folgend gelöst:
Im Hautptformualr oder DataModule liegt eine Timer-Komponente. Dieser übergebe ich die Nr des Formulars welches geöffnet werden soll in die Tag-Eigenschaft. Jetzt stelle ich den Timer auf enabled bevor sich das Formular 1 schließt (Destroy). Nach Auslösen des Timer-Events wird in der Eventroutine das Formular mit Nr aus Tag geöffnet (Create). Damit gibt es auch keine Probleme bei Rücksprünge von Proceduren auf geschlossene / destroyte Formulare. Grüße /// Martin |
Alle Zeitangaben in WEZ +1. Es ist jetzt 01:15 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz