我使用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几天了,试过无数方法,就是不行,着急啊

解决方案 »

  1.   

    顶一下,有同样问题,我的是3.84,开发ocx,结果ocx中的全部没有美化。
      

  2.   

    试试加载的时候,UpdateSkin一下procedure TMainForm.UpdateSkin(pForm: TForm; pControl: TWinControl=nil);
    begin
      if mySkinData.Active then
      begin
        mySkinData.UpdateMenu(pForm);
        mySkinData.UpdateSkinControl(pForm);
        Application.ProcessMessages;
      end;
    end;
      

  3.   

    这个看过没有?
    http://topic.csdn.net/t/20051215/09/4459856.html
      

  4.   

    hongqi162 方法是解决如何将DLL 窗体显示在内嵌的Panel上,这个问题我已经解决!我现在的问题是,如何将这个DLL Form可以正常的使用VCLSkin这个皮肤控件啊!
    解决之后马上结贴
      

  5.   

    SkinData有个SkinFormType属性,里面有个值sfDll,不知道把这个放到DLL里面的窗体上行吗P.S. DLL里面有设置Application.Handle吗?
      

  6.   

    想了想,搜了搜,不知道管不管用:This is VCLSkin demo for DLL form.1.Put one skindata on exe project (domain project).
    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
      
      

  7.   

    最近找到了点方法,但是不够完美,拿出来和大家分享一下,如果大家有完美的方法,请告之:
    1,因为我的DLL窗体需要内嵌到主界面的Panel中,因此需要将DLL窗体两步看待:(1)DLL窗体,(2)停靠窗体。这样解决方案就有了,需要将这两步同时处理。
    2,更换皮肤的时候,必须先将皮肤控件的active属性设置为false,更换批复文件,再设置active属性为true。在设置新的皮肤文件之前,设置active属性为false之后,需要时间延迟来完成停止皮肤的使用,因此使用了timer控件进行延时,至少要300毫秒,因此整个过程不完美的地方就在此:明显有界面闪烁感觉。
    以上是我尝试过的结果,有好的建议多多提啊。
    有时间我会把这个完整的过程些的我的空间中去,大家有时间也捧捧场,呵呵