Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

смена цвета фона приложения


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


Наверх

Титульная страница Поиск, карта сайта Написать письмо