Como identificar se está na plataforma Firemonkey ou VCL
25/05/2022
0
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
Posts
25/05/2022
Emerson Nascimento
{$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
25/05/2022
Alberto
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.
28/05/2022
Josesv
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).
30/05/2022
Alberto
Clique aqui para fazer login e interagir na Comunidade :)