dll封装的窗体里不能用TApplicationEvents?

dropme 2010-06-18 02:52:09
普通exe程序里面,可以用TApplicationEvents控件的OnActivate和OnDeactivate事件来检查窗体是否获得焦点,把窗体封装到dll里以后,TApplicationEvents控件貌似没用了,请问这种情况下怎么检测窗体是否获得焦点啊?

...全文
170 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
dropme 2010-06-22
  • 打赏
  • 举报
回复
楼上的,能写个伪代码不?怎么拦截消息?拦截什么消息?怎么传递消息?传递给谁?

主程序拦截消息还是dll窗体拦截消息啊?如果是主程序拦截消息,主程序怎么知道把消息传递给谁呢?
因为主程序是可以创建多个dll窗体的~
dropme 2010-06-21
  • 打赏
  • 举报
回复
没高手在?给分析下呗?
COMPANY_COCO 2010-06-21
  • 打赏
  • 举报
回复
拦截消息,再进行消息传递,除非使用BPL 做三明治结构,否则在Dll传出Class还是会出现这个问题
dropme 2010-06-19
  • 打赏
  • 举报
回复
是这样子的:
我的dllForm实现了一个ITest接口,然后在dll工程文件里引出ITest,大概是这样:

dll的工程文件里,引出ITest接口
function InitiITest(App: TApplication): ITest;
begin
App.CreateForm(TDllFrm, DllFrm);
Result:= DllFrm;
end;

dllFrm实现ITest接口
dllFrm = class(TForm, ITest)

然后dllFrm上放了一个TApplicationEvent,主程序调用的时候:

test:= InitiITest(Application);

打断点跟踪的时候,发现Application确实传进去了,但是就是截获不了事件,跪求高手解答~
dinoalex 2010-06-18
  • 打赏
  • 举报
回复
传主程序句柄进去看看
iqyely 2010-06-18
  • 打赏
  • 举报
回复
学习下。
SQLDebug_Fan 2010-06-18
  • 打赏
  • 举报
回复
DLL里的TApplication对象和EXE里的对象不是同一个,你可以把EXE赋值到DLL的,这样就可以了。

5,388

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 开发及应用
社区管理员
  • VCL组件开发及应用社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