2010-08-13 20 views
5

Voglio disegnare il bordo a tema di un TEdit in un Paintbox. Il codice deve essere funzionante con Windows Vista e 7. Ho provato quanto segue. Funziona solo con Windows XP.Disegna bordo a tema di 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; 

In Windows XP tutto è OK. Ma sotto Windows Vista e 7 il bordo è dipinto in grigio scuro. Tutti e 4 i lati nello stesso colore. Ma un TEdit sotto Vista ha un aspetto diverso: il bordo superiore ha un grigio scuro. Il bordo destro è grigio medio. I bordi sinistro e inferiore hanno un grigio chiaro. Spero tu capisca la differenza. Come dipingerlo nel modo giusto? Grazie!

+1

Sotto http://www.delphipraxis.net/153127-theme-rahmen-vom-tedit-zeichnen.html è possibile trovare una discussione tedesca riguardante questo problema. Tuttavia nessuna soluzione. –

risposta

5

Prova:

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 

Se si desidera che il codice per l'esecuzione in XP si dovrebbe fare quel condizionale, come su WinXP si dovrebbe utilizzare il 2 °.

+1

+1 Funziona, davvero! –

+1

Grazie! Funziona! – TomCat500

Problemi correlati