有可选的标签控件吗?

时间:2010-07-27 16:06:48

标签: windows delphi controls vcl

我想要一个可选择的标签控件,就像截图中的那个一样。它可以使用无边框TEdit完成,但我想知道是否有另一种方法可以使用渐变背景?

example http://usera.ImageCave.com/brk303/SelectableLabel.png.jpg

为了澄清,我使用的是一个简单的PageControl,由于Win XP具有渐变绘图,因此放置在页面上的无边界TEdit不能完美融合:

Edit on a PageControl http://usera.ImageCave.com/brk303/Gradient.png.jpg

更新

我设法通过添加

获得了一半
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;

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

2 个答案:

答案 0 :(得分:8)

标签不可编辑。 TLabel甚至无法获得焦点,因为它不会从TWinControl继承。

我使用TEdit来模仿您的屏幕截图:

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

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

答案 1 :(得分:3)

正如您所说,正常的方法是使用无边框(BorderStyle := bsNone)和只读(ReadOnly := trueTEdit,可能与Color := clBtnFace结合使用。但是,渐变背景并不常见,并且没有开箱即用的支持。但是,自己动手并不难。我会在几分钟内尝试找到一个简单的解决方案。

更新

在Windows编辑框中绘图并非易事。您确定需要渐变背景吗?你当然可以编写自己的控件 - 编写类似TEdit的控件并不是那么难。我已经这样做了几次。 (Proof

更新2

<德尔> 我自己没有尝试过,它可能不适用于视觉主题,但你可以尝试创建一个透明的`TEdit`控件:http://www.delphi3000.com/articles/article_935.asp?SC =

现在我尝试了它,但在Windows 7下使用Aero它根本不起作用。