Dll调用(100分)

  • 主题发起人 主题发起人 cnwy
  • 开始时间 开始时间
C

cnwy

Unregistered / Unconfirmed
GUEST, unregistred user!
我用的Dll中有一个函数(ShowForm)弹出一个窗体,这时任务栏中将出现一个新的程序,<br>如何使它不出现?<br><br>就如你调用showmessage()不会出现在任务栏中.<br><br>是否与函数的调用,声明方法有关?<br>
 
将窗体的属性设置为 ToolWindow
 
你dll中form的定义里加一段:<br>protected<br>&nbsp; procedure CreateParams(var Parasm: TCreateParams); override;<br>....<br><br>implementation<br><br>procedure Txxxx.CreateParams(var params: TCreateParams);<br>begin<br>&nbsp; inherited;<br>&nbsp; Params.ExStyle := Params.ExStyle or WS_EX_TOOLWINDOW;<br>end;<br><br>这样打开时就不会出现在任务栏上了.
 
eYes的想法是对的.<br>我也这样做的,不过方法稍有差异,采用的是<br>Params.ExStyle := Params.ExStyle or WS_EX_TOOLWINDOW;<br>params.parent:=findwindow('Program',nil);<br>这样的效果相当好.<br>如果你的程序在任务栏上没有留下痕迹,这时在调用DLL 时使用SHowmessage就会在任务栏<br>出现窗口,原因可能是如果用Showmessage它就用了主程序的那个任务栏上的条形窗口,<br>主程序没有留下窗口时就会生成一个.<br>在大富翁论坛的"练功场"上我放过一个叫"小叮当1.2"的程序你可以DOWN 下来看看它的源码,<br>主程序与DLL的窗口都没有在任务栏中留下"坑迹",有相当多注释,应该比较好懂的.<br><br><br>
 
设置窗体的属性为 ToolWindow 是可以使其不在任务栏中出现,<br>但调用的窗体不能最大最小化。<br>这该如何解决,是否还须改变其它设置?<br><br>
 
对不起我多写了一句,以下是我的程序中的代码:<br>在窗体的私有部分声明:<br>procedure createparams(var Params: TcreateParams);override;<br>实现代码为:<br>procedure TFormPwd.createparams(var Params: TcreateParams);<br>begin<br>&nbsp; inherited;<br>params.wndParent:=FindWindow('Progman', nil);//这一句隐藏在任务栏上的窗口.<br>end;<br>
 
Thanks Lera, But I want to know what mean &nbsp;is the 'Progman' .<br>params.wndParent:=FindWindow('Progman', nil);//这一句隐藏在任务栏上的窗口.<br>
 
Thanks Lera, But I want to know what mean &nbsp;is the 'Progman' .<br>params.wndParent:=FindWindow('Progman', nil);//这一句隐藏在任务栏上的窗口.<br>
 
多人接受答案了。
 
你的showform函数写的不对,应该把主窗体的handle传到dll中<br>Showform(Ahandle:Thandle):longint;Stdcall<br>begin<br>&nbsp; Application.Handle:=Ahandle;<br>&nbsp; if Not Assigned(DllForm) then<br>&nbsp; &nbsp; &nbsp;DllForm:=TDllForm.Create(Application);<br>&nbsp; DllForm.Show;<br>end;<br>出口函数这样写就可以了.<br>
 
后退
顶部