2010-08-13 29 views
5

Quiero dibujar el borde temático de un TEdit en un Paintbox. El código debe ser funcional en Windows Vista y 7. He intentado lo siguiente. Funciona solo bajo Windows XP.Dibujar el borde temático de un 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; 

En Windows XP, todo está correcto. Pero en Windows Vista y 7, el borde está pintado en gris oscuro. Los 4 lados del mismo color Pero un TEdit bajo Vista se ve diferente: el borde superior tiene un gris oscuro. El borde derecho es gris medio. Los bordes izquierdo e inferior tienen un gris claro. Espero que entiendas la diferencia. ¿Cómo pintarlo de la manera correcta? ¡Gracias!

+1

En http://www.delphipraxis.net/153127-theme-rahmen-vom-tedit-zeichnen.html puede encontrar un hilo alemán sobre este tema. Sin embargo, no hay solución. –

Respuesta

5

Probar:

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 

Si desea que su código se ejecute en XP se debe hacer esa condicional, como en WinXP que debe utilizar el segundo uno.

+1

+1 ¡Funciona, de hecho! –

+1

¡Gracias! ¡Funciona! – TomCat500

Cuestiones relacionadas