Windows 是否有可选择的标签控件?

Windows 是否有可选择的标签控件?,windows,delphi,controls,vcl,Windows,Delphi,Controls,Vcl,我想要一个可选的标签控件,就像屏幕截图中的那个。它可以用一个无边界的TEdit来完成,但我想知道是否有另一种方法可以处理渐变背景 为了澄清这一点,我使用了一个简单的页面控件,因为Win XP有渐变绘图,所以放置在页面上的无边界TEdit无法完美融合: 更新: 我加了一句话,成功地走到了一半 procedure CNCtlColorStatic(var AMsg: TWMCtlColorStatic); message CN_CTLCOLORSTATIC; procedure TTransp

我想要一个可选的标签控件,就像屏幕截图中的那个。它可以用一个无边界的TEdit来完成,但我想知道是否有另一种方法可以处理渐变背景

为了澄清这一点,我使用了一个简单的页面控件,因为Win XP有渐变绘图,所以放置在页面上的无边界TEdit无法完美融合:

更新:

我加了一句话,成功地走到了一半

procedure CNCtlColorStatic(var AMsg: TWMCtlColorStatic); message CN_CTLCOLORSTATIC;

procedure TTransparentEdit.CNCtlColorStatic(var AMsg: TWMCtlColorStatic);
begin
  with ThemeServices do
    if ThemesEnabled then
    begin
      SetBkMode(AMsg.ChildDC, Windows.TRANSPARENT);
      DrawParentBackground(Handle, AMsg.ChildDC, nil, False);
      AMsg.Result := GetStockObject(NULL_BRUSH);
    end
    else
      inherited;
end;

它现在是透明的,但还需要做一些其他的事情,因为在选择文本时绘制无法正常工作。这种行为很难解释,我将进一步调查并在这里更新…

正常的方法是使用无边界(
边界样式:=bsNone
)和只读(
只读:=true
TEdit
,如您所说,可能与
颜色:=clBtnFace
结合使用。但是,渐变背景并不常见,并且没有现成的支持。然而,自己动手并不难。我将尝试在几分钟内找到一个简单的解决方案

更新 在Windows编辑框中绘图并不是一件小事。你确定你需要渐变背景吗?当然,你可以编写自己的控件——编写一个类似TEdit的控件其实并不难。我这样做过几次。()

更新2 我自己还没有尝试过,它可能不适用于视觉主题,但您可以尝试创建一个透明的“TEdit”控件:http://www.delphi3000.com/articles/article_935.asp?SK=
现在我试过了,但它在Windows7和Aero下根本不起作用。

标签是不可编辑的。TLabel甚至无法接收焦点,因为它不是从TWinControl继承的

我会用TEdit模拟你的屏幕截图:

object Edit1: TEdit
  BorderStyle = bsNone
  ParentColor = True
  ReadOnly = True
  Text = 'Editable label'
end

(您可以将上面的代码复制并粘贴到表单中)

您提供的链接中的类确实是完全透明的(至少在XP中),但只有当它没有聚焦时,一旦聚焦,背景将以单一颜色绘制,但我会调查源代码,也许我可以找出一些东西,thanks@dmauric.mp:好,但要小心:您的一些最终用户可能正在运行Windows Vista或Windows 7,他们可能不太高兴……我修改了代码,使其在聚焦时也变得透明。我也在Xp、Vista和W7(Aero)中试用过,它似乎在所有这些系统中都能正常工作,能解释一下您遇到了什么问题吗?@dmauric.mp:愿意分享您的修改吗?@Marjan Venema:没有影响W7运行的内容,它只是有ftTransparent:=false;在多恩特,我把它移走了。但仔细检查后,我意识到它并没有真正起作用,我只是第一次没有注意到。。。很抱歉造成混淆Windows对话框上显示的控件实际上只是一个普通的编辑控件。要在程序中获得相同的效果,我认为只需在编辑控件和页面控件上正确配置即可。另外,对我来说,“simple PageControl”一词意味着您使用了Delphi提供的TPageControl类,但这不是您在图片中所显示的。是的,我也怀疑windows对话框使用的是普通编辑控件,但它的背景恰好是单色的,所以可以工作。我使用的DevEx选项卡控件的行为方式与Delphi TPageControl相同,因此没有什么区别。至于“只是在编辑控件和页面控件上正确配置的问题”,我认为这是不可能的,因此这个问题出现了。Windows XP对话框使用渐变,这些对话框上的“可选标签”(编辑控件)正确地显示渐变,即使在聚焦时也是如此。所以,这是可能的。你有没有在分级背景下尝试过?在我的D2009中,编辑使用ParentColor,但父对象的颜色属性只是其渐变颜色之一。(使用TMS软件提供的TAdvPanel作为编辑的后置菜单)。因此,编辑仍然以纯色显示。设置
ParentBackground=True
以指示控件使用其父控件的主题背景<当父对象甚至不使用其颜色时,代码>父对象颜色是不相关的。@Rob Kennedy:TED它没有ParentBackground属性。对于其他控件,它在ControlStyle中实现为csParentBackground,但这还不足以使TEdit变得透明。RentBackground在TEdit中受到保护。是的,在TWinControl中是这样的,但将ParentBackground设置为true(即将csParentBackground添加到ControlStyle)并不能使TEdit透明。我用CN_CTLCOLORSTATIC处理程序更新了这个问题,它确实使问题变得透明,但它有不必要的副作用(或者是不够的)。