2010-08-13 85 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