2010-08-13 24 views
5

Chcę narysować granicę tematyczną TEdit w Paintbox. Kod musi działać w systemie Windows Vista i 7. Próbowałem wykonać następujące czynności. Działa tylko pod Windows XP.Rysowanie granicy tematycznej 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; 

Pod systemem Windows XP wszystko jest w porządku. Ale pod Windows Vista i 7 granica jest pomalowana na ciemnoszaro. Wszystkie 4 strony w tym samym kolorze. Ale TEdit pod Vistą wygląda inaczej: Górna granica ma ciemnoszary kolor. Prawa krawędź jest średnio szara. Granice lewe i dolne mają jasnoszarą barwę. Mam nadzieję, że rozumiesz różnicę. Jak pomalować to we właściwy sposób? Dzięki!

+1

Pod http://www.delphipraxis.net/153127-theme-rahmen-vom-tedit-zeichnen.html można znaleźć niemiecki wątek dotyczący tego problemu. Jednak bez rozwiązania. –

Odpowiedz

5

Spróbuj:

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 

Jeśli chcesz, aby Twój kod do uruchomienia w XP należy upewnić, że warunkowa, jak na WinXP należy użyć 2 jeden.

+1

+1 Działa, naprawdę! –

+1

Dziękujemy! To działa! – TomCat500