Delphi 设置Panel1.Constraints.MinHeight时,TSplitter移动时不需要的表单大小会增加

Delphi 设置Panel1.Constraints.MinHeight时,TSplitter移动时不需要的表单大小会增加,delphi,height,splitter,tform,Delphi,Height,Splitter,Tform,我有这种情况(见图),现在当我在运行时向上移动Splitter1时,Panel2高度会增加,而Form1高度也会增加 但我需要知道并阻止这种类型的事件,因为Splitter1由于Panel1.约束而无法向上移动。已达到最小高度,因此Panel2不能更改其高度,也不能更改Form1 谢谢你的帮助 --编辑-- 面板1.对齐:=alLeft Splitter1.Align:=alBottom 面板2.对齐:=alBottom 将拆分器AutoSnap属性设置为false,将其MinSize属性设置

我有这种情况(见图),现在当我在运行时向上移动
Splitter1
时,
Panel2
高度会增加,而
Form1
高度也会增加

但我需要知道并阻止这种类型的事件,因为
Splitter1
由于
Panel1.约束而无法向上移动。已达到最小高度,因此
Panel2
不能更改其高度,也不能更改
Form1

谢谢你的帮助

--编辑--
面板1.对齐
:=alLeft
Splitter1.Align
:=alBottom

面板2.对齐
:=alBottom

将拆分器AutoSnap属性设置为false,将其MinSize属性设置为Panel1的MinHeight。

您可以在拆分器的
CanResize
事件中检查并拒绝进一步调整大小

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

谢谢,这对我很有用。最简单的解决方案是最好的。我将
AutoSnap
设置为False,并将
ResizeStyle
设置为rsUpdate。很抱歉直到现在才提到这一点。那么您似乎没有将拆分器的最小尺寸设置为Panel1的最小高度。没有这一点,我的解决方案就行不通。无论如何,Sertac展示了另一种有效的方法。不,我没有错过
Splitter1.MinSize
属性。它被设置为84,这将是向下移动
Splitter1
Panel2
的最小大小。诀窍是将其设置为Panel1的最小高度(即200)。这可能不是我们想要的,但它是TSplitter实现中奇怪bug/特性的一个解决方法。Tspliter.MinSize两端均已检查。Sertacs解决方案更灵活。@uwerabe-我发现它也更可靠:),因为如果更改面板的约束,则必须记住还要更新拆分器的MinSize属性。(嘿!我的Firefox拼写检查器说“splitter”不是一个有效的英语单词!)