首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何找到TScrollBox的实际大小(“逻辑区域”)

如何找到TScrollBox的实际大小(“逻辑区域”)
EN

Stack Overflow用户
提问于 2010-12-16 22:17:20
回答 6查看 7.4K关注 0票数 5

我需要找到TScrollBox的整个大小(也称为“逻辑区域”)--与通过宽度和高度属性(或ClientWidth ClientHeight)获得的可见区域相反。

我想在TScrollBox中创建一些控件。其中一个(称为TViewer)需要与TScrollBox本身一样高。问题是,在创建过程中,TScrollBox会向下滚动以显示最后创建的控件。因此,使用Top=1将无法工作,因为我的控件将具有top=1,它不是逻辑区域的顶部。

德尔菲7

EN

回答 6

Stack Overflow用户

回答已采纳

发布于 2011-07-19 15:40:18

在TScrollBox.

  • Set (组件的左属性和顶部属性)中,
  1. 将组件(如TLabel )删除为0。
  2. 将组件的可见属性设置为False。

现在你总是有本源。“逻辑高度”现在是:

代码语言:javascript
复制
myScrollBox.Height + (myOriginControl.Top * -1);
票数 2
EN

Stack Overflow用户

发布于 2010-12-16 22:30:58

看看滚动条:

代码语言:javascript
复制
ScrollBox1.VertScrollBar.Range
ScrollBox1.HorzScrollBar.Range

如果滚动框逻辑区域不大于图形区域(在这种情况下,滚动条不可见),则可以小于高度和宽度。

或者用这个来获得两者的最大值:

代码语言:javascript
复制
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的负值,如下所示:

代码语言:javascript
复制
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;
票数 2
EN

Stack Overflow用户

发布于 2010-12-16 22:31:22

也许ScrollBox.HorzScrollBar.RangeScrollBox.VertScrollBar.Range +相应的.Position是您所需要的。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4465898

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档