只要在项目主窗体上放置了SkinManager并激活之后(SkinManager.Active := True),那么皮肤渲染效果即刻全局生效。我的一个次级窗体为了以不规则的异形呈现,使用了 RzFormShape 控件(直接设置其 Picture 属性即可)。然而由于AlphaControls 的皮肤渲染会覆盖窗体的透明设置,导致无法正确显示不规则形状的背景透明区域。
在次级窗体创建时临时设置SkinManager.Active := False 是可以实现异形的,但此时主窗体的皮肤渲染效果也会随之消失。花了不少时间内外网到处查,但有关 RzFormShape 的资料极少,或者即便是有人提到也都是只言片语,问了各方Ai大神所给方案都是错误百出,只好静下心来,打开 AlphaControls 的官网,耐心研读相关文档……
嘿嘿,还真找到了两个极其简单的解决方案!
方案1:只须将次窗体的Tag值设为数字256即可。
附此方法所依据的官方说明:If the Tag property of the form is accessible then set a 8th bit of this property to 1 (value is $100 or 256), the form will not be skinned in this case. Other bits may be used by developer for other purposes. This is an easiest solution.
方案2:在次窗体上添加组件TskinProvider,然后设置其属性DrawClientArea值为False即可。
附此方法所依据的官方说明:DrawClientArea allows to disable a skinning of client area of the form. It's may be useful if drawing of borders and form titlebar only is needed.
这两种方法各有优缺点:
- 方案一:简单直接,只需设置一个属性即可,但可能会影响到其他需要皮肤渲染的功能。
- 方案二:更加灵活,可以精确控制哪些部分需要皮肤渲染,但需要额外添加一个组件。
根据你的具体需求选择合适的方案。如果只是简单地禁用皮肤效果,方案一会更简洁;如果需要更精细的控制,方案二会更加合适。