Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   Delphi Forms in Form ? Oder mehere Forms in PageControl (https://www.delphipraxis.net/25781-forms-form-oder-mehere-forms-pagecontrol.html)

DataCool 12. Jul 2004 13:06


Forms in Form ? Oder mehere Forms in PageControl
 
Hi Leute,

ich bin gerade dabei meinen Messanger etwas zu erweitern ! Im Moment laufen alle Chats in einem einzelnen Fenster ich möchte dem User aber die Entscheidungs möglichkeit geben :

1. Jedes Chat-Fenster in einem seperaten Fenster zu handeln
2. Alle aktiven Chat-Fenster in einem Chat-Fenster zu sammeln z.B. mit einen Tab oder Page Control.
3. Extrem genial wäre ein fließender Wechsel, zwischen den beiden Modi, damit meine ich :
Man hat die Chat-Fenstern gerade alle einzeln und zieht dann z.B. ein Chat-Window über das "Sammel-Fenster" und das nimmt sich dieses "Sammel-Fenster" diese Form als Child und es wird als Tab im SAmmel-Fenster dargestellt.

Also Punkt 1 hab ich schon realisiert, indem bei CreateParams folgendes eingefügt habe :

Code:
procedure TfrmChatWindow.CreateParams(var Params: TCreateParams);
begin
  inherited CreateParams(Params);
  // dafür sorgen das die Form auch sichtbar ist, wenn die Main-Form minimiert wird
  Params.ExStyle := Params.ExStyle or WS_EX_APPWINDOW;
  // dafür sorgen das, die Form trotz Borderstyle bsNone frei skalierbar ist
  Params.Style := (Params.Style or WS_THICKFRAME);
  Params.WndParent := GetDesktopWindow;
end;
Bei wie realisiere ich Nummer 2. ?
Kann ich Forms als Parent ein Panel oder irgentwas in der ARt geben ?

Hast jemand zu 3. ne Idde ?

Für jede Anregung würde ich mich freuen,
Danke im vorraus

TStringlist 12. Jul 2004 14:24

Re: Forms in Form ? Oder mehere Forms in PageControl
 
Hallo,

zu 2: Sollte gehen. Einfach die Parent-Property der Form entsprechend beladen mit z.B. PageControl1, Panel1 oder ListBox1 etc..

zu 3: Echte Child-Windows werden's dann zwar imo nicht mehr, aber diese Parent-Property einer Form lässt sich auch nachträglich beliebig 'umbeladen' ...und womit du z.B. deine jeweiligen Chat-Windows dann je nach Notwendigkeit in ein Sammelfenster hineinnehmen bzw. dann auch wieder hinausbefördern könntest.

alcaeus 12. Jul 2004 14:36

Re: Forms in Form ? Oder mehere Forms in PageControl
 
Ich kann zu Punkt 2 und 3 folgendes empfehlen:
Gib alle Komponenten des Chatfensters auf ein Panel. Brauchst du nun ein neues Chatfenster, so erstellst du zuerst ein Form, welches das Panel beinhaltet. Wird nun ein Chatfenster auf das Sammelfenster gezogen, so erstellst du ein neues TabSheet oder MDIChild, und gibst dem Panel das neu Erstellte Control als Parent und wirfst dann das alte (mittlerweile leere) Chatfenster weg.
Das Panel darf allerdings nicht automatisch vom Form des Chatfensters erstellt werden, da es sonst beim Freigeben des Chatfensters ebenfalls freigegeben wird.

Greetz
alcaeus

DataCool 12. Jul 2004 14:48

Re: Forms in Form ? Oder mehere Forms in PageControl
 
Hi,

danke erstmal euch beiden !
Also ich hab mittlerweile auch schon ausprobiert, einfach die Parent Property der Form auf ein Panel in der andern Form zu setzen und es funktioniert wunderbar.
Das brachte zuerst allerdings Probleme mit meiner CreateParams Methode, weil dort natürlich die ganzen "Einstellungen" s. oben nicht gesetzt werden dürfen.
Aber ich bin jetzt hingegangen und habe nachdem Create der Form mit der Tag Eigenschaft gearbeit!
Tag = 0 = seperates Fenster
Tag = 1 = Fenster im "Sammel-Fenster"

und da das CreateParams anscheinend erneut aufgerufen wird, wenn ich das Parent der Form setze funktioniert das wunderbar.

Damit habe ich allerdings noch keine Lösung zu meinem Punkt 3., aber das was Du vorschlägst alcaeus hört sich noch eleganter an.

Die Frage ist nur :
Wie erstele ich ein seperates Panel ohne Form ? Oder soll ich mir ne Dummy Form bastel wo das Panel drauf sitzt, diese Dummy-Form wird aber nie erzeugt und dann wenn ich das Panel benötige rufe ich einfach :

Code:
Var myPanel : TPanel;
begin
  myPanel := TDummyForm.ChatPanel.Create(SammelForm);
  myPanel.Parent := Entweder SingleForm oder Panel der SAmmelForm ;
  myPanel.visible := true;
end;
Mir eben eine TChatPanel-Klasse zu schreiben und die dynamisch erzeugen geht eigentlich nicht, weil auf dem Panel diverse Bitmaps und ImageLists sind, die ich nicht nachher aus Files laden möchte.

Also was tun ?

alcaeus 12. Jul 2004 14:52

Re: Forms in Form ? Oder mehere Forms in PageControl
 
Am besten ist, wenn du das Sammelfenster zum Verwalten der Frames verwendest. Anschließend brauchst du ja nur noch im Sammelfenster ein neues Form erstellen, dann ein neues Frame, dem Frame evtl. die Positionsangaben innerhalb des Forms mitteilen und das Parent auf das Form setzen.
Beim zurückschieben ins Sammelfenster brauchst du dann nur noch das Parent des Panels neu setzen und das Form freigeben.
Also in der Theorie hört sich das nicht schlecht an, inwiefern du dies in deiner Anwendung realisieren kannst (die TParams) weiß ich nicht...

Greetz
alcaeus

DataCool 12. Jul 2004 14:55

Re: Forms in Form ? Oder mehere Forms in PageControl
 
Also Du meinst, ich soll meinen ganzen "Chat-Kram" auf einen TFrame setzen ?

Den Rest mit dem Params habe ich schon gelöst.

alcaeus 12. Jul 2004 14:58

Re: Forms in Form ? Oder mehere Forms in PageControl
 
Genau. Damit bist du nicht an ein Form gebunden, sondern an ein Frame, welches du auf Panels, TabSheets etc. drauflegen kannst.

Greetz
alcaeus

DataCool 12. Jul 2004 15:00

Re: Forms in Form ? Oder mehere Forms in PageControl
 
Ok, werd das dann gleich mal umsetzen :wink:

Mit den Frames hatte ich bis jetzt noch nicht gearbeitet, brauchte ich noch nie :mrgreen:

Vielen Dank,

werde nachher Erfolg oder Misserfolgsmeldung geben :roll:

Robert_G 12. Jul 2004 15:42

Re: Forms in Form ? Oder mehere Forms in PageControl
 
Ich verwende dafür zum Bleistift das hier.

Falls du irgendwann über .Net stolpern solltest, wirst du die MagicLibrary lieben lernen. ;)


Alle Zeitangaben in WEZ +1. Es ist jetzt 18:33 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