Kompilieren Sie Units für FMX oder VCL bedingt

Ich möchte eine andere Liste von Einheiten in der Liste habenuses Klausel abhängig von der Kompilierung für FMX oder VCL. Im folgenden Code versuche ich zu testenFireMonkeyVersion die in einem FMX-Projekt arbeitet (label1.Text ist 'FMX'). Wenn ich die $ IF-Anweisung in dieuses Klausel bekomme ich eine Fehlermeldung ([dcc32 Error] fmx_text.pas(7): E2026 Constant expression expected). Gibt es eine Möglichkeit, die gewünschte bedingte Kompilierung zu erhalten?

unit fmx_text;

interface

uses
  System.SysUtils, System.Types, System.UITypes, System.Rtti, System.Classes,
  System.Variants, FMX.Controls, FMX.Forms, FMX.Dialogs, FMX.Types;
{$IF FireMonkeyVersion >= 16}
   {$DEFINE HAS_FMX}
{$ELSE}
   {$DEFINE HAS_VCL}
{$IFEND}

type

  TForm2 = class(TForm)
    Label1: TLabel;
    procedure FormCreate(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form2: TForm2;

implementation

{$R *.fmx}

procedure TForm2.FormCreate(Sender: TObject);
begin
   label1.Text := 'Undefined';
{$IFDEF HAS_FMX}
   label1.Text := 'FMX';
{$ENDIF}
{$IFDEF HAS_VCL}
   label1.Text := 'VCL';
{$ENDIF}
end;

end.

Antworten auf die Frage(1)

Ihre Antwort auf die Frage