2010-08-13 2 views
5

Я хочу нарисовать тематическую рамку TEdit в Paintbox. Код должен функционировать под 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 стороны одного цвета. Но TEdit под Vista выглядит по-другому: верхняя граница имеет темно-серый цвет. Правая граница средняя серая. Левая и нижняя границы имеют светло-серый цвет. Надеюсь, вы понимаете разницу. Как правильно нарисовать его? Благодаря!

+1

Под http://www.delphipraxis.net/153127-theme-rahmen-vom-tedit-zeichnen.html вы можете найти немецкую тему по этому вопросу. Однако никакого решения нет. –

ответ

5

Try:

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 вы должны использовать 2-ым.

+1

+1 Работает, действительно! –

+1

Спасибо! Оно работает! – TomCat500

Смежные вопросы