![]() |
MainForm zur Laufzeit wechseln?
Wie kann ich zur Laufzeit das MainForm wechseln?
Problemfall: Die Anwendung startet mit einem Form1 als Hauptformular. Aus diesem Formular heraus kann der Benutzer das Fenster zerstören, ein Form2 erzeugen und dieses ab sofort als MainForm nutzen (und umgekehrt - eine Art "Moduswechsel"). Frage: Wie kann ich dies bewerkstelligen? Wie kann ich zur Laufzeit das aktuelle Mainform zerstören, ohne dass sich die Anwendung beendet und ein neu erzeugtes Form zum MainForm machen? Vielen Dank für ein paar Tipps. |
Re: MainForm zur Laufzeit wechseln?
Ach Du schande...
Erm. .der einfachste Weg der mir gerade einfällt: Ein Fenster (TForm) ist ein TWinControl. Es kann also auf anderen Forms als ein mehr oder weniger normales Control erzeugt werden. Mache also ein Containerform (MainForm) der Anwendung. Dein normales bisheriges MainForm wird einfach erzeugt und der Parent auf das Containerform gesetzt. Neim Moduswechsel kannst Du dieses Form nun Problemlos vernichten und das neue Form wiederum mit dem Containerform als Parent erzeugen. |
Re: MainForm zur Laufzeit wechseln?
wie wäre es, wenn du frames nimmst. oder tabsheets.
|
Re: MainForm zur Laufzeit wechseln?
Ausgangslage:
TMainForm = Bisheriges Hauptformular TNewForm = Künftiges Formular In den Projektoptionen muss TNewForm so konfiguriert sein, dass es nicht automatisch erzeugt wird. (1) Neues Form erzeugen: Z. B. über einen Button auf TMainForm:
Delphi-Quellcode:
Hier wird eine neue Instanz von TNewForm erzeugt, als Owner "Application" eingetragen und anschliessend die in TNewForm auscodierte Methode "Init" aufgerufen. Diese bekommt als Parameter eine Referez auf TMainForm geliefert, damit TNewForm anschliessend TMainForm zerstören kann.
procedure TMainForm.btnCreateNewFormClick(Sender: TObject);
begin With TNewForm.Create(application) do Init(Self); end; (2) MainForm zerstören, z. B. über einen Button auf TNewForm. Hier mal ein komplettes (rudimentäres) TNewForm als Beispiel:
Delphi-Quellcode:
Funktioniert :-D
unit UFrmNewForm;
interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls; type TNewForm = class(TForm) btnKillMainForm: TButton; procedure btnKillMainFormClick(Sender: TObject); private fcaller: TForm; public procedure Init(aCaller: TForm); end; var NewForm: TNewForm; implementation {$R *.dfm} procedure TNewForm.Init(aCaller: TForm); begin fcaller := aCaller; Show; end; procedure TNewForm.btnKillMainFormClick(Sender: TObject); begin fcaller.Free; end; end. |
Re: MainForm zur Laufzeit wechseln?
Zitat:
Hast du NewForm schonmal mininiert, nachdem du MainForm getötet hast? Und beendet sich deine Anwendung, wenn du NewForm schließt? Leider hat die Anwendung nach "FCaller.Free" keine Application.MainForm mehr, und das verträgt die VCL nur bedingt. :( Ciao, Uli. |
Re: MainForm zur Laufzeit wechseln?
Hi,
den von Sebastian in Beitrag #2 beschriebenen Ansatz praktiziere ich häufig. Die Umsetzung habe ich mir vor Jahren einmal bei Steve Teixeira (Delphi 4 Developer's Guide) abgeschaut: ![]() Grüße vom marabu |
Re: MainForm zur Laufzeit wechseln?
Zitat:
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 02:44 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