Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   problem mit manual dock (https://www.delphipraxis.net/163799-problem-mit-manual-dock.html)

hyype 17. Okt 2011 08:12

problem mit manual dock
 
Hallo community!

Ich habe folgendes Problem, welches ich leider nicht selbst gelöst kriege:
Ich habe 2 Formulare, die beide an das gleiche Panel angedockt werden sollen.
Wenn ich das erste per ManualDock andocke, geht es über die volle Breite des Panels.
Docke ich das 2. an, teilen sich beide die Breite des Panels genau 50:50.
Dabei entsteht ein Splitter zwischen beiden, der es ermöglicht, das eine Form breiter zu ziehen, wodurch das 2. schmaler wird. Dieser Zustand soll dann abgespeichert und wiederhergestellt werden können.
Also wenn das Panel beispielsweise 1000 breit ist, sollen nicht beide Formulare je 500 haben, sondern von mir aus eins 700 und das andere 300. Mit LRDockWidth und TBDockHeight habe ich das nicht hinbekommen. Auch kann ich den Splitter, der automatisch entsteht, wenn ich das 2. Form angedockt habe, nicht finden, um seine position zu verändern, er liegt nicht auf dem Panel..
Hat irgendjemand eine Idee, wie ich das gewünschte Ergebnis bekomme?

Benutze Turbo Delphi 2006.

Vielen Dank schonmal!

MfG

hyype

dataspider 17. Okt 2011 09:03

AW: problem mit manual dock
 
Hi,

ich vermute mal, du musst dir die Größe des ersten Forms merken.

Frank

hyype 17. Okt 2011 09:09

AW: problem mit manual dock
 
das ist ja kein problem und dann?
ich kann nicht einfach width setzen

himitsu 17. Okt 2011 09:36

AW: problem mit manual dock
 
Zitat:

er liegt nicht auf dem Panel.
Doch, er muß genau dort liegen, also auf der selben ebene, wie die Formulare.


Wie suchst du denn den Splitter?
FindComponent und Co suchen im angegebenen Owner nach den ihnen gehörenden Komponenten.
Du mußt aber nicht über den Owner (TComponent.Components), sondern über den Parent (TComponent.Controls) suchen.

dataspider 17. Okt 2011 10:17

AW: problem mit manual dock
 
Zitat:

Zitat von hyype (Beitrag 1130802)
das ist ja kein problem und dann?
ich kann nicht einfach width setzen

Sorry, war Quatsch

DockPanel.DockManager.SaveToStream(AStream)?

Frank

hyype 17. Okt 2011 11:11

AW: problem mit manual dock
 
@himitsu:
ich hatte tatsächlich die components durchsucht ;)
jetzt habe ich es so:
Delphi-Quellcode:
  for i := 0 to self.ControlCount - 1 do
    if self.Controls[i] is TSplitter then
      showmessage('1');
  for i := 0 to self.componentcount - 1 do
    if self.components[i] is TSplitter then
      showmessage('2');
  for i := 0 to panel1.controlcount - 1 do
    if panel1.Controls[i] is TSplitter then
      showmessage('3');
  for i := 0 to panel1.componentcount - 1 do
    if panel1.components[i] is TSplitter then
      showmessage('4');
  for i := 0 to testform1.ControlCount - 1 do
    if testform1.Controls[i] is TSplitter then
      showmessage('5');
  for i := 0 to testform1.componentcount - 1 do
    if testform1.components[i] is TSplitter then
      showmessage('6');
  for i := 0 to testform2.controlcount - 1 do
    if testform2.Controls[i] is TSplitter then
      showmessage('7');
  for i := 0 to testform2.componentcount - 1 do
    if testform2.components[i] is TSplitter then
      showmessage('8');
self ist das hauptformular mit dem panel, testform1 & 2 sind die, die ans panel angedockt werden.
ich bekomme keine ausgabe.. aber das teil, was da zwischen den formularen entsteht, verhält sich genau wie ein tsplitter..
edit: habe jetzt mal von allen controls/components den classname ausgeben lassen - da liegt nichts, was ich nicht hingelegt habe...

@dataspider:
du meinst, ich solle die aktuelle konfiguration per savetostream in nen stream packen und dann wieder aus dem stream rausladen? hmm..
ich hätte halt gedacht, dass es doch irgendwie per code möglich sein müsste, das ganze so einzustellen, als würde ich als user den splitter ziehen...

dataspider 17. Okt 2011 12:07

AW: problem mit manual dock
 
Zitat:

Zitat von hyype (Beitrag 1130824)
du meinst, ich solle die aktuelle konfiguration per savetostream in nen stream packen und dann wieder aus dem stream rausladen? hmm..
ich hätte halt gedacht, dass es doch irgendwie per code möglich sein müsste, das ganze so einzustellen, als würde ich als user den splitter ziehen...

Ich muß gestehen, dass sich mir die Zusammenhänge auch nicht ganz erschließen.
Laut Hilfe sollte LRDockWidth eigentlich hilfreich sein, ist es aber nicht.

Wahrscheinlich läuft alles über den DockManager bzw. den DockTree.
Ein Splitter wird auch nicht erstellt.

Ich wüßte jetzt keine andere Lösung.

Frank

hyype 17. Okt 2011 13:33

AW: problem mit manual dock
 
ich probiers jetzt mit nem splitter und 2 panels auf meinem eigentlichen panel...
wie ich panel-in-panel-konstrukte liebe ^^

himitsu 17. Okt 2011 13:50

AW: problem mit manual dock
 
Und was sagt Folgendes?
Delphi-Quellcode:
for i := 0 to TestForm1.Parent.ControlCount - 1 do
  if TestForm1.Parent.Controls[i] is TSplitter then
    ShowMessage('9');

Bummi 17. Okt 2011 15:13

AW: problem mit manual dock
 
Mein Ansatz wäre auf ManualDock zu verzichten, den Forms das Panel als Parent zuzuweisen, die Alignments zu setzen, gegf. einen Splitter manuell dazwischen zu erzeugen, dann kanst Du die Brieten setzen wie Du lustig bist. Diese "Dockdasformauf einem Parent" verwenden wir üblicherweise in einem überschriebenen Konstruktor unserer Formtemplates, der Aufruf wird hierdurch auf eine Minimum an Code eingedampft.


Alle Zeitangaben in WEZ +1. Es ist jetzt 04:22 Uhr.
Seite 1 von 2  1 2      

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