Dasselbe Projekt von oben nun mit einem Coolbar-Container. Mit diesen Einstellungen verhält sich die Coolbar einigermaßen zahm. Man kann
- in derselben Zeile die Reihenfolge ändern, indem man am Griff anfasst und über eine andere Toolbar oder den Freiraum rechts zieht. Den Cursor beachten: Überall wo der Drag-Cursor erscheint, kann man loslassen.
- eine Toolbar in eine andere Reihe ziehen
- eine neue Zeile für die aktuell gezogene Toolbar erzeugen, indem man ein paar Pixel aus der gesamten Coolbar nach unten zieht, aber nicht zu weit, so dass nicht der "Ablegen verboten"-Cursor erscheint. In diesem Fall müsste man loslassen und den Greifer neu anfassen.
- Toolbars sichtbar und unsichtbar schalten (mit den Checkboxes)
- die aktuelle Konfiguration in einer ini-Datei speichern und beim nächsten Start wieder restaurieren.
Erklärung:
Wenn man die Reihenfolge der Toolbars verändert, bleibt die Reihenfolge der Bands erhalten, also CoolBar.Bands[0] ist immer oben, Coolbar.Bands[1] unmittelbar darunter, usw, aber, je nachdem wieviel man herumgezogen hat, mit jeweils anderen Controls bestückt. Zur Unterscheidung, welche Control in welchem Band steckt, wird beim Erzeugen eine fortlaufende ID vergeben: Coolbar.Bands[0].ID = 0 für die erste Toolbar, die auf der Coolbar abgelegt wurde usw.
Die nächste Schlüsseleigenschaft ist Coolbar.Bands[ i ].Break. Wenn das auf true gesetzt ist, kommt das Band in eine neue Zeile.
Die Eigenschaft Coolbar.Bands[ i ].FixedSize ist immer auf true gesetzt - damit kann man die Länge der Bands nicht verändern. Das ist nicht zwingend notwenig, aber ich finde so ist Coolbar einfacher zu bedienen. Mit FixedSize=false ist der Punkt auf/hinter dem Greifer, der entscheidet, ob das Band gezogen oder die Länge des vorigen Bands verändert wird, ziemlich schwer zu treffen.
Und schließlich gibt es noch Coolbar.Bands[ i ].Visible. - Klar: damit kann man das band mit seinem Control sichtbar/unsichtbar schalten.
ID, Break und Visible werden in der Ini-Datei für alle Bands abgelegt. Beim Lesen der ini-Datei wird die Position der Bands in der Coolbar.Bands-Collection so verändert, dass jedes Control im richtigen Band sitzt. Danach werden Break und Visible gesetzt.
Docking wird in dem Beispiel nicht unterstützt (DragKind bleibt auf dgDrag).
[EDIT]
Hab' angefangen, den mickrigen wiki-Artikel zu erweitern:
https://wiki.freepascal.org/TCoolBar