我有一个需要计时器的类(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 项目。
所以你可以采用这种方法:
- 创建您自己的跨平台计时器类。
- 在 Windows 以外的平台上,在 FMX 计时器之上实现它。
- 在 Windows 上使用原始 Windows API 函数
SetTimer
和KillTimer
实现它。
关于delphi - 如何创建一个可与 VCL 和 FMX 一起使用的内部计时器?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32582174/