2010-08-13 88 views
5

我想在一个Paintbox中绘制一个TEdit的主题边框。该代码必须在Windows Vista和7下运行。我尝试了以下操作。它只能在Windows XP下运行。绘制一个TEdit的主题边框

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下,边框被涂成深灰色。所有4面都是同一种颜色。但Vista下的TEdit看起来不同:顶部边框有深灰色。右边框中灰色。左边框和底边框有浅灰色。我希望你明白不同之处。如何以正确的方式绘制它?谢谢!

+1

根据http://www.delphipraxis.net/153127-theme-rahmen-vom-tedit-zeichnen.html你可以找到关于这个问题的德语线索。但是没有解决方案 – 2010-08-13 13:37:48

回答

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,你应该使用:第二个。

+1

+1工程,的确如此! – 2010-08-31 17:43:12

+1

谢谢!有用! – TomCat500 2010-09-07 09:24:28