AGB  ·  Datenschutz  ·  Impressum  







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

problem mit manual dock

Ein Thema von hyype · begonnen am 17. Okt 2011 · letzter Beitrag vom 28. Okt 2011
Antwort Antwort
Seite 1 von 2  1 2      
hyype

Registriert seit: 5. Nov 2008
97 Beiträge
 
Delphi XE2 Professional
 
#1

problem mit manual dock

  Alt 17. Okt 2011, 09:12
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
  Mit Zitat antworten Zitat
Benutzerbild von dataspider
dataspider

Registriert seit: 9. Nov 2003
Ort: 04539 Groitzsch
1.351 Beiträge
 
Delphi 11 Alexandria
 
#2

AW: problem mit manual dock

  Alt 17. Okt 2011, 10:03
Hi,

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

Frank
Frank Reim
  Mit Zitat antworten Zitat
hyype

Registriert seit: 5. Nov 2008
97 Beiträge
 
Delphi XE2 Professional
 
#3

AW: problem mit manual dock

  Alt 17. Okt 2011, 10:09
das ist ja kein problem und dann?
ich kann nicht einfach width setzen
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.033 Beiträge
 
Delphi 12 Athens
 
#4

AW: problem mit manual dock

  Alt 17. Okt 2011, 10:36
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.
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat
Benutzerbild von dataspider
dataspider

Registriert seit: 9. Nov 2003
Ort: 04539 Groitzsch
1.351 Beiträge
 
Delphi 11 Alexandria
 
#5

AW: problem mit manual dock

  Alt 17. Okt 2011, 11:17
das ist ja kein problem und dann?
ich kann nicht einfach width setzen
Sorry, war Quatsch

DockPanel.DockManager.SaveToStream(AStream)?

Frank
Frank Reim
  Mit Zitat antworten Zitat
hyype

Registriert seit: 5. Nov 2008
97 Beiträge
 
Delphi XE2 Professional
 
#6

AW: problem mit manual dock

  Alt 17. Okt 2011, 12:11
@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...

Geändert von hyype (17. Okt 2011 um 12:42 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von dataspider
dataspider

Registriert seit: 9. Nov 2003
Ort: 04539 Groitzsch
1.351 Beiträge
 
Delphi 11 Alexandria
 
#7

AW: problem mit manual dock

  Alt 17. Okt 2011, 13:07
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
Frank Reim
  Mit Zitat antworten Zitat
hyype

Registriert seit: 5. Nov 2008
97 Beiträge
 
Delphi XE2 Professional
 
#8

AW: problem mit manual dock

  Alt 17. Okt 2011, 14:33
ich probiers jetzt mit nem splitter und 2 panels auf meinem eigentlichen panel...
wie ich panel-in-panel-konstrukte liebe ^^
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.033 Beiträge
 
Delphi 12 Athens
 
#9

AW: problem mit manual dock

  Alt 17. Okt 2011, 14:50
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');
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat
Benutzerbild von Bummi
Bummi

Registriert seit: 15. Jun 2010
Ort: Augsburg Bayern Süddeutschland
3.470 Beiträge
 
Delphi XE3 Enterprise
 
#10

AW: problem mit manual dock

  Alt 17. Okt 2011, 16:13
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.
Thomas Wassermann H₂♂
Das Problem steckt meistens zwischen den Ohren
DRY DRY KISS
H₂ (wenn bei meinen Snipplets nichts anderes angegeben ist Lizenz: WTFPL)
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


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 00:15 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