Abbrevia obsługuje zarówno VCL i CLX użyciu tego rodzaju dzielone:
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.
Aby dodać FireMonkey wsparcie, dodałbym plik taki jak ten:
FmxAbUnit1.pas:
{$DEFINE UsingFMX}
unit FmxAbUnit1;
{$I AbUnit1.pas}
{$ENDIF}
a następnie zrobić cokolwiek warunkowe zmiany muszę AbUnit1.pas.
To nie jest ładny, czysty podział, jak sugestia Roberta, ale zaletą jest to, że cała edycja odbywa się w jednym pliku, a definicja warunkowa jest obsługiwana automatycznie, więc nie musi pojawiać się w opcjach projektu.Kto kiedykolwiek używa twojej biblioteki, zawiera odpowiednią jednostkę do decydowania, z której chce skorzystać. Prawdopodobnie możesz również skorzystać z zakresu jednostek, nazywając pliki Fmx.AbUnit1.pas
i Vcl.AbUnit1.pas
, ale myślę, że Embarcadero to zniechęca.
Nie, powinieneś zdefiniować swój własny. – jed
Dlaczego jest to potrzebne? Coś mi pachnie. –
można chcieć użyć jednostki ze wspólną funkcjonalnością w aplikacjach vcl i fmx, nic podejrzanego o to. jak: Używa {$ IFDEF FMX} FMX.Forms {$ ELSE} Vcl.Forms; {$ ENDIF} –