我需要一些表单类实现相同的功能。
(我已经放弃了将这个功能添加到一个共同的anchestor表单的想法,因为我不想添加一个在我的大多数表单上都没用的功能。)
所以......我想过使用接口。
IMyInterface = interface
procedure ShowHello();
end;
var
MyForm : TMyForm;
MyInterface : IMyInterface;
begin
MyForm := TMyForm.Create(Self);
MyInterface := MyForm;
//...
end;
在这样的简单情况下,它可以正常运行,但我的应用程序使用动态包,我使用" GetClass"函数以获取表单类。 我尝试如下:
var
MyForm : TForm;
MyInterface : IMyInterface;
begin
MyForm := TForm(GetClass('TMyForm').Create());
MyInterface := MyForm;
end;
它导致"不兼容的类型:' IMyInterface'和' TForm'"错误。 有没有办法使用接口实现我的目标,或者尝试其他方式会更好?
答案 0 :(得分:7)
使用Supports
功能检查接口是否已实现。
<强>示例强>:
var
MyForm : TForm;
MyInterface : IMyInterface;
begin
MyForm := TFormClass(GetClass('TMyForm')).Create(...);
if Supports(MyForm, IMyInterface, MyInterface) then
begin
MyInterface.ShowHello;
end;
end;
您需要为接口声明GUID。否则Supports
无法正常工作。所以接口声明应如下所示:
IMyInterface = interface
['{052E7D55-B633-4256-9084-37D797B01BB4}']
procedure ShowHello();
end;