【发布时间】:2016-05-09 22:43:56
【问题描述】:
我的表单上有一个 TScrollbox。放置在 Scrollbox 上的是一个 TLayout,它比设备视口更宽更高,因此水平和垂直滚动条会显示出来,并且用户可以手动移动布局。
我还有一个手势设置,以便用户可以长按滚动框并将布局返回原点 (0,0)。
procedure TfrmMain.ScrollBox1Gesture(Sender: TObject;
const EventInfo: TGestureEventInfo; var Handled: Boolean);
begin
if EventInfo.GestureID = System.UITypes.igiLongTap then
begin
ScrollBox1.ViewportPosition := PointF(0, 0);
ScrollBox1.RealignContent;
end;
现在这很好用,但它发生得相当快。我想也许我可以使用:
TAnimator.AnimateFloat(Scrollbox1, 'ScrollBox1.ViewportPosition.X', 0, 0.3);
使从当前位置回到 0 的移动更温和一些,但是当然,这永远不会起作用,因为您不能直接为 PointF.X 或 PointF.Y 赋值(因此也不能动画师)。
那么怎么做呢? 谢谢
【问题讨论】:
-
子类
TScrollBox并使用 getter 和 setter 方法实现ViewPortPositionXproperty。 -
谢谢,但我只是尝试开始这样做,并意识到我对类助手以及继承和覆盖返回值的保护方法知之甚少。
-
我要看看不同的解决方案,谢谢。这似乎是解决一个看似简单的问题的漫长道路。
-
即。子类化一个 TAnimation 并创建一个 TAnimateFloatF 可能会更好
标签: delphi firemonkey