我使用VCLSkin4.93版本的。
我的程序是主程序exe上有一个Panel,然后有多个DLL哩定义的Form,将不同DLL中的Form,动态地加载到主程序的Panel上!注意:不是Show方法或ShowModal方法。而是通过设置DLL Form的visible属性和Dll Form的ParentHandle:=Panel.Handle实现的!这种方法是目前将DLL Form显示在Panel中Bug最少的方法!
但是问题来了:使用这个空间之后,DLL Form上的控件都没有效果!但是使用Show或ShowModal的方法是可以的!如果用API函数SetParent方法代替ParentHandle:=Panel.Handle,也有效果,但是这样之后DLL Form有很多问题:比如Hint不显示等等。请问高手们,如何解决使用ParentHandle:=Panel.Handle加在DLL Form上,而且这个皮肤控件还可以正常使用?
研究了Demo几天了,试过无数方法,就是不行,着急啊
我的程序是主程序exe上有一个Panel,然后有多个DLL哩定义的Form,将不同DLL中的Form,动态地加载到主程序的Panel上!注意:不是Show方法或ShowModal方法。而是通过设置DLL Form的visible属性和Dll Form的ParentHandle:=Panel.Handle实现的!这种方法是目前将DLL Form显示在Panel中Bug最少的方法!
但是问题来了:使用这个空间之后,DLL Form上的控件都没有效果!但是使用Show或ShowModal的方法是可以的!如果用API函数SetParent方法代替ParentHandle:=Panel.Handle,也有效果,但是这样之后DLL Form有很多问题:比如Hint不显示等等。请问高手们,如何解决使用ParentHandle:=Panel.Handle加在DLL Form上,而且这个皮肤控件还可以正常使用?
研究了Demo几天了,试过无数方法,就是不行,着急啊
begin
if mySkinData.Active then
begin
mySkinData.UpdateMenu(pForm);
mySkinData.UpdateSkinControl(pForm);
Application.ProcessMessages;
end;
end;
http://topic.csdn.net/t/20051215/09/4459856.html
解决之后马上结贴
2.Don't put skindata on dll project.
3.Add code in domain project:use winskindlg;call SetApplicationHandle(Application.Handle,winskindlg.skinmanager);
4.Add code in DLL project:use WinSkinData;procedure SetApplicationHandle(Handle: HWnd;adata: Pointer);
begin
Application.Handle := Handle;
Winskindata.SkinDll(adata);
end;note :
if you want to change skin file in main forms and dll forms, you must add "sharemem" in domain and dll project filecopied form http://www.link-rank.com/dll.htm
1,因为我的DLL窗体需要内嵌到主界面的Panel中,因此需要将DLL窗体两步看待:(1)DLL窗体,(2)停靠窗体。这样解决方案就有了,需要将这两步同时处理。
2,更换皮肤的时候,必须先将皮肤控件的active属性设置为false,更换批复文件,再设置active属性为true。在设置新的皮肤文件之前,设置active属性为false之后,需要时间延迟来完成停止皮肤的使用,因此使用了timer控件进行延时,至少要300毫秒,因此整个过程不完美的地方就在此:明显有界面闪烁感觉。
以上是我尝试过的结果,有好的建议多多提啊。
有时间我会把这个完整的过程些的我的空间中去,大家有时间也捧捧场,呵呵