Delphi 我如何制作一个没有透明文本(即:它忽略主题)的复选框?

Delphi 我如何制作一个没有透明文本(即:它忽略主题)的复选框?,delphi,themes,Delphi,Themes,我如何制作一个没有透明文本(即:它忽略主题)的复选框?我被要求做一些非常规的事情——在分组框的标题处放一个复选框 在XP中,它看起来不是很好 (来源:) 接下来,我想试试我在互联网上听说的SetWindowTheme(CheckBox1.Handle,'','')。然后你会得到一个白色的背景,但它不会与控件的颜色一起绘制 (来源:) 我们怎样才能做到这一点 谢谢大家!! mp一个简单的解决方案是在TGroupBox.Caption属性中放入足够的空格字符。一个更复杂的解决方案是从TGroup

我如何制作一个没有透明文本(即:它忽略主题)的复选框?我被要求做一些非常规的事情——在分组框的标题处放一个复选框

在XP中,它看起来不是很好


(来源:)

接下来,我想试试我在互联网上听说的SetWindowTheme(CheckBox1.Handle,'','')。然后你会得到一个白色的背景,但它不会与控件的颜色一起绘制


(来源:)

我们怎样才能做到这一点

谢谢大家!!
mp

一个简单的解决方案是在TGroupBox.Caption属性中放入足够的空格字符。一个更复杂的解决方案是从TGroupBox派生,并在Paint方法中使用FillRect/DrawParentBackground来覆盖线条。

过去,我只是在复选框后面添加了一个空白的TLabel


这会让维护有点麻烦,不过TCheckbox上的Color属性不是这样做的吗

在上面的图片中,我认为如果您将颜色设置为与控件的颜色相同,则可以得到所需的颜色。这将隐藏作为控件一部分的文本下的行,并使其融入

由于您事先不知道颜色(因为不知道使用的是什么主题),因此您希望在创建表单时在运行时动态执行此操作,例如:

Checkbox.Color := Control.Color;

谢谢大家的回答。最后,我做到了:

  • 以编程方式将groupbox标题的开头填充空格至正确的宽度

  • 将复选框(不带标题)移动到标题区域


  • 这不是一个完美的解决方案,但似乎还可以。

    什么版本的Delphi?使用Delphi 6,主题包处于活动状态,我可以获得您想要的行为,而无需任何额外考虑。Scott,Delphi 6本机不支持主题,因此您必须使用Mike Lischke的主题库,我记得在这里对分组框进行了特别处理。此人提出的其他问题表明他正在使用Delphi 2009。非常感谢你的回答!罗布说得对;我使用的是Delphi2009。Rob,谢谢你的澄清,我使用的是Mike Lischke的主题库。我不记得我是从哪里得到这个印象的,但出于某种原因,我认为Delphi更高版本中的主题代码只是Mike的代码,所以我认为它可能更像苹果对苹果。+1@x-ray我认为这是最好的解决方案。这意味着你仍然会得到一个主题背景(这是你想要的,否则你会得到一个与背景不匹配的块),并且你会得到一个很好的间隔来放置你的复选框。他也可以用他提到的代码获得白色背景,调用
    SetWindowTheme
    。第二张照片也不是他想要的。他希望复选框的背景与组框和组框的父对象的背景相匹配。任何给定控件的背景都不一定是纯色。谢谢Rob,我没有完全正确地回答这个问题。我修改了它,现在建议动态地将颜色设置为与控件相同的颜色。