delphi - 如何创建一个可与 VCL 和 FMX 一起使用的内部计时器?

标签 delphi timer firemonkey vcl delphi-10-seattle

我有一个需要计时器的类(class)。该类必须同时使用 VCL 和 FMX。不幸的是,FMX 计时器在 FMX.Types 中声明,而 VCL 计时器在 Vcl.ExtCtrls 中声明。

由于没有像 {$IFDEF FMX}xxx{$ENDIF} 这样的条件定义,我如何在跨平台类中使用计时器?

最佳答案

如果是我,我会编写一个独立于 FMX 和 VCL 框架的专用跨平台计时器类。从概念上讲,它将与 Delphi RTL 处于同一级别。

如果您不想这样做并想重新使用现有的计时器类,那么您将陷入困境。对于没有 VCL 的目标,你会怎么做?您无法知道您的代码是否会被 FMX 或 VCL 项目使用。想想看。您可以将您的单元编译为 .dcu 并将其包含在任何项目中。在编译单元时,它无法知道最终将使用它的项目类型。

那怎么办?您可以在任何地方使用 FMX 定时器。但这迫使 FMX 进入 VCL 项目。我知道我不会喜欢那样。您可以在 Windows 以外的任何地方使用 FMX 计时器,并在那里使用 VCL 计时器。但这迫使 VCL 进入 Windows FMX 项目。

所以你可以采用这种方法:

  1. 创建您自己的跨平台计时器类。
  2. 在 Windows 以外的平台上,在 FMX 计时器之上实现它。
  3. 在 Windows 上使用原始 Windows API 函数 SetTimerKillTimer 实现它。

关于delphi - 如何创建一个可与 VCL 和 FMX 一起使用的内部计时器?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32582174/

相关文章:

c++ - 如何混合 std::stream 和 Delphi TStream?

c - 用C模拟javascript的setTimeout和setInterval

iphone - 从异步更新文本字段返回 - iPhone

delphi - Indy 9 与 Lazarus/Free Pascal 兼容吗

class - 通过类变量构造对象总是需要父类有构造函数吗?

delphi - 对 DLL 进行分组以便在可执行文件中使用

objective-c - 计算两个时间点之间的秒数,在 Cocoa 中,即使系统时钟在中途发生变化

image - 如何在FireMonkey中存储图像?

android - 单击TDateEdit(FMX Control)导致Android应用程序崩溃

delphi - FMX - Trayicon 消息处理