|
|
Регистрация Восстановить пароль |
Повторная активизация e-mail |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
|
Опции темы | Поиск в этой теме |
21.01.2008, 21:14 | #1 |
Пользователь
Регистрация: 21.01.2008
Сообщений: 32
|
Цвет фона кнопки
Не подскажете, уважаемые сэры, почему не работает данный код, с помощью которого пытаюсь изменить цвет фона кнопки, путем обработки WM_ERASEBKGND (как видите, пробовал варианты).
WM_ERASEBKGND : begin //Result:=CallWindowProc(Pointer(T.De fProc),CHhWnd, nMsg, wParam, lParam); NewBrush := CreateSolidBrush(clBlack); OldBrush := SelectObject(wParam,NewBrush); //GetClipBox(wParam,R); GetClientRect(CHhWnd,R); //SaveMessage(IntToStr(wParam)); //PatBlt(wParam,R.left, R.top, R.Right-R.Left, R.Bottom-R.Top, PATCOPY); //Rectangle(wParam, R.left, R.top, R.Right-R.Left, R.Bottom-R.Top); FillRect(wParam,R,NewBrush); SelectObject(wParam,OldBrush); DeleteObject(NewBrush); Result:=1; //InvalidateRect(CHhWnd,@R,true); end; На всякий случай, кнопка создается со след. свойствами: WS_CLIPSIBLINGS or ws_Child or ws_Visible or bs_PushButton |
21.01.2008, 21:31 | #2 |
Android Developer
Старожил Подтвердите свой е-майл
Регистрация: 19.02.2007
Сообщений: 3,708
|
Может потому что вы ловите сообщение отчистки, а не отрисовки. WM_PAINT - если я неошибаюсь обрабатывайте...
|
22.01.2008, 00:11 | #3 |
Пользователь
Регистрация: 21.01.2008
Сообщений: 32
|
Да, конечно, можно и через WM_PAINT, но сами понимаете, если бы работал вышеприведенный код, то это бы было бы проще гораздо. А так, через WM_PAINT и текст кнопки "ручками" придется самому тогда выводить и прочее...
|
22.01.2008, 00:28 | #4 |
Android Developer
Старожил Подтвердите свой е-майл
Регистрация: 19.02.2007
Сообщений: 3,708
|
Да кнопку руками делать нечего Так что...
|
22.01.2008, 00:51 | #5 |
Пользователь
Регистрация: 21.01.2008
Сообщений: 32
|
Да уже и нарисовал все. Через WM_PAINT
А проблема с WM_ERASEBKGND в том, что она работает только если кнопка BS_OWNERDRAW, т.е. по-любому все надо рисовать самому и так и эдак, во втором случае через WM_DRAWITEM. |
22.01.2008, 08:22 | #6 |
Белик Виталий :)
Старожил
Регистрация: 23.07.2007
Сообщений: 57,097
|
Так а ты убери в ней BS_OWNERDRAW
I'm learning to live...
|
22.01.2008, 21:12 | #7 | |
Пользователь
Регистрация: 21.01.2008
Сообщений: 32
|
Когда формулировал вопрос, Stilet, ведь специально написал, с каким стилем создаю:
Цитата:
|
|
23.01.2008, 11:01 | #8 |
Новичок
Джуниор
Регистрация: 18.01.2008
Сообщений: 1,720
|
Вся кнопка рисуется только в WM_PAINT с помощью DrawFrameControl (строчек десять, буквально ). WM_ERASEBKGND у нее ничего не делает.
|
23.01.2008, 13:14 | #9 |
Пользователь
Регистрация: 21.01.2008
Сообщений: 32
|
А нет небольшого примерчика работы с этой функцией DrawFrameControl? А то я всегда обычно тупо рисую банальными GDI функциями.
|
23.01.2008, 14:19 | #10 |
Новичок
Джуниор
Регистрация: 18.01.2008
Сообщений: 1,720
|
DrawFrameControl тоже банальная функция Только здесь она Вам не подойдет потому, что рисует системными цветами. Я имел в виду, что "стандартная" кнопка так рисуется. Лучше будет воспользоваться DrawEdge, особенно с флагом BF_ADJUST (правда тоже с минусом - рамка рисуется системными цветами). Не знаю насчет примеров, но это настолько простые функции, что может и просто документации хватит?
http://msdn2.microsoft.com/en-us/library/ms534865.aspx http://msdn2.microsoft.com/en-us/lib...82(VS.85).aspx А "крашеную" кнопку проще всего, пожалуй, на основе готовой картинки рисовать, но тем не менее, не в WM_ERASEBKGND, а в WM_PAINT. |
|
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Разный цвет фона в таблице (php) | Lonix | PHP | 2 | 04.10.2008 21:39 |
SetBkColor не меняет цвет фона | EdNovice | Win Api | 3 | 18.02.2008 23:59 |
Цвет кнопки | Snake_ua | Общие вопросы Delphi | 23 | 04.02.2008 18:47 |
Как изменить цвет шрифта кнопки + объявление OnClick | Yury | Общие вопросы Delphi | 7 | 04.05.2007 04:55 |
Стили ячеек. Цвет фона, шрифт: размер, начертание .. | Virtson | Microsoft Office Excel | 3 | 10.03.2007 16:19 |