Карта сайта Kansoftware
НОВОСТИУСЛУГИРЕШЕНИЯКОНТАКТЫ
KANSoftWare

Задать цвет фона для MDI-формы

Delphi , Программа и Интерфейс , MDI приложения

Задать цвет фона для MDI-формы

Оформил: DeeCo
Автор: http://www.swissdelphicenter.ch

{******************************************************************************* 
 * 
 *  Hintergrundfarbe eines MDI-Formulars setzen ohne die Farbe der darauf 
 *  liegenden Objekte wie TGroupBox oder TPageControl zu verandern. 
 * 
 *  Setting the Background color of a MDI Form without changing the color 
 *  of overlayed objects like TGroupBox or TPageControl. 
 * 
 ******************************************************************************}

 unit Unit1;

 interface

 uses
   Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
   Dialogs;

 type
   TForm1 = class(TForm)
   private
     FClientInstance: TFarProc;
     FPrevClientProc: TFarProc;
     BkBrush: HBRUSH;
     procedure ClientWndProc(var Message: TMessage);
   public
     constructor Create(AOwner: TComponent); override;
     destructor Destroy; override;
   end;

 implementation

 {$R *.dfm}

 constructor TForm1.Create(AOwner: TComponent);
 begin
   inherited;
   BkBrush := CreateSolidBrush(clGray);
   FClientInstance := Classes.MakeObjectInstance(ClientWndProc);
   FPrevClientProc := Pointer(GetWindowLong(ClientHandle, GWL_WNDPROC));
   SetWindowLong(ClientHandle, GWL_WNDPROC, Longint(FClientInstance));
 end;

 destructor TForm1.Destroy;
 begin
   DeleteObject(BkBrush);
   inherited;
 end;

 procedure TForm1.ClientWndProc(var Message: TMessage);
 var
   DC: HDC;
   BrushOld: HBRUSH;
 begin
   with Message do
    begin
     case Msg of
       WM_ERASEBKGND:
         begin
           DC := TWMEraseBkGnd(Message).DC;
           BrushOld := SelectObject(DC, BkBrush);
           FillRect(DC, ClientRect, BkBrush);
           SelectObject(DC, BrushOld);
           Result := 1;
         end;
       else
         Result := CallWindowProc(FPrevClientProc, ClientHandle, Msg, wParam, lParam);
     end;
   end;
 end;

 end.

Это код на Delphi, который устанавливает фоновое цветное поле для формы MDI (Multiple Document Interface) без изменения цветов ее дочерних контролов. Вот подробный анализ того, что код делает:

Обзор Код определяет класс TForm1, который наследуется от TForm. Он переопределяет методы Create и Destroy для настройки и очистки фоновой кисти.

Основной логик В методе Create: * Создается твердый серыйbrush (BkBrush) с помощью функции CreateSolidBrush. * Процедура ClientWndProc зарегистрирована как новый процедур для клиентской области формы MDI с помощью SetWindowLong. * Оригинальная процедура сохраняется в FPrevClientProc.

В методе Destroy: * Фоновая кисть (BkBrush) освобождается с помощью функции DeleteObject.

Обработка WM_ERASEBKGND Процедура ClientWndProc обрабатывает сообщение WM_ERASEBKGND, которое отправляется, когда клиентская область требует перерисовки. Вот, что она делает: 1. Получается handle для контекста устройства (DC) с помощью TWMEraseBkGnd. 2. Выбирается фоновая кисть (BkBrush) как текущая кисть с помощью SelectObject. 3. Заливается клиентская прямоугольник цветом фона с помощью FillRect. 4. Восстанавливается оригинальная кисть с помощью SelectObject. 5. Возвращается код успешной обработки (1).

Для всех других сообщений она вызывает оригинальную процедуру (FPrevClientProc) для разрешения нормальной обработки сообщения.

Альтернативное решение Если вы хотите установить другой фоновый цвет для вашей формы MDI, просто измените вызов CreateSolidBrush в методе Create:

BkBrush  := CreateSolidBrush(clRed); // Установка цвета фона в красный вместо серого

Это изменит фоновый цвет формы MDI на красный. Вы можете заменить clRed любым валидным константой цвета или RGB-значением.

Задать цвет фона для MDI-формы без изменения цвета лежащих на ней объектов можно с помощью переопределения процедуры обработки сообщений в форме и использования функции FillRect.


Комментарии и вопросы

Получайте свежие новости и обновления по Object Pascal, Delphi и Lazarus прямо в свой смартфон. Подпишитесь на наш Telegram-канал delphi_kansoftware и будьте в курсе последних тенденций в разработке под Linux, Windows, Android и iOS




Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.


:: Главная :: MDI приложения ::


реклама


©KANSoftWare (разработка программного обеспечения, создание программ, создание интерактивных сайтов), 2007
Top.Mail.Ru

Время компиляции файла: 2024-12-22 20:14:06
2025-05-01 11:12:16/0.0057010650634766/1