【发布时间】:2011-03-21 17:00:40
【问题描述】:
我想要一个可选择的标签控件,就像屏幕截图中的那个。可以使用无边框 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;
它现在是透明的,但需要做其他事情,因为在选择文本时绘画无法正常工作。这种行为很难解释,我会进一步调查并在这里更新......
【问题讨论】:
-
Windows 对话框中显示的控件实际上只是一个普通的编辑控件。为了在您的程序中获得相同的效果,我认为这只是在编辑控件和页面控件上正确配置的问题。另外,对我来说,短语“简单的 PageControl”意味着您使用了 Delphi 提供的 TPageControl 类,但这不是您在图片中显示的内容。
-
是的,我还怀疑 Windows 对话框使用了普通的编辑控件,但它的背景恰好是单色的,所以可以。我使用的 DevEx TabControl 的行为方式与 Delphi TPageControl 相同,因此没有区别。至于“只是在编辑控件和页面控件上正确配置的问题”,我认为这是不可能的,因此提出了这个问题。
-
Windows XP 对话框使用渐变,并且这些对话框上的“可选标签”(编辑控件)正确显示渐变,即使在聚焦时也是如此。所以,这是可能的。
标签: windows delphi controls vcl