我想要一个可选择的标签控件,就像截图中的那个一样。它可以使用无边框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;
它现在是透明的,但还需要做其他事情,因为选择文本时的绘画无法正常工作。这种行为很难解释,我会进一步调查并在这里更新......
答案 0 :(得分:8)
标签不可编辑。 TLabel甚至无法获得焦点,因为它不会从TWinControl继承。
我使用TEdit来模仿您的屏幕截图:
object Edit1: TEdit
BorderStyle = bsNone
ParentColor = True
ReadOnly = True
Text = 'Editable label'
end
(您可以将上述代码复制并粘贴到表单中)
答案 1 :(得分:3)
正如您所说,正常的方法是使用无边框(BorderStyle := bsNone
)和只读(ReadOnly := true
)TEdit
,可能与Color := clBtnFace
结合使用。但是,渐变背景并不常见,并且没有开箱即用的支持。但是,自己动手并不难。我会在几分钟内尝试找到一个简单的解决方案。
在Windows编辑框中绘图并非易事。您确定需要渐变背景吗?你当然可以编写自己的控件 - 编写类似TEdit的控件并不是那么难。我已经这样做了几次。 (Proof)
现在我尝试了它,但在Windows 7下使用Aero它根本不起作用。