DLL中的Forms问题,大家来看一下啊!!

DLL中的Forms问题,大家来看一下啊!! Delphi / Windows SDK/API
http://www.delphi2007.net/DelphiAPI/html/delphi_20061208104302104.html
我在窗口的panel中调用了一个dll文件中的窗口,调用是一切正常的,但要加  
  Panel1.updatecontrolstate窗口才能正常的显示出来。如果我的dll窗体中用了pagecontrol,问题就出现了,当按上面的tab切换时,   panel的显示不会发生变化,除非再次调用Panel1.updatecontrolstate。   关键是这个语句怎么加,加在什么地方?大家可以尝试一下。  
   
 

你跟踪以下就知道了,Panel1.updatecontrolstate,实际上是给vcl发送消息,  
  updatecontrolstate发送的是cm_base+25;  
   
  所以要么你在本地窗口切换的时候sendmessage,要么在dll窗口中的onpaint事件里  
  写入.  
   
  //不知道对不对,楼主看看

我的子窗口代码:  
  function   CreateDLLForm(myAPP:TApplication;myScr:TScreen):TForm;  
  begin  
    Application:=myApp;  
    Screen:=myScr;  
    application.CreateForm(TfrmDllForm,frmDllForm);  
    result:=frmDllForm;  
  end;  
   
  我的主窗口代码:  
  myHandle:=LoadLibrary('dllproj.dll');  
  if   myHandle<>0   then  
      begin  
          @myProc:=GetProcAddress(myHandle,'CreateDLLForm');  
          if   assigned(myProc)   then  
                begin  
                    DLLForm:=myProc(Application,Screen);  
                    DllForm.Parent:=Panel1;  
                    DLLform.Show;  
                    Panel1.UpdateControlState;  
                end;  
      end;  
   
  我尝试过了,dll窗口的pagecontrol发生变化的时候,主窗口好像无法感知。

可以通过发消息的办法和主窗体通信!  
  SENDMESSAGE(APPLICATION。MAINFORM。HANDLE,WM-XXXX,XX,XX);  
  然后主窗体在对应的消息处理函数里面执行相应的操作!

前提是DLL要用主程序的APPLICATION

带包编译(vcl70.bpl,   rtl70.bpl)

to:newfang(传说中的MIC)  
  我本来想在dll窗口的pagecontrolchange中用sendmessage,结果,主程序根本就没收到,问题确实如你所说,主程序的application句柄得不到啊,所以这个发消息的动作写在什么地方还没研究出来

另外,我处理消息的过程是在主form中定义的,好像消息传给应用程序也不行,要传给form的句柄。

 
  在创建Dllform的时候把applicaton.handle作为DLLForm单元中的全局变量。  
  (或者直接传递panel1的handle);这样就可以给application或者panel1发送消息直接通信了。  
   
  消息在pagecontrol的onchange事件里发送即可。

现在的问题变成了DLL子窗口发消息时怎样知道主窗口的句柄,不是应用程序的,  
 

转载于:https://www.cnblogs.com/delphi2007/archive/2008/09/23/1296482.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值