TForm in TForm?

Rund um die LCL und andere Komponenten
Antworten
Teekeks
Beiträge: 359
Registriert: Mi 27. Mai 2009, 20:54
OS, Lazarus, FPC: OpenSuse11.4 x86 (Lazarus: 0.9.30 FPC 2.4.2)
CPU-Target: x86
Wohnort: Cottbus

TForm in TForm?

Beitrag von Teekeks »

Hi!
Ist es möglich eine Form in einer Form zu erzeugen?
Einfach eine Form zu erzeugen zur runtime und dann parent auf die andere Form zu setzen geht leider nicht.

Wie kann man das sonst machen, oder geht das gar nicht...

Gruß Teekeks

khh
Beiträge: 489
Registriert: Sa 5. Apr 2008, 09:37
OS, Lazarus, FPC: Win Vista,Win 7 (L 0.9.29 FPC 2.4.1)
CPU-Target: 32Bit /64 Bit
Wohnort: Nähe Freiburg i.Br.

Re: TForm in TForm?

Beitrag von khh »

Teekeks hat geschrieben:Hi!
Ist es möglich eine Form in einer Form zu erzeugen?
Einfach eine Form zu erzeugen zur runtime und dann parent auf die andere Form zu setzen geht leider nicht.

Gruß Teekeks
was geht denn da nicht?
Fehlermeldungen?

_X_
Beiträge: 250
Registriert: Di 16. Dez 2008, 20:13
OS, Lazarus, FPC: aptosid (aptosid.com); Lazarus SVN gtk2+qt4; FPC 2.4.0
CPU-Target: 32/64Bit

Re: TForm in TForm?

Beitrag von _X_ »

Da zu gibts ja Frames.

mfg _X_

arturx
Beiträge: 140
Registriert: Fr 21. Nov 2008, 11:29
OS, Lazarus, FPC: Winux (L 1.0.6.xy FPC 2.6.z)
CPU-Target: 32/64Bit

Re: TForm in TForm?

Beitrag von arturx »

Hey Teekeks,
meinst Du etwas in der Art :

Code: Alles auswählen

TForm1 = class(TForm)
    Button1: TButton;
    Panel1: TPanel;
    procedure Button1Click(Sender: TObject);
  private
       vfo : tform;
       bt  : tbutton;     
  end; 
 
procedure TForm1.Button1Click(Sender: TObject);
begin  If assigned(vfo) then
          begin vfo.free;
                vfo := nil;
                exit;
          end;
        vfo         := tform.create(self);
        vfo.name    := 'hallo';
        vfo.parent  := self.Panel1;
        vfo.align   := alclient;
        vfo.Color   := clyellow;            //damit es auffällt
        bt          := tbutton.create(vfo{<--autom. destroy durch vfo});
        bt.Parent   := vfo;
        bt.SetBounds(10,10,60,20);
        bt.caption  := 'drück mich';
        vfo.visible := true; // <----- das scheint der Bringer zu sein !!!!
end;
Am Anfang verblüffte mich Deine Frage etwas, da der o.a. Code auf Anhieb funktionierte.
Doch als ich eine 2.Form per drag and drop zusammenclickte, funktionierte alles erst, nachdem im Code ebenfalls visible := true; stand.
Das muss offenbar eingefügt werden, auch wenn im OI visible schon gesetzt ist.
Natürlich müssen die Form bounds passen (hier einfach per alclient), damit das 2.Fenster sichtbar ist.
Ich hoffe, dass Dir das ein wenig weiter hilft..

Teekeks
Beiträge: 359
Registriert: Mi 27. Mai 2009, 20:54
OS, Lazarus, FPC: OpenSuse11.4 x86 (Lazarus: 0.9.30 FPC 2.4.2)
CPU-Target: x86
Wohnort: Cottbus

Re: TForm in TForm?

Beitrag von Teekeks »

Hmmm,
Naja, ich hätte ja gerne das ganze mit Rahmen (also Titelleiste mit Kreuz oben rechts etc.) also ganau wie ein normales Fenster.

Hitman
Beiträge: 512
Registriert: Mo 25. Aug 2008, 18:17
OS, Lazarus, FPC: ArchLinux x86, WinVista x86-64, Lazarus 0.9.29, FPC 2.4.1
CPU-Target: x86
Wohnort: Chemnitz

Re: TForm in TForm?

Beitrag von Hitman »

Stichwort: MDI. Aber wozu muss das Formular in deinem jetzigen Formular sein? Reicht es nicht modal oder gar non-modal als normaler Dialog?

arturx
Beiträge: 140
Registriert: Fr 21. Nov 2008, 11:29
OS, Lazarus, FPC: Winux (L 1.0.6.xy FPC 2.6.z)
CPU-Target: 32/64Bit

Re: TForm in TForm?

Beitrag von arturx »

Teekeks hat geschrieben:ich hätte ja gerne das ganze mit Rahmen (also Titelleiste mit Kreuz oben rechts etc.) also ganau wie ein normales Fenster.
Na dann füg mal die folgenden Zeilen hinzu :

Code: Alles auswählen

vfo.BorderIcons:= [bihelp,bisystemmenu,biminimize,bimaximize];
vfo.BorderStyle:= bssizeable;

Teekeks
Beiträge: 359
Registriert: Mi 27. Mai 2009, 20:54
OS, Lazarus, FPC: OpenSuse11.4 x86 (Lazarus: 0.9.30 FPC 2.4.2)
CPU-Target: x86
Wohnort: Cottbus

Re: TForm in TForm?

Beitrag von Teekeks »

hmmm, ändert sich nichts... Könnte das an GTK2 liegen?

