2013-11-01 10 views
6

Ich habe diese Art von Situation (siehe Bild), jetzt, wenn ich Splitter1 in Laufzeit verschieben, Panel2 Höhe wächst und auch Form1 Höhe wächst.Unerwünschte Formulargröße wächst auf TSplitter bewegen, wenn Panel1.Constraints.MinHeight gesetzt ist

Aber ich brauche diese Art von Ereignis kennen und blockieren, wenn Splitter1 kann nicht wegen Panel1.Constraints.MinHeight bewegt werden bis erreicht ist, so Panel2 nicht geändert werden kann davon Höhe ist und Form1 auch.

Danke für jede Hilfe.

preview

- bearbeiten-
Panel1.Align: = alLeft;
Splitter1.Align: = alBottom;
Panel2.Align: = alBottom;

Antwort

6

Sie können die weitere Dimensionierung im Ereignis CanResize des Splitter überprüfen und ablehnen.

procedure TForm1.Splitter1CanResize(Sender: TObject; var NewSize: Integer; 
    var Accept: Boolean); 
begin 
    Accept := ClientHeight - (NewSize + Splitter1.Height) >= Panel1.Constraints.MinHeight; 
end; 
+0

Danke, das funktioniert super für mich. Die einfachste Lösung ist die beste. – NevTon

+0

@NevTon, gern geschehen! –

1

Setzen Sie die Splitter-AutoSnap-Eigenschaft auf false und ihre MinSize-Eigenschaft auf die MinHeight von Panel1.

+0

Ich habe 'AutoSnap' auf False gesetzt und' ResizeStyle' auf rsUpdate gesetzt. Es tut mir leid, dass ich das bisher nicht erwähnt habe. – NevTon

+0

Dann scheinen Sie es versäumt zu haben, die MinSize des Splitters auf die MinHeight von Panel1 zu setzen. Ohne das wird meine Lösung nicht funktionieren. Wie auch immer, Sertac zeigte einen anderen gültigen Ansatz. –

+0

Nein, ich vermisse die 'Splitter1.MinSize' Eigenschaft nicht. Es ist auf 84 gesetzt, das ist die minimale Größe von 'Panel2' wenn' Splitter1' nach unten bewegt wird. – NevTon