Como identificar se está na plataforma Firemonkey ou VCL

25/05/2022

8

Olá, gostaria de identificar se a aplicação está na plataforma Firemonkey ou VCL

Tenho uma unit de funcoes que gostaria de usar em ambas as plataformas,
algumas das minhas funcoes funcionam em ambas, outras porém,
funcionam somente em uma delas, ai gostaria de aplicar uma diretiva de
compilação para que sejam usadas somente na plataforma para qual foi escrita.

Já tentei definir com o codigo abaixo:

{$IF DECLARED(FireMonkeyVersion)}
{$DEFINE HAS_FMX}
{$ELSE}
{$DEFINE HAS_VCL}
{$ENDIF}

E usar assim:

{$IFDEF HAS_VCL}
Coloco aqui minha função VCL
{$ENDIF}

{$IFDEF HAS_FMX}
Coloco aqui minha função FMX
{$ENDIF}

Porém a variável "FireMonkeyVersion" parece não existir, mesmo na plataforma FMX

Alguém poderia me ajudar a resolver essa questão?
Alberto

Alberto

Responder

Posts

25/05/2022

Emerson Nascimento

tente
{$IF FMX.Types.FireMonkeyVersion >= 0} // if FireMonkey
     ShowMessage ('FMX 1');
{$ELSE} // its not FMX, so it must be VCL
     ShowMessage ('VCL 1');
{$ENDIF}



ou declare uma condição você mesmo no teu projeto FMX:
{$define FrameWork_FMX}

daí você chama as funções de uma única forma:
begin
     resultado := ABC( bla, bla, bla );
end

o tratamento será efetuado nas funções:
function ABC( params ): boolean;
begin
   {$ifdef FrameWork_FMX}
      result := ABC_FMX( params )
   {$else}
      result := ABC_VCL( params )
   {$endif}
end

Responder

25/05/2022

Alberto

Eu preciso usar a condição já no USES
então não dá pra usar FMX.Types.FireMonkeyVersion

Eu criei uma constante "FIREMONKEY" no projeto FMX ai deu certo:

{$IF DECLARED(FIREMONKEY)}
{$DEFINE IS_FMX}
{$ELSE}
{$DEFINE IS_VCL}
{$ENDIF}

USES
{$IFDEF IS_FMX}
FMX.Types, FMX.Forms, etc...
{$ELSE}
Windows, VLC.Graphics, etc...
{$ENDIF}

Obrigado pela dica.
Responder

28/05/2022

Josesv

A primeira é fácil de responder, as outras duas são um pouco mais difíceis. A VCL (ou Visual Component Library) NÃO está obsoleta, nem será tão cedo. Enquanto houver Windows e a API do Windows, haverá VCL com https://ssstik.io/pt. Recentemente, no Webinar do Windows 10 de Marco, ele disse: “A VCL é a melhor biblioteca para desenvolvimento de desktop do Windows e abraça totalmente o Windows 10”.

O VCL recebe novos componentes, recursos e correções de bugs com frequência, mas talvez não com tanta frequência quanto o FireMonkey. A razão é que a VCL é uma estrutura madura, enquanto o FireMonkey vem passando por muito crescimento nas últimas versões (embora tenha se estabilizado muito recentemente e esteja atingindo um status mais maduro).
Responder

30/05/2022

Alberto

Obrigado por comentar, porém seu comentário não tem relação com o tópico.
Responder

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários,
consulte nossa política de privacidade.

Aceitar