delphi - TToolBar 在非主题 Windows 上绘制不正确

标签 delphi toolbar

最近我注意到我们的一个应用程序在非主题 Windows 上绘制不正确。

工具栏是由嵌套在 TToolbar 中的 TSpeedButton 构建的,TToolbar 又位于页面控件内。

在主题 Windows 上,一切看起来都不错。嗯,不太好,但是还可以。

TToolbar on themed Windows

但是,在非主题 Windows 上,按钮内部会出现奇怪的垂直线。

Toolbar on non-themed Windows

我四处搜寻,但找不到任何有关此类问题的报告。 (很可能只是我的搜索功夫很糟糕。)有人知道这个问题的描述,或者更好的是,解决办法吗?

最佳答案

TToolbar 并非旨在容纳 TSpeedButtons。它旨在容纳 TToolButtons,这些按钮不仅可以位于 TToolBar 上,而且经过专门编写,可以在栏上正确运行。

您遇到的问题(特别是按原样绘制分隔符)是因为您使用不兼容的 TSpeedButton 并使用 TToolButton 分隔符分隔它们。 TSpeedButtonTPanel 上运行良好,IIRC 正是为此而设计的,早于 MS 在 ComCtl 中提供 TToolBar/TToolButton 对。

一个快速测试应用程序,其中包含带有 TToolButtonsTToolBar 和带有 TSpeedButtonsTPanel 应该看看这是否解决了问题。

编辑:您的评论不太正确。 :)

enter image description here

TToolBar.AllowTextButtons设置为True,然后将您想要更宽的按钮设置为tbsTextButton样式。正如您所看到的,我使用了一个普通按钮、一个分隔符、一个文本按钮(带有文本和图像)、一个分隔符和另一个普通按钮。

关于delphi - TToolBar 在非主题 Windows 上绘制不正确,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6759815/

相关文章:

delphi - 用位图平铺填充背景

c# - 检测用户何时按下工具栏中的红色 X(右上角)

android设计库工具栏阴影

c++ - 哪个事件打开一个wxToolBar下拉菜单?

java - 如何在Java Swing中使用Label实现 View ?

delphi - iOS应用程序名称带有单独的单词

multithreading - 如何在不调用 .Sync 的情况下处理 AsyncCalls 函数中抛出的异常?

delphi - Delphi中Ord函数的实现

delphi - 缓慢图像缩放的数学

iphone - 将图像转换为 iPhone 工具栏图标