绘制TEdit的主题边框

Tom*_*500 5 delphi

我想在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;
Run Code Online (Sandbox Code Playgroud)

在Windows XP下,一切正常.但在Windows Vista和7下,边框涂成深灰色.所有4面都是相同的颜色.但Vista下的TEdit看起来不同:顶部边框呈深灰色.右边框为中灰色.左边和右边的边框为浅灰色.我希望你能理解其中的差异.如何以正确的方式绘画?谢谢!

Tri*_*dad 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
Run Code Online (Sandbox Code Playgroud)

如果你想让你的代码在XP中运行,那你就应该有条件,就像在WinXP上你应该使用第二个.