AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

MainForm zur Laufzeit wechseln?

Ein Thema von Bulvaye · begonnen am 27. Nov 2006 · letzter Beitrag vom 27. Nov 2006
Antwort Antwort
Bulvaye

Registriert seit: 17. Jul 2004
Ort: Köln
19 Beiträge
 
Delphi 7 Enterprise
 
#1

MainForm zur Laufzeit wechseln?

  Alt 27. Nov 2006, 13:23
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.
Gesegnet ist, dessen Geist zu klein für jedweden Zweifel ist.
  Mit Zitat antworten Zitat
Benutzerbild von Phoenix
Phoenix
(Moderator)

Registriert seit: 25. Jun 2002
Ort: Hausach
7.640 Beiträge
 
#2

Re: MainForm zur Laufzeit wechseln?

  Alt 27. Nov 2006, 13:29
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.
Sebastian Gingter
Phoenix - 不死鳥, Microsoft MVP, Rettungshundeführer
Über mich: Sebastian Gingter @ Thinktecture Mein Blog: https://gingter.org
  Mit Zitat antworten Zitat
fwsp
(Gast)

n/a Beiträge
 
#3

Re: MainForm zur Laufzeit wechseln?

  Alt 27. Nov 2006, 13:31
wie wäre es, wenn du frames nimmst. oder tabsheets.
  Mit Zitat antworten Zitat
Hoshy

Registriert seit: 27. Apr 2006
32 Beiträge
 
Delphi 7 Architect
 
#4

Re: MainForm zur Laufzeit wechseln?

  Alt 27. Nov 2006, 13:40
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:
procedure TMainForm.btnCreateNewFormClick(Sender: TObject);
begin
  With TNewForm.Create(application) do Init(Self);
end;
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.

(2) MainForm zerstören, z. B. über einen Button auf TNewForm.

Hier mal ein komplettes (rudimentäres) TNewForm als Beispiel:

Delphi-Quellcode:
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.
Funktioniert
  Mit Zitat antworten Zitat
Benutzerbild von uligerhardt
uligerhardt

Registriert seit: 19. Aug 2004
Ort: Hof/Saale
1.746 Beiträge
 
Delphi 2007 Professional
 
#5

Re: MainForm zur Laufzeit wechseln?

  Alt 27. Nov 2006, 14:17
Zitat von Hoshy:
Funktioniert
Jain.
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.
Uli Gerhardt
  Mit Zitat antworten Zitat
marabu

Registriert seit: 6. Apr 2005
10.109 Beiträge
 
#6

Re: MainForm zur Laufzeit wechseln?

  Alt 27. Nov 2006, 14:40
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: klick

Grüße vom marabu
  Mit Zitat antworten Zitat
Hoshy

Registriert seit: 27. Apr 2006
32 Beiträge
 
Delphi 7 Architect
 
#7

Re: MainForm zur Laufzeit wechseln?

  Alt 27. Nov 2006, 14:48
Zitat von uligerhardt:
Hast du NewForm schonmal mininiert, nachdem du MainForm getötet hast? Und beendet sich deine Anwendung, wenn du NewForm schließt?
SHI*T!! Soll nochmal einer sagen, Systemtests wären überflüssig
  Mit Zitat antworten Zitat
Alt 4. Jun 2008, 20:40     Erstellt von Delphiturbo
Dieser Beitrag wurde von Phoenix gelöscht. - Grund: Der ist die Wurzel allen Übels :-(
Alt 4. Jun 2008, 20:45     Erstellt von Die Muhkuh
Dieser Beitrag wurde von Christian Seehase gelöscht. - Grund: Macht ohne den vorherigen keinen Sinn ;-)
Alt 4. Jun 2008, 21:05     Erstellt von Delphiturbo
Dieser Beitrag wurde von SirThornberry gelöscht. - Grund: Das hat nichts mit diesem Thema zu tun!
Alt 4. Jun 2008, 21:09     Erstellt von Die Muhkuh
Dieser Beitrag wurde von SirThornberry gelöscht. - Grund: Hat entsprechend des vorherigen Posts nichts mit dem Thema zu tun
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 16:35 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz