在多监视器系统上,"空白"VCL应用程序可以最大化,但启用了样式的相同应用程序(以及一个默认选择的应用程序)最大化不正确.我所看到的是窗口的右侧边缘延伸到第二台显示器(我的主要位于左侧).当我开始与其他Windows应用程序进行比较时,我注意到在Windows 7(至少)下,最大化的窗口甚至在左侧,右侧或底侧都没有非客户端边框.事实上,标准VCL(非样式)应用程序的行为方式相同,没有非客户端边界.
我该如何解决?我注意到TFormStyleHook有一个WMNCCalcSize的处理程序,我还没有解剖,但让我想知道VCL是否可能错误地处理这个消息以获得最大化的窗口.
我在Delphi XE2中使用新的VCL样式系统.它工作得很好,但是我想为一个特定的表单禁用它,它上面有许多图像(一个启动/关于表单).问题是我似乎无法找到将其与特定样式相关联的表单属性,因此不能仅为该表单禁用它.似乎只有全局TStyleManager
类似乎是静态的.
考虑到这一点,是否只有这样才能实现调用TStyleManager.TrySetStyle('Windows')
,显示表单,然后在表单关闭时将其设置回原始样式?
这里有很多关于XE2 VCL样式和按钮,面板,编辑等自定义颜色和VCL样式的问题.尽管我希望现有问题涵盖它,但它们并没有...因此DB控制网格似乎是另一个特殊情况.
在DB Control Grid VCL源代码中,它会注册一个样式挂钩: TCustomStyleEngine.RegisterStyleHook( TDBCtrlGrid, TScrollingStyleHook);
但是,如果您想编写自己的DB Control Grid VCL样式挂钩,那么这不是您想要的.如果你这样做,你可以将整个控件绘制成一个非常大的滚动条.
那么如何自定义数据库控制网格?完全禁用主题后,似乎仍然不允许自定义绘制活动行.因此,我认为必须编写自定义子类并覆盖Paint方法,并为此目的编写VCL样式钩子类.
似乎应该主要使用常规所有者绘制事件OnPaintPanel进行自定义,并且添加该事件(如果没有)修复了我看到的最大的VCL样式故障,TDBCtrlGrid
即它不会使用SelectedColor只是用灰色或其他任何基色来绘制所有东西.如果有人可以确认,或者告诉我,我们将不胜感激.
在XE2中有一个新功能:'styles',用于VCL(.vsf)和Firemonkey( .styles),还有一些在C:\ Program Files\Embarcadero\RAD Studio\9.0\Redist\styles目录中提供.
由于创建新样式似乎很容易,有没有"样式库"网站或博客?
是否有一个很好的VCL样式教程,我们看到如何动态(在运行时)加载/更改样式?
这应该适用于Delphi XE2及更高版本,因为XE2是第一个带有VCL样式的版本.
当我尝试使用下面的代码行禁用样式化VCL上的Button时
TButton(Sender).enabled:= False;
Run Code Online (Sandbox Code Playgroud)
我得到了这个结果(在运行时禁用了按钮)
而不是这个!(设计时禁用按钮)
有两个或多个相同颜色的按钮彼此相邻,一个被禁用而另一个被启用,这实在令人困惑
我在Delphi XE2应用程序中使用vcl样式,但是当我弹出TPopupmenu这是使用本机windows外观和感觉显示时,是否有任何方法将vcl样式颜色应用于TPopUpMenu?
我不知道它是不是一个bug ...但是当我设置除"Windows"之外的任何其他VCL样式时,窗口宽度会减小.
-
这有什么解决方案吗?
更新 我把它提交给QC:http://qc.embarcadero.com/wc/qcmain.aspx?d = 103697 希望他们能解决它...
启用VCL样式时,我需要更改TPanel的颜色.我尝试使用和修改"启用VCL样式更改编辑控件的颜色 "一文中列出的代码,但它不适用于TPanel.如何在启用VCL样式的情况下更改TPanel的颜色?
请参阅以下步骤以重现.适用于XE2,但不适用于XE8.
TButton
和一个TOpenDialog
OnClick
事件调用中OpenDialog1.Execute
使用XE8订阅更新1(Windows从8.1升级到10)进行测试
delphi ×10
vcl-styles ×10
delphi-xe2 ×9
delphi-xe8 ×1
firemonkey ×1
skinning ×1
topendialog ×1
vcl ×1
windows-10 ×1