![]() |
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 |
AW: problem mit manual dock
Hi,
ich vermute mal, du musst dir die Größe des ersten Forms merken. Frank |
AW: problem mit manual dock
das ist ja kein problem und dann?
ich kann nicht einfach width setzen |
AW: problem mit manual dock
Zitat:
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. |
AW: problem mit manual dock
Zitat:
DockPanel.DockManager.SaveToStream(AStream)? Frank |
AW: problem mit manual dock
@himitsu:
ich hatte tatsächlich die components durchsucht ;) jetzt habe ich es so:
Delphi-Quellcode:
self ist das hauptformular mit dem panel, testform1 & 2 sind die, die ans panel angedockt werden.
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'); 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... |
AW: problem mit manual dock
Zitat:
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 |
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 ^^ |
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'); |
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.
|
AW: problem mit manual dock
@himitsu:
nix :/ @bummi: wenn man die formulare an das panel andockt, hat der user später die möglichkeit, sie dort wieder abzudocken und wenn er mehrere monitore hat, kann er das ausgedockte form dann auf nen anderen monitor ziehen. das ist schon ziemlich praktisch. |
AW: problem mit manual dock
ich habe aufgegeben
ich habe auf das panel jetzt 2 weitere panels mit nem splitter dazwischen platziert und docke somit jedes form in sein eigenes panel damit auftretende probleme konnte ich über dieverse docking-events lösen, es scheint jetzt bugfrei zu funktionieren |
AW: problem mit manual dock
ich habe noch ein problem im zusammenhang mit dem hier
ich habe jetzt auf meinem ursprungspanel 2 weitere panels liegen. diese haben dragmode dmautomatic und eben die reingedokten formulare wenn ich jetzt ein formular aus dem panel abdocke, habe ich ein leeres panel auf dem ursprungspanel und jetzt kann ich dieses leere panel, was nie angedockt wurde, aus dem ursprungspanel ausdocken, aber nicht wieder andocken, weil das ursprungspanel ja docksite auf false sitzen hat der fehler ist also, dass ich das panel ausdocken kann... und das passiert nur, wenn dragmode auf dmautomatic steht, bei dmmanual passiert dasd nicht, dafür passiert anderer mist, d.h. dmautomatic muss bleiben ^^ aso, das event onundock des ursprungspanels wird bei diesem ausdocken nicht ausgelöst, vermutlich weil das panel nie angedockt wurde... sehr fies!!! ich habe es jetzt so "gelöst", dass ich in den events des nicht-urspungspanels ^^ den dragmode setze, also am ende von undock auf manual und zu beginn von dockdrop auf automatic ich bezweifel, dass das ne saubere lösung ist.. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 11:54 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