Мы можем предположить, что ваш класс не является визуальным и что, кроме того, он не является компонентом времени разработки. Если бы это было не так, то это было бы не совсем совместимо с FMX и VCL.
В этом случае нет причин, по которым вы не можете включить FMX.Types
в приложение VCL, и нет причин, по которым вы не можете создать FMX.Types.TTimer
в приложении VCL - вы просто не можете этого сделать во время разработки (т. е. сбросить FMX TTimer
по форме VCL). Если вам нужен только таймер внутри, тогда ответ будет чистым - просто используйте таймер FMX, поскольку он будет компилироваться независимо от цели платформы или используемой рамки.
unit FMXTimerInVCLApplication;
interface
uses
Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants,
System.Classes, Vcl.Graphics, Vcl.Controls, Vcl.Forms, Vcl.Dialogs,
FMX.Types;
type
TForm1 = class(TForm)
procedure FormCreate(Sender: TObject);
private
FTimer : TTimer; // FMX.Types.TTimer !
procedure foo(Sender : TObject);
end;
implementation
{$R *.dfm}
procedure TForm1.FormCreate(Sender: TObject);
begin
FTimer := TTimer.Create(nil);
FTimer.Interval := 1000;
FTimer.OnTimer := foo;
end;
procedure TForm1.foo(Sender : TObject);
begin
ShowMessage('foo');
end;
end.
Это, конечно, приносит справедливое количество багажа FMX в ваше приложение. Это много раздувается для таймера, если вам все равно. Я представляю его как альтернативу другому естественному ответу (который пишет ваши собственные).
Связанный, [Delphi XE2: Предусмотрено ли условное обозначение VCL и FireMonkey?] (Http://stackoverflow.com/q/7720508/576719). –
@DavidHeffernan - Это было бы возможно, но я предпочел бы иметь возможность создавать класс в любом проекте, не беспокоясь об установке условных определений. – norgepaul
@DavidHeffernan - Это будет работать в определенной степени, но если я тестирую Windows, я до сих пор не знаю, является ли это FMX Windows или VCL Windows. Если я предполагаю, что это VCL, но это приложение FMX, я буду включать код VCL и наоборот. Этого я хочу избежать. – norgepaul