arturx
Beiträge: 140
Registriert: Fr 21. Nov 2008, 11:29
OS, Lazarus, FPC: Winux (L 1.0.6.xy FPC 2.6.z)
CPU-Target: 32/64Bit

Re: TForm in TForm?

Beitrag von arturx »

Teekeks hat geschrieben: Könnte das an GTK2 liegen?
Tja, damit habe ich leider keine Erfahrung..... :(
Trozdem : was genau ist der Fehler :

Kommt überhaupt nichts ?
Kommt eine Fehlermeldung (wenn ja, welche) ?
Kommt etwas Falsches ?
Kommt .... ?

Hitman
Beiträge: 512
Registriert: Mo 25. Aug 2008, 18:17
OS, Lazarus, FPC: ArchLinux x86, WinVista x86-64, Lazarus 0.9.29, FPC 2.4.1
CPU-Target: x86
Wohnort: Chemnitz

Re: TForm in TForm?

Beitrag von Hitman »

Diese Umsetzung von MDI existiert nur unter Win32 und QT. Und soweit ich das beurteilen kann ist es in beiden mehr oder weniger "deprecated" - selbst Microsoft (die diese Art des MDI mehr oder weniger geprägt haben) nutzt es nicht mehr. Eventuell solltest du deine Benutzeroberfläche nochmal überdenken - es gibt sicher schönere Möglichkeiten (siehe Firefox, MS Office, .... jede erdenkliche Anwendung ;-))

Socke
Lazarusforum e. V.
Beiträge: 3178
Registriert: Di 22. Jul 2008, 19:27
OS, Lazarus, FPC: Lazarus: SVN; FPC: svn; Win 10/Linux/Raspbian/openSUSE
CPU-Target: 32bit x86 armhf
Wohnort: Köln
Kontaktdaten:

Re: TForm in TForm?

Beitrag von Socke »

Hitman hat geschrieben:Diese Umsetzung von MDI existiert nur unter Win32 und QT. Und soweit ich das beurteilen kann ist es in beiden mehr oder weniger "deprecated" - selbst Microsoft (die diese Art des MDI mehr oder weniger geprägt haben) nutzt es nicht mehr. Eventuell solltest du deine Benutzeroberfläche nochmal überdenken - es gibt sicher schönere Möglichkeiten (siehe Firefox, MS Office, .... jede erdenkliche Anwendung ;-))
Naja, MS Office und gute Benutzeroberfläche? Schonmal eine bestimmte Option, von der du nur weißt, dass es sie gibt, gesucht? Ich finde da nichts wieder ...
Ansonsten verwendet(e) Microsoft in MS Excel 2003 auch MDI. Ich hab mich zuerst immer gewundert, warum ich keine zwei Arbeitsmappen gleichzeitig anzeigen konnte ...
MfG Socke
Ein Gedicht braucht keinen Reim//Ich pack’ hier trotzdem einen rein

Hitman
Beiträge: 512
Registriert: Mo 25. Aug 2008, 18:17
OS, Lazarus, FPC: ArchLinux x86, WinVista x86-64, Lazarus 0.9.29, FPC 2.4.1
CPU-Target: x86
Wohnort: Chemnitz

Re: TForm in TForm?

Beitrag von Hitman »

Socke hat geschrieben:Naja, MS Office und gute Benutzeroberfläche? Schonmal eine bestimmte Option, von der du nur weißt, dass es sie gibt, gesucht? Ich finde da nichts wieder ...
Wer hat was von "gut" gesagt? Außerdem ging es um MDI, nicht um die gesamte Benutzeroberfläche (wäre auch ziemlich irrelevant, wenn der OP nicht ausgerechnet eine eigene Office Suite schreiben will).
Socke hat geschrieben:Ansonsten verwendet(e) Microsoft in MS Excel 2003 auch MDI. Ich hab mich zuerst immer gewundert, warum ich keine zwei Arbeitsmappen gleichzeitig anzeigen konnte ...
MDI (=Multi Document Interface) ist ein Konzept; dieses Fenster-in-Fenster eine konkrete (aber wie gesagt veraltete, unangebrachte und so gut wie nicht portable) Implementierung.

Teekeks
Beiträge: 359
Registriert: Mi 27. Mai 2009, 20:54
OS, Lazarus, FPC: OpenSuse11.4 x86 (Lazarus: 0.9.30 FPC 2.4.2)
CPU-Target: x86
Wohnort: Cottbus

Re: TForm in TForm?

Beitrag von Teekeks »

Hi!
Das ganze ist auch eigentlich kein momentanes Problem von mir, doch ich hatte das schon einmal gesehen und mich halt gefragt ob das den mit Lazarus möglich ist...

pluto
Lazarusforum e. V.
Beiträge: 7192
Registriert: So 19. Nov 2006, 12:06
OS, Lazarus, FPC: Linux Mint 19.3
CPU-Target: AMD
Wohnort: Oldenburg(Oldenburg)

Re: TForm in TForm?

Beitrag von pluto »

Ich meine, dass mal am Anfang ausprobiert zu haben. Da hat es Einbandfrei geklappt. Da habe ich einfach nur das Parent vom From geändert. Da ja beide ein Kompatible Klasse als Vorfahren habe. Daher erstaunt es mich das es jetzt nicht mehr gehen soll.
MFG
Michael Springwald

Teekeks
Beiträge: 359
Registriert: Mi 27. Mai 2009, 20:54
OS, Lazarus, FPC: OpenSuse11.4 x86 (Lazarus: 0.9.30 FPC 2.4.2)
CPU-Target: x86
Wohnort: Cottbus

Re: TForm in TForm?

Beitrag von Teekeks »

Nun ja, es geht in gewisser weise.
Die Form ist zwar da, es wird aber nicht mehr der Rahmen angezeigt, egal was ich mache...

Antworten