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

解决方案 »

  1.   

    DLL里的TApplication对象和EXE里的对象不是同一个,你可以把EXE赋值到DLL的,这样就可以了。
      

  2.   

    是这样子的:
    我的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确实传进去了,但是就是截获不了事件,跪求高手解答~
      

  3.   

    拦截消息,再进行消息传递,除非使用BPL 做三明治结构,否则在Dll传出Class还是会出现这个问题
      

  4.   

    楼上的,能写个伪代码不?怎么拦截消息?拦截什么消息?怎么传递消息?传递给谁?主程序拦截消息还是dll窗体拦截消息啊?如果是主程序拦截消息,主程序怎么知道把消息传递给谁呢?
    因为主程序是可以创建多个dll窗体的~