Potrzebuję, aby niektóre z moich klas formularzy realizowały tę samą funkcję.Jak uzyskać interfejs z obiektu utworzonego z TClass?
(ja odrzuca ideę dodając tę funkcję do wspólnej postaci anchestor ponieważ nie chcę, aby dodać funkcję, która byłaby bezużyteczna na większość moich postaciach.)
Więc ... myślałem o używaniu interfejsów.
IMyInterface = interface
procedure ShowHello();
end;
var
MyForm : TMyForm;
MyInterface : IMyInterface;
begin
MyForm := TMyForm.Create(Self);
MyInterface := MyForm;
//...
end;
W prostych przypadkach takich jak ten, to działa bez błędów, ale moja aplikacja korzysta z pakietów dynamicznych i używam funkcji „getClass” w celu uzyskania klasy formularza. Starałem się następująco:
var
MyForm : TForm;
MyInterface : IMyInterface;
begin
MyForm := TForm(GetClass('TMyForm').Create());
MyInterface := MyForm;
end;
To powoduje "niezgodne typy: 'IMyInterface' oraz 'TForm'" błędzie. Czy istnieje sposób osiągnięcia mojego celu za pomocą interfejsów, czy lepiej wypróbować inne sposoby?
Zrobiłem zgodnie z sugestią, ale obsługuje wyniki fałszywe. Klasa TMyForm jest deklarowana jako "TMyForm = klasa (TForm, IMyInterface)". Czy czegoś brakuje? – ExDev
Typ interfejsu wymaga unikatowego identyfikatora GUID w deklaracji. Czy ma GUID? – Wosi
Tak, przycisnąłem Ctrl + Shift + G w celu uzyskania jednego i dodałem go do deklaracji IMyInterface. – ExDev