2009-10-01 25 views
1

我怎样才能使TCheckbox没有透明文本(即:它忽略主题)?我被要求做一些非常规的事情 - 在组合框标题的地方放上一个复选框。我怎样才能使TCheckbox没有透明文本(即:它忽略主题)?

在XP中,它看起来不太好。

with xp themes http://xrw.bc.ca/download/so/checkboxwithxptheme.png

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

no theme http://xrw.bc.ca/download/so/checkboxwithnotheme.png

我们如何能做到这一点?

谢谢! mp

+0

什么版本的Delphi?使用Delphi 6和主题包活动,我得到你想要的行为,没有任何额外的考虑。 – 2009-10-01 18:54:37

+0

Scott,Delphi 6本身不支持主题,所以你必须使用Mike Lischke的主题库,在那里我回想起特别特别对待组合框的问题。来自这个人的其他问题表明他正在使用德尔福2009年。它是橙子的苹果。 – 2009-10-02 02:58:21

+0

谢谢你的回答!抢劫是正确的;我使用德尔福2009年。 – 2009-10-02 16:46:57

回答

1

谢谢大家的答复。最后,我做到了这一点:

  1. 以编程方式用空格填充groupbox标题的开头,并将空格填充到正确的宽度。

  2. 将复选框(没有标题)移动到标题区域。

这不是一个完美的解决方案,但它似乎确定。

2

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

+0

+1 @ x-ray我认为这是你最好的解决方案。这意味着你仍然会得到一个主题背景(你想要的,否则你会得到一个不适合背景的区块),并且你会在你的复选框中找到一个很好的差距。 – Nat 2009-10-01 22:52:11

0

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

这使得维护一个有点疼痛虽然

0

不会对TCheckbox Color属性做到这一点的?

在上图中,我认为如果将Color设置为与控件的颜色相同,就可以得到你想要的。这将隐藏作为控件一部分的文本中的行,并使其混合。

由于您不会提前知道颜色(由于不知道正在使用哪个主题),因此您需要在创建表单时,在运行时动态执行此操作,例如:

Checkbox.Color := Control.Color; 
+0

他还可以用他提到的代码获得白色背景,调用'SetWindowTheme'。第二张照片不是他想要的,也不是。他希望复选框的背景与组框的背景和组框的父组件的背景相匹配。任何给定控件的背景不一定是纯色。 – 2009-10-02 02:59:32

+0

感谢罗布,我没有正确回答。我已经修改它,现在建议将颜色动态设置为与控件相同。 – lkessler 2009-10-02 14:19:00

相关问题