![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
смена цвета фона приложения
Sod © (2004-10-19 08:42:00)смена цвета заднего фона - окно делается
RegisterClass (...hbrBackground HBRUSH
указываю цвет кисти = работает (цвет синий),
в процессе работы хочется изменить фон
окна на белый,но как? перегрузив класс?
Отрисовки не помогают,т.к делается вывод TextOut
(фон надписи-белый,шрифт-черный)и из-за того,
что фон окна синий-выглядит неочень,вот надо белый,
чтоб сливался.
На VCL выглядило бы так=
Form1.Color:=clBlue;
потом через время
l.visible:=true;
l.font.color:=clBlack;
Form1.Color:=clWhite;
Куда копать?
Nick Denry (2004-10-24 22:04:00) [1]2Игорь Шевченко © (24.10.04 17:19) [13]
<offtopic>
Адрес почтовый знаешь - пиши.
</offtopic>
Хорошо.
Игорь Шевченко (2004-10-24 17:19:00) [2]Nick Denry © (24.10.04 14:11) [11]
<offtopic>
Адрес почтовый знаешь - пиши.
</offtopic>
Nick Denry (2004-10-24 14:11:00) [3]Игорь Шевченко © (24.10.04 13:47) [10]
Мой совет, найди книжку Фэня Юаня <skip>
Если не найдешь - пиши в мыло.
Хорошо.
<offtopic>
Кстати, найдешь время обновленную версию моей книжки посмотреть?
Там порядком переделано, добавлено кой-чего...
</offtopic>
Nick Denry (2004-10-24 14:11:00) [4]Удалено модератором
Примечание: Дубль
Игорь Шевченко (2004-10-24 13:47:00) [5]Nick Denry © (23.10.04 13:51) [9]
> Так WM_ERASEBKGND похоже вызывается когда Rect полученный
> GetClientRect равняется PAINTSRTRUCT.rcPaint?
Нет конечно. Зависит от стиля класса (CS_HREDRAW, CS_VREDRAW), зависит от того, был ли нарисован фон на обновляемом участке окна, и т.п.
Мой совет, найди книжку Фэня Юаня, программирование графики для Windows, у меня есть очень хороший пример, показывающий, какие области окна участвуют в рисовании при сообщении WM_PAINT. Если не найдешь - пиши в мыло.
Nick Denry (2004-10-23 13:51:00) [6]Игорь Шевченко © (23.10.04 00:47) [8]
Так WM_ERASEBKGND похоже вызывается когда Rect полученный GetClientRect равняется PAINTSRTRUCT.rcPaint? Или как он определит, что перерисовать меобходимо весь фон?
Я, кстати (может к моему позору?), делал как раз Обработчик_WM_PAINT + GetClientRect + FillRect + остальное рисование
Игорь Шевченко (2004-10-23 00:47:00) [7]Nick Denry © (23.10.04 00:15) [7]
Нет, не тормоза. Вот если бы последовательность была: Обработчик_WM_PAINT + GetClientRect + FillRect + остальное рисование, тогда бы было так задумано, но были бы тормоза. Лучше GetClientRect + FillRect перенести в обработчик WM_ERASEBKGND, так как он вызывается из системного обработчика WM_PAINT только по необходимости нарисовать фон.
А в той последовательности, что ты предложил, окно будет содержать только фон, на мой взгляд.
Nick Denry (2004-10-23 00:15:00) [8]2Игорь Шевченко © (19.10.04 16:08) [4]
ТОрмоза? :)
Sod (2004-10-23 00:08:00) [9]спасибо за помощь! Вы хорошие ребята!
XProger (2004-10-19 16:39:00) [10]
var
Brush : HBRUSH;
Font : HFONT;
logfont : TLOGFONT;
logbrush : TLOGBRUSH;
BColor : COLORREF;
FColor : COLORREF;
...
WM_CREATE :
begin
// Инициализация цветов фона и шрифта
BColor := Windows.RGB(0, 0, 181);
FColor := Windows.RGB(255, 255, 0);
logbrush.lbStyle := BS_SOLID;
logbrush.lbHatch := 0;
logbrush.lbColor := BColor;
Brush := CreateBrushIndirect(logbrush);
logfont.lfEscapement := 0;
logfont.lfHeight := -11;
logfont.lfFaceName := 'Courier New';
Font := CreateFontIndirect(logfont);
end;
WM_CTLCOLORSTATIC:
begin
SelectObject(wParam, Font);
SetBkColor(wParam, BColor);
SetTextColor(wParam, FColor);
Result := Brush;
Exit;
end;
Игорь Шевченко (2004-10-19 16:08:00) [11]Nick Denry © (19.10.04 15:30) [3]
> Можно еще :
> GetClientRect + WM_PAINT + FillRect:
А теперь сам подумай, что будет.
Nick Denry (2004-10-19 15:30:00) [12]2Игорь Шевченко © (19.10.04 14:52) [2]
Можно еще :
GetClientRect + WM_PAINT + FillRect:
2Sod (19.10.04 08:42)
А вообще вариантов куча :)
Игорь Шевченко (2004-10-19 14:52:00) [13]
> хочется изменить фон
> окна на белый,но как? перегрузив класс?
WM_ERASEBKGND ?
Digitman (2004-10-19 12:18:00) [14]
> смена цвета фона приложения
у "приложения" нет ни фона ни тем более "цвета фона"
эти атрибуты есть у окон, которые процессприложения может вообще не создавать, а можт и создать более чем одно
> Куда копать?
копать в сторону трассировки кода и изучения алгоритма метода, вызываемого при установке св-ва TCustomForm.Color