加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

【Delphi】FMX 如何设置 TVertScrollBox的滚动位置,使其回到顶

发布时间:2020-12-15 09:54:40 所属栏目:大数据 来源:网络整理
导读:? ? ? ?在手机APP开发中, 纵向的滚动框非常实用,可以说是必不可少的控件,而当我们使用TVertScrollBox控件时,发现除了控件内部封装好的自动化的触控滚动,还有一个方法ScrollBy可以调整滚动条位置,但实际中我们发现,ScrollBy是一个增量滚动的方法,即Sc

? ? ? ?在手机APP开发中, 纵向的滚动框非常实用,可以说是必不可少的控件,而当我们使用TVertScrollBox控件时,发现除了控件内部封装好的自动化的触控滚动,还有一个方法ScrollBy可以调整滚动条位置,但实际中我们发现,ScrollBy是一个增量滚动的方法,即ScrollBy(0,10)代表向上滚动10个像素,FMX中的像素点并不是屏幕的硬件像素点,而是FMX内部的逻辑像素点,通过ScrollBy方法内部源码也可以知道,若需要滚动到具体位置,需要设置VScrollBar.Value,如若需要让滚动框回到顶点,可设置VScrollBar.Value:=0;? 但有点奇怪,经过TVertScrollBox的封装,VScrollBar子控件属性已无法直接访问。

? ? ? ?综上,我们若需要通过代码设置滚动框的滚动位置,可直接使用TScrollBox,如果非要使用TVertScrollBox,也有以下方法来设置,利用class的protected的访问特点:

type
  TScrollBoxPatch = class(TVertScrollBox);
procedure TfmMain.btnSetVScrollPosClick(Sender: TObject);
begin
  TScrollBoxPatch(loScrollBox).VScrollBar.Value := 0;
end;

? ? 上面技巧可应用于在不同单元需要访问protected方法或属性的类,解决无法调用“因控件封装时一些没有暴露的方法”的问题。

? ? 原理上是因为经过?TScrollBoxPatch = class(TVertScrollBox)定义之后,TScrollBoxPatch 和?TVertScrollBox在内存结构上是没有区别的,而由于TScrollBoxPatch在当前单元定义,所以当前单元也具有访问TScrollBoxPatch及其父类的protected定义段的方法或属性的权限,因此,TScrollBoxPatch.VScrollBar即等同于使用TVertScrollBox的父类TCustomScollBar.VScrollBar。

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读