田
田园的男孩
Unregistered / Unconfirmed
GUEST, unregistred user!
ActiveX 技术是一种好东西,但它通常要先注册,然后才能使用.本人不自量力,想尝试探索一种不需注册的 ActiveX 技术.当然,这种技术的基础是 DLL.
几经测试.我得出了两种实现方式,一种是从 DLL 中创建控件,再通过重置 ParentWindow( Edit1.ParentWindow := form1.handle) 的方法可以将该控件显露到 form1 上面,方法和事件则能用 interface 来实现.
可惜,这种方法在 delphi ide 调试出现一个问题,就是控件不能得到方向键和 Tab 键.
我查看 TForm 和 application 的源码,但是找不到原因.
第二种方法不谋而合的跟 VCL 的实现原理想到一起了.将 form1 上的任意一个 TWinControl 的 handle 传递给 DLL ,让 DLL 能通过 SetWindowLong 重置 该控件的 WinProc(消息处理指针)到 DLL 中,如此该控件的所有消息处理都跑 DLL 中去了,DLL 通过在后台处理该控件的所有消息,就能让该控件变成任意一个类型的控件.方法和事件则通过消息实现.
另外,可以象 COM 一样,让这类特殊的 DLL 拥有 GetEventCount GetEventName 等方法,如此就可以在不知道 DLL 中有什么控件和方法的情况下,读取信息并翻译成各种语言的声明脚本.
开这个帖子的目的是希望找到一种最好的实现方法,或者得到一点"技术补偿",希望各位高手不吝指教!
几经测试.我得出了两种实现方式,一种是从 DLL 中创建控件,再通过重置 ParentWindow( Edit1.ParentWindow := form1.handle) 的方法可以将该控件显露到 form1 上面,方法和事件则能用 interface 来实现.
可惜,这种方法在 delphi ide 调试出现一个问题,就是控件不能得到方向键和 Tab 键.
我查看 TForm 和 application 的源码,但是找不到原因.
第二种方法不谋而合的跟 VCL 的实现原理想到一起了.将 form1 上的任意一个 TWinControl 的 handle 传递给 DLL ,让 DLL 能通过 SetWindowLong 重置 该控件的 WinProc(消息处理指针)到 DLL 中,如此该控件的所有消息处理都跑 DLL 中去了,DLL 通过在后台处理该控件的所有消息,就能让该控件变成任意一个类型的控件.方法和事件则通过消息实现.
另外,可以象 COM 一样,让这类特殊的 DLL 拥有 GetEventCount GetEventName 等方法,如此就可以在不知道 DLL 中有什么控件和方法的情况下,读取信息并翻译成各种语言的声明脚本.
开这个帖子的目的是希望找到一种最好的实现方法,或者得到一点"技术补偿",希望各位高手不吝指教!