- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我遇到了一个小问题。我动态生成一些控件并将它们放置在 TScrollbox
组件上。但我注意到,如果滚动框可见,用户可以清楚地看到正在创建和放置的每个控件。所以看起来很多工作正在完成,而且进展缓慢。
我隐藏了滚动框并在其上生成了所有控件,这花费了更少的时间并且没有闪烁等。但问题就在这里。当我再次显示滚动框时,直到我实际调整表单大小后,它的滚动条才会出现。 (滚动框的对齐方式为alClient
)
关于如何解决这个问题有什么想法吗?
尝试重新绘制,但没有成功。刷新也不起作用。
谢谢
编辑:
TScrollBox(Form1.FindComponent('termai')).Visible:= false;
for I := 0 to mazgas.GrafasPagalVarda(sActiveGrafas).Termai.Count - 1 do
begin
fNaujasTermas(i,oHook);
end;
TScrollBox(Form1.FindComponent('termai')).Visible := true;
上面的代码显示了我如何隐藏和显示滚动框。fNaujasTermas
生成一个带有多个轨迹栏、图像和编辑的面板。
我不确定可能有什么逐步解释。只需创建一个程序,它将生成一些带有许多控件的面板,并将 ScrollBox 设置为父级。在生成任何内容之前隐藏滚动框,并在完成所有操作后取消隐藏它。
哦,顺便说一句,面板已对齐 alTop
。因此,每次创建新面板并将其放入滚动框中时,它都会出现在顶部,而所有其他面板都会向下移动。
这就是我创建滚动框本身的方式
pTermai := TScrollBox.Create(Self);
pTermai.Parent := pLeft;
pTermai.Align := alClient;
pTermai.Name := 'termai';
pTermai.BorderStyle := bsNone;
pTermai.VertScrollBar.Increment := 40;
EDIT2:我想我知道如何重现这个。
看来,当向滚动框中添加新面板时,它不会将其计入该滚动框中已存在的所有控件的总高度中。
举个例子。假设 1 个面板的高度为 200px。
ScrollBox 高度为 300px。
因此,在创建 2 个面板(总高度为 400px)后,滚动框不会显示滚动条,即使第二个面板的一半不可见。如果我再添加一个面板 = 总共 600 像素,滚动框将显示滚动条,看起来它只会滚动每 2 个面板,而不是 3 个。当尝试滚动此类窗口时,值会重新计算,并且所有内容都会很好地显示。
所以主要问题是,如何让滚动框“及时”显示滚动条,这样就不会出现面板被半切的情况?
最佳答案
您可以通过调用从 TWinControl
继承的 Realign()
方法来请求滚动框重新计算其滚动条属性。为了最大限度地减少闪烁,您应该在它仍然不可见时执行此操作,如下所示:
ScrollBox.Visible := False;
try
// create your new panel ...
finally
ScrollBox.Realign;
ScrollBox.Visible := True;
end;
关于delphi - 如何在 TScrollBox 再次可见后显示滚动条?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2662974/
我正在尝试创建一个具有平坦边框的 TScrollBox,而不是丑陋的“Ctl3D”边框。 这是我尝试过的,但边框不可见: type TScrollBox = class(Forms.TScroll
我在 TScrollBox 上放置了各种框架。滚动时,它们正在正确滚动。现在我想添加一个保持在固定位置的位图。我尝试了一个与 TScrollBox 具有相同父级(TPanel)的 TImage。即使使
我遇到了一个小问题。我动态生成一些控件并将它们放置在 TScrollbox 组件上。但我注意到,如果滚动框可见,用户可以清楚地看到正在创建和放置的每个控件。所以看起来很多工作正在完成,而且进展缓慢。
我想生成 TScrollBox 全部内容的图像。就像截图一样。即使所有内容不在可见屏幕区域内。 最佳答案 每个 TControl 后代都有一个 Perform 方法,您可以使用它来使其执行,就好像它正
我创建了一个派生自 TScrollbox 的自定义滚动框,它的工作原理相同,只是当在客户区域中拖动滚动条之外时它会滚动。 我现在的问题是,当鼠标位于 CustomScrollbox 内的按钮或面板上时
我有一个带有 TScrollBox (Align := alClient) 的简单的相当大的表单,并在 TScrollBox 上放置了一些控件。如果用户更改表单大小,TScrollBox 将显示和隐藏
这似乎是一个非常简单的问题,但我无法让滚动框显示滚动条,这让我发疯。 情况是这样的。我需要在表单的一部分中显示可变数量的帧。显示这些框架的区域可以通过 TSplitter 或通过调整表单大小来调整大小
我创建了一个 TScrollBox。我已经在按钮单击时动态添加了标签和编辑框。为了设置组件的位置,我使用了组件的高度、宽度、左侧、顶部属性。但是当添加 5 个组件后滚动条出现在屏幕上时,下一个组件的位
我创建了一个在 Canvas 上具有油漆覆盖的组件,我想设置最小宽度和高度的限制。当宽度或高度小于限制时,滚动条应该出现在侧面,就像滚动框一样,也可以滚动。 我选择 TCustomControl 是因
我正在尝试做简单的事情:在 TScrollBox 后代上添加 Canvas 属性。我已阅读this article 但我的 ScrollBox 后代根本无法在 Canvas 上绘制。有人可以告诉我,出
我正在制作一个从 TScrollBox 派生的自定义组件,它显示存储在字符串属性中的图像文件的缩略图。它工作得很好,直到滚动框在运行时调整大小。我尝试重写 Risize 方法,但是当我在运行时向组件添
我在线发布了此内容:Show form from DLL in TScrollBox 我想做的是在 Delphi TScrollBox 中调用并显示一个表单。不像 Show 或 ShowModal 示
我需要找到 TScrollBox 的整个大小(也称为“逻辑区域”) - 与通过 Width 和 Height 属性(或 ClientWidth ClientHeight)获得的可见区域相反。 我想在
我有一个 TScrollBox,它的 RichEdit 比滚动框大,因此两侧滚动条都出现在滚动框中。然后我有一个调用 RichEdit.SetFocus 的函数 DoTask。 当我向下滚动到想要查看
我正在使用父 FMX.Layouts.TScrollBox 来缩放和平移子 TLayout。一旦 TLayout 大于 TScrollBox,就可以进行平移。 我想要 TScrollBox 的(左上角
我正在使用 TImage 控件制作一个基于 TScrollingWinControl(以及从 TScrollBox 复制的代码)的简单控件。我在某种程度上可以进行缩放,但它不一定会缩放到焦点 - 滚动
我是一名优秀的程序员,十分优秀!