软件里使用了Dev Express控件包,
它提供了便利的换肤功能,
但我现在的情况是,窗体我使用自己制作的皮肤而不想用Dev Express的,
代码该如何写?

解决方案 »

  1.   

    Dev Express删除控件
    或者屏蔽相关的代码
      

  2.   

    没办法,除非你的皮肤可以作用于dev组件
      

  3.   

    刚看了DEV的代码,它注册了一个勾子,把所有的窗体绘制消息都阻挡了。。
      

  4.   

    如果我阻断这个勾子,那么控件的自绘消息不能被DEV所处理,那么控件就换不了肤了。。
    唉。。这个问题必须解决啊。。
      

  5.   

    我大概看了一下dxskin的代码,
    要解决你的问题,需重载下TdxSkinFormController的GetIsSkinUsed方法。具体步骤如下:
    1)覆盖原来的dxSkinGetControllerClassForWindowProc方法,指向自己的。
    可加在单元的最后:
    initialization
      dxskinsform.dxSkinGetControllerClassForWindowProc := MydxSkinGetControllerClassForWindow;finalization2)改写方法和dxSkinFormController类type
      TMydxSkinFormController = class(TdxSkinFormController)
      protected
        function GetIsSkinUsed: Boolean; override;
      end;function MydxSkinGetControllerClassForWindow(AWnd: HWND): TdxSkinWinControllerClass;
    var
      AControl: TControl;
    begin
      Result := nil;
      if TdxSkinWinController.IsMDIClientWindow(AWnd) then
        Result := TdxSkinFormController
      else
      begin
        AControl := FindControl(AWnd);
        if AControl <> nil then
        begin
          if AControl is TCustomForm then
            Result := TMydxSkinFormController;  //注意:此处更改
            //Result := TdxSkinFormController;
          if AControl is TCustomFrame then
            Result := TdxSkinFrameController;
          if SameText(AControl.ClassName, 'TButton') then
            Result := TdxSkinButtonController;
          if SameText(AControl.ClassName, 'TPanel') then
            Result := TdxSkinPanelController;
        end;
      end;
    end;{ TMydxSkinFormController }function TMydxSkinFormController.GetIsSkinUsed: Boolean;
    begin
      Result := False;
    end;