【问题标题】:Firemonkey TVertScrollBox alternative to VCL ScrollBox ScrollInViewFiremonkey TVertScrollBox 替代 VCL ScrollBox ScrollInView
【发布时间】:2017-05-21 03:07:02
【问题描述】:

我正在使用 Delphi XE8 开发 Android 应用程序,我想在单击按钮时移动 VertScrollBox 的 ViewportPosition 以查看特定组件(在 VertScrollBox 中的某个位置)。

但是设置 ViewportPosition 的值不起作用(我在这里尝试了答案:Go Top a TVertScrollBox)并且方法 ScrollBy 也不起作用(http://docwiki.embarcadero.com/Libraries/Seattle/en/FMX.Layouts.TVertScrollBox)。

我试过这个:

procedure TFormTournee.T3ButtonBackToTopClick(Sender: TObject);
begin
    T1VertScrollBox.ViewportPosition := PointF(T1VertScrollBox.ViewportPosition.X, 0);
    T1VertScrollBox.RealignContent;
end;

还有:

procedure TFormTournee.T3ButtonBackToTopClick(Sender: TObject);
begin
    T1VertScrollBox.ScrollBy(0,-100);
    T1VertScrollBox.RealignContent;
end;

目前,我只是在 Windows 上尝试过(我必须在 Android 上解决另一个关于存储空间不足的问题),但是当我单击时没有任何变化,而且它应该在 Windows 和 Android 上工作相同,不是吗正确的 ?那么有人可以帮助我吗?或者也许解释一下我做错了什么?谢谢!

【问题讨论】:

  • 在 xe8 tvertscrollBox 上是错误的,必须在 firemonkey 上避免。您可以在这里尝试使用 Talvertscrollbox(与 TvertscrollBox 完全相似):svn.code.sf.net/p/alcinoe/code
  • 我从不尝试 xe8 :( 你有什么错误?
  • 感谢您的回答,我只是尝试安装它,就像在 readme_firemonkey.txt 的 INSTALL 部分中解释的那样,但它不起作用: 1. 如果我把 java\dex\xx\classes.dex 放在 classes_dex.png 中,delphi 说我 INSTALL_FAILED_DEXOPT; 2.如果我尝试执行java/build_xx.bat(设置了%ANDROID%和%EMBO_DEX%变量),写的是所有指定的文件都无法追踪也许我忘记做某事或拿走了一些文件,但我是初学者,对像Talvertscrollbox这样的外部组件绝对不熟悉
  • 我只是在想,对于第一种方式,它无法正常工作,因为 .dex 是从 Berlin 创建的,而我正在使用 XE8,它不应该与以前的 Delphi 版本兼容,不是吗?所以这可能是第二种方式的相同原因,所以我尝试了存档文件夹中的 compile_dxe2.bat ,但它也不起作用,也许太旧了?
  • 是的,没错,dex 是为柏林设计的 :( 不幸的是我没有 xe8 来编译。但不要担心你不需要 .dex 的滚动框(你需要它用于本机android Edit only). 你可以尝试编译和安装 Alcinoe_berlin.dproj 吗?

标签: delphi firemonkey delphi-xe8


【解决方案1】:

因此,如果有人尝试使用 ScrollBy 或 ViewportPosition 在 TVertScrollBox 中编写滚动程序,并且如果它不起作用,@loki 在 cmets 中的链接指的是在 Windows 和 Android 上工作的替代方案(我不能在 iOS 上尝试,但它应该也可以工作)(https://svn.code.sf.net/p/alcinoe/code/)。因为我正在使用 Delphi XE8,所以我不得不做一些调整,但它真的很快。

在该过程中,单击按钮将 VertScrollBox 定位在组件面板上:

procedure TFormTournee.ButtonClick(Sender: TObject);
begin
    // The position is placed at the top
    ALVertScrollBox1.ScrollBy(0, ALVertScrollBox.Width);
    // And then it go down to the panel position
    ALVertScrollBox1.ScrollBy(0, -Panel.Position.Y);
end;

再次感谢@loki!

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-11-21
    • 1970-01-01
    • 2012-06-25
    • 2014-01-20
    • 1970-01-01
    • 2015-12-20
    • 2015-07-13
    相关资源
    最近更新 更多