Ich habe auf einer Form 2 Panels mit einem Splitter dazwischen um die Größe der Panels ändern zu können.
Das funktioniert auch wunderbar so. Sobald man aber die Eigenschaft Constraints.MinWidth eines Panels setzt, kommt es zu einem merkwürdigen Verhalten:
Sobald man die Größe der Form ändert, schiebt sich das eine Panel (mit alRight) über das andere Panel (mit alClient). Dabei sollte stattdessen das Panel bei erreichen seiner MinWidth stehen bleiben, so wie es auch ist, wenn man bei unveränderter Form-Größe den Splitter verschiebt.
Zur Demonstration habe ich ein Beispiel-Projekt angehängt. Man sieht das Problem sofort wenn man die Größe der Form verkleinert.
Die Eigenschaften sind:
Panel1: Align=alClient
Panel2: Align=alRight
Splitter: Align=alRight zwischen den Panels
Was mache ich hier falsch? Muss man noch eine weitere Eigenschaft setzen, damit es funktioniert?
Ich habe auch probiert über den Anchor-Editor den Splitter an das Panel zu heften, aber das führt zu dem selben Verhalten.
Splitter zwischen Panels mit MinWidth
-
LazProgger
- Beiträge: 63
- Registriert: Di 11. Mär 2014, 00:33
Splitter zwischen Panels mit MinWidth
- Dateianhänge
-
project1.zip- (126.15 KiB) 85-mal heruntergeladen
Re: Splitter zwischen Panels mit MinWidth
Ich finde mit Aligns zu arbeiten etwas sperriger, als mit Anchors, da man bestimmte Verhalten dort besser steuern kann. Anbei mal eine Möglichkeit, wie es gehen könnte. Etwas Code musste ich allerdings schon schreiben. Möglicherweise geht es noch eleganter???
Code (Ausrichtung der Controls per Anchors):
Code (Ausrichtung der Controls per Anchors):
Code: Alles auswählen
procedure TForm1.FormResize(Sender: TObject);
begin
Splitter1.Left := Panel1.Width;
end; - Dateianhänge
-
SplitterTest.zip- (1.99 KiB) 100-mal heruntergeladen
Code: Alles auswählen
type
TLiveSelection = (lsMoney, lsChilds, lsTime);
TLive = Array[0..1] of TLiveSelection; Re: Splitter zwischen Panels mit MinWidth
Dazu habe ich vor einiger Zeit einen Bugreport geschrieben (http://bugs.freepascal.org/view.php?id=25558). Leider hat sich noch niemand der Sache angenommen, und auch eigene Untersuchungen sind im Sande verlaufen...LazProgger hat geschrieben:Ich habe auf einer Form 2 Panels mit einem Splitter dazwischen um die Größe der Panels ändern zu können.
Das funktioniert auch wunderbar so. Sobald man aber die Eigenschaft Constraints.MinWidth eines Panels setzt, kommt es zu einem merkwürdigen Verhalten:
Sobald man die Größe der Form ändert, schiebt sich das eine Panel (mit alRight) über das andere Panel (mit alClient). Dabei sollte stattdessen das Panel bei erreichen seiner MinWidth stehen bleiben, so wie es auch ist, wenn man bei unveränderter Form-Größe den Splitter verschiebt.
Zur Demonstration habe ich ein Beispiel-Projekt angehängt. Man sieht das Problem sofort wenn man die Größe der Form verkleinert.
Die Eigenschaften sind:
Panel1: Align=alClient
Panel2: Align=alRight
Splitter: Align=alRight zwischen den Panels
Was mache ich hier falsch? Muss man noch eine weitere Eigenschaft setzen, damit es funktioniert?
Ich habe auch probiert über den Anchor-Editor den Splitter an das Panel zu heften, aber das führt zu dem selben Verhalten.
-
LazProgger
- Beiträge: 63
- Registriert: Di 11. Mär 2014, 00:33
Re: Splitter zwischen Panels mit MinWidth
Danke für den Hinweis mit dem Bug-Report und Danke für das Beispiel-Projekt.
Das Beispiel-Projekt funktioniert so auf jeden Fall
Auch wenn das blöd ist, dass es eigentlich auch ohne den Zusatz-Code funktionieren sollte...
Wollen wir mal hoffen dass das irgendwann gelöst wird...
Das Beispiel-Projekt funktioniert so auf jeden Fall
Wollen wir mal hoffen dass das irgendwann gelöst wird...