Como identificar se está na plataforma Firemonkey ou VCL
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?
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
Curtidas 0
Respostas
Emerson Nascimento
25/05/2022
tente
ou declare uma condição você mesmo no teu projeto FMX:
daí você chama as funções de uma única forma:
o tratamento será efetuado nas funções:
{$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
GOSTEI 0
Alberto
25/05/2022
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.
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.
GOSTEI 0
Josesv
25/05/2022
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).
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).
GOSTEI 0
Alberto
25/05/2022
Obrigado por comentar, porém seu comentário não tem relação com o tópico.
GOSTEI 0