在表单上,我有两个大型控件,并且TSplitter
它们之间有一个。顶部的控件与顶部对齐,底部的控件与客户端对齐。因此,当我调整窗体的大小时,顶部的控件保持相同的高度,而底部的控件却变化。然后,它们之间的拆分器实际上控制了顶部控件的高度。
但是,将窗体调整为小于顶部控件的高度时,底部控件将变为隐藏状态。我尝试使用约束条件来调整其反应,但是没有运气...
MinHeight
约束设置为例如100时,调整拆分器的大小时,它将使窗体实际增长以适合底部控件,而不是阻止用户进一步调整大小。MinSize
属性设置为例如100时,调整分割器的大小时,我会得到非常异常的结果(顶部控件消失),并且仍然隐藏了底部控件。如何确定拆分器或表单的大小在不更改表单大小的情况下始终显示底部控件?
DFM代码:
object Form1: TForm1
Left = 310
Top = 121
Caption = 'Form1'
ClientHeight = 374
ClientWidth = 434
Color = clBtnFace
Font.Charset = DEFAULT_CHARSET
Font.Color = clWindowText
Font.Height = -11
Font.Name = 'Tahoma'
Font.Style = []
OldCreateOrder = False
PixelsPerInch = 96
TextHeight = 13
object Splitter1: TSplitter
Left = 0
Top = 129
Width = 434
Height = 7
Cursor = crVSplit
Align = alTop
Beveled = True
end
object Panel1: TPanel
Left = 0
Top = 0
Width = 434
Height = 129
Align = alTop
Caption = 'Panel1'
TabOrder = 0
ExplicitLeft = 48
ExplicitTop = 16
ExplicitWidth = 313
end
object Panel2: TPanel
Left = 0
Top = 136
Width = 434
Height = 238
Align = alClient
Caption = 'Panel2'
TabOrder = 1
ExplicitLeft = 16
ExplicitTop = 168
ExplicitWidth = 369
ExplicitHeight = 145
end
end
调整拆分器的大小时,不允许用户将拆分器向下拖动到底部控件的最小高度以下
为OnCanResize
分离器添加一个处理程序,以防止将其向下拖动到预定义的高度以下:
procedure TForm1.Splitter1CanResize(Sender: TObject; var NewSize: Integer;
var Accept: Boolean);
begin
Accept := NewSize <=
ClientHeight - (100 + Splitter1.Height);
end;
(100是预定义的高度,请用常量/属性替换它们...)
当窗体的大小调整为小于底部控件的大小时,它应自动调整顶部控件的高度,以使底部控件适合
首先,最好对表单进行约束,以使所有控件始终具有正高度。否则,您可能会遇到对齐竞争的问题:panel1和splitter1在顶部对齐:
procedure TForm1.FormCreate(Sender: TObject);
begin
Constraints.MinHeight := Height - ClientHeight + 100 + Splitter1.Height + 1;
end;
其次,您可以检查表单调整大小是否会导致底部面板的调整大小小于应有的大小,并采取纠正措施:
procedure TForm1.FormResize(Sender: TObject);
begin
if Panel2.Height < 100 then
Panel1.Height := ClientHeight - (100 + Splitter1.Height);
end;
当我将底部控件的MinHeight约束设置为例如100时,调整拆分器的大小时,它将使窗体实际增长以适合底部控件,而不是阻止用户进一步调整大小。
不要使用底部面板的约束。
当我将拆分器的MinSize属性设置为例如100时,调整拆分器的大小时,我会得到非常异常的结果(顶部控件消失),并且仍然隐藏了底部控件。
不要使用splitter的MinSize
。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句