我在DLL里创建窗体显示,貌似跟调用的DLL的程序没有什么关联,意思就是下面的任务栏中有两个Project1,这个应该怎么办,我想把他弄成像平时多个窗体一样任务栏中只有一个Project1。

解决方案 »

  1.   

    因为DLL的application与调用者的Application不相同
    将你调用DLL的窗体的窗体句柄传递过去,赋值给Application.Handle;
    然后创建的时候
    Form1:=TForm1.CreateForm(Application);
      

  2.   

    application,screen都要取宿主的,否则任务栏会多出来一个栏目的
      

  3.   

    谢谢 楼上各位的回答
    我到网上也找了相关的dll窗体融合
    跟#1说的类似
    只是还有个问题我很费解,
    比如有两个窗体Form1,Form2
    Dll中的窗体DllFrom
    在Form1中调用Dll创建,无异常,正常退出
    之后再Form2中创建也没有异常,只是我Dll的窗体中有Hint,这是就会报错误说是无效的窗口句柄。
    (上面这种情况,反过来也一样,就是在两个不同窗口调用,有Hint时就会出现上述问题)
    创建的过程如下:
    Application.Handle:=窗体的窗口句柄
    DllFrom:=TForm.CreateForm(Application);
    Dll退出时,我恢复了Dll的Application句柄
    还请高手帮忙看看这是什么问题
      

  4.   

    Dll中创建模态窗体时,需要将Dll里的Application.Handle赋值为你的程序的的Application.Handle看一下《Delphi5 开发人员指南》第9章第9章   动态链接库 234
    9.4.2   显示DLL中的模式窗体 239
    9.5   显示DLL中的无模式窗体 241