绘制TEdit的主题边框

5

我想在Paintbox中绘制TEdit的主题边框。该代码必须在Windows Vista和7下正常工作。我已经尝试了以下方法,但只能在Windows XP下运行。

var
  Details: TThemedElementDetails;   //uses Themes
begin
  if ThemeServices.ThemesEnabled then
  begin
    Details := ThemeServices.GetElementDetails(teEditRoot);
    ThemeServices.DrawElement(PaintBox1.Canvas.Handle, Details, PaintBox1.ClientRect);
  end;
end;

在Windows XP下一切正常。但是在Windows Vista和7下,边框会被涂成深灰色。所有四个边框的颜色都相同。但是在Vista下,TEdit看起来不同:顶部边框为深灰色,右侧边框为中灰色,左侧和底部边框为浅灰色。我希望你能理解这种差异。如何以正确的方式进行绘制?谢谢!

1
在http://www.delphipraxis.net/153127-theme-rahmen-vom-tedit-zeichnen.html,您可以找到一个关于此问题的德语主题。然而没有解决方案。 - Uli Gerhardt
1个回答

5

尝试:

R := Rect(15, 15, 80, 30);
DrawThemeBackground(ThemeServices.Theme[teEdit], PaintBox1.Canvas.Handle, EP_EDITBORDER_NOSCROLL, ETS_NORMAL, R, @R);
/// DrawThemeBackground(ThemeServices.Theme[teEdit], PaintBox1.Canvas.Handle, EP_EDITTEXT, ETS_NORMAL, R, @R); <<< XP Behaviour

如果您希望您的代码在XP上运行,您应该使其条件化,因为在WinXP上您应该使用第二个。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接