TForm VCL hérite de TComponent qui implémente IInterface sans la gestion du compteur de référence mais il est tout a fait possible d'utiliser Supports pour récupérer une interface précise dessus
1 2 3 4 5 6
| type
IInitializableForm = interface
['{00000000-0000-0000-0000-000000000000}'] // CRTL + MAJ + G
function Initialize(AParam: TTypeOfParam): Boolean;
end; |
1 2 3 4 5 6
| type
TModuleTrucUneChoseForm = class(TForm, IInitializableForm)
private
{ Implémentation de IInitializableForm }
function Initialize(AParam: TTypeOfParam): Boolean;
end; |
Pour l'appel
1 2 3 4 5 6
| var
MaForm: TForm; // ou TModuleTrucUneChoseForm
MaInitializableForm: IInitializableForm;
begin
if Supports(MaForm, IInitializableForm, MaInitializableForm) then
MaInitializableForm.Initialize(MonParam); |
Je l'ai fait en XE2 aussi bien en Delphi que C++Builder, cela fonctionnait parfaitement pour gérer des fenêtres Container pouvant recevoir des fenêtes Dockables qui ne se "connaissaient" mutuellement que via les différentes interfaces
cela donnait ce genre de déclaration pour le Container
TModuleReverseReceptionObjetForm = class(TForm, IModuleReverseReceptionObjet, IModuleReverseReceptionObjetContenantsOut, IModuleReverseReceptionObjetScanFilter)
Pour les Dockées qui n'offraient pas forcément les mêmes possibilités
TModuleReverseDecisionTriMagasinForm = class(TForm, IModuleReverseReceptionObjetDecision, IModuleReverseReceptionObjetDecisionRappel, IRestorableContenantConciliationByActionHandler)
TModuleReverseExpeditionFonteControleForm = class(TForm, IModuleReverseReceptionObjetDecision, IRestorableContenantConciliationByActionHandler)
Partager