我需要找到TScrollBox的整个大小(也称为“逻辑区域”)--与通过宽度和高度属性(或ClientWidth ClientHeight)获得的可见区域相反。
我想在TScrollBox中创建一些控件。其中一个(称为TViewer)需要与TScrollBox本身一样高。问题是,在创建过程中,TScrollBox会向下滚动以显示最后创建的控件。因此,使用Top=1将无法工作,因为我的控件将具有top=1,它不是逻辑区域的顶部。
德尔菲7
发布于 2011-07-19 15:40:18
在TScrollBox.
现在你总是有本源。“逻辑高度”现在是:
myScrollBox.Height + (myOriginControl.Top * -1);发布于 2010-12-16 22:30:58
看看滚动条:
ScrollBox1.VertScrollBar.Range
ScrollBox1.HorzScrollBar.Range如果滚动框逻辑区域不大于图形区域(在这种情况下,滚动条不可见),则可以小于高度和宽度。
或者用这个来获得两者的最大值:
var
AHeight, AWidth: Integer;
begin
AHeight := Max(ScrollBox1.VertScrollBar.Range, ScrollBox1.Height);
AWidth := Max(ScrollBox1.HorzScrollBar.Range, ScrollBox1.Width);
ShowMessageFmt('%d,%d', [AHeight, AWidth]);
end;编辑来自@的评论,我可以添加逻辑高度和/或宽度不是问题。如果要添加任何占用滚动条所有高度的控件,请使用上述计算中的AHeight,但将顶部设置为VertScrollBar.Position的负值,如下所示:
procedure TForm2.Button3Click(Sender: TObject);
var
AHeight, AWidth: Integer;
Btn: TButton;
begin
AHeight := Max(ScrollBox1.VertScrollBar.Range, Height);
AWidth := Max(ScrollBox1.HorzScrollBar.Range, Width);
Btn := TButton.Create(Self);
Btn.Parent := ScrollBox1;
Btn.Left := 15;
Btn.Top := -ScrollBox1.VertScrollBar.Position;
Btn.Height := AHeight;
end;发布于 2010-12-16 22:31:22
也许ScrollBox.HorzScrollBar.Range和ScrollBox.VertScrollBar.Range +相应的.Position是您所需要的。
https://stackoverflow.com/questions/4465898
复制相似问题