Abbrevia supporta sia la VCL e CLX utilizza questo tipo di scissione:
QAbUnit1.pas:
{$DEFINE UsingCLX}
unit QAbUnit1;
{$I AbUnit1.pas}
AbUnit1.pas:
{$IFNDEF UsingCLX}
{$DEFINE UsingVCL}
unit AbUnit1;
{$ENDIF}
type
...
TMyWidget = class({$IFDEF UsingVCL}TWinControl{$ENDIF}
{$IFDEF UsingCLX}TWidgetControl{$ENDIF})
...
end;
end.
Per aggiungere FireMonkey supporto, vorrei aggiungere un file come questo:
FmxAbUnit1.pas:
{$DEFINE UsingFMX}
unit FmxAbUnit1;
{$I AbUnit1.pas}
{$ENDIF}
e poi fare tutti i cambiamenti condizionale che ho bisogno di AbUnit1.pas.
Non è una divisione pulita come il suggerimento di Robert, ma il vantaggio è che tutte le modifiche si verificano in un singolo file e la definizione condizionale viene gestita automaticamente, quindi non è necessario che venga visualizzata nelle opzioni del progetto.Chiunque usi la tua biblioteca include solo l'unità appropriata per decidere quale utilizzare. Probabilmente potresti sfruttare anche l'ambito degli obiettivi, nominando i file Fmx.AbUnit1.pas
e Vcl.AbUnit1.pas
, ma penso che Embarcadero lo scoraggi.
fonte
2011-10-11 19:04:07
No, dovresti definire il tuo. – jed
Perché è necessario? Qualcosa puzza un po 'di pesce per me. –
si potrebbe desiderare di usare un'unità con funzionalità comuni in entrambe le applicazioni vcl e fmx, niente di strano. come: usa {$ IFDEF FMX} FMX.Forms {$ ELSE} Vcl.Forms; {$ ENDIF} –