我需要一些表单类实现相同的功能.
(我已经放弃了将这个函数添加到一个共同的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’”错误.
有没有办法使用接口实现我的目标,或者尝试其他方式会更好?
解决方法
使用
Supports
功能检查接口是否已实现.
样品:
var MyForm : TForm; MyInterface : IMyInterface; begin MyForm := TFormClass(GetClass('TMyForm')).Create(...); if Supports(MyForm,IMyInterface,MyInterface) then begin MyInterface.ShowHello; end; end;
您需要为接口声明GUID.否则支持不起作用.所以接口声明应如下所示:
IMyInterface = interface ['{052E7D55-B633-4256-9084-37D797B01BB4}'] procedure ShowHello(); end;
原文地址:https://www.jb51.cc/delphi/239384.html
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。