![]() |
![]() ![]() ![]() ![]() ![]() |
![]() |
Задать цвет фона для MDI-формыDelphi , Программа и Интерфейс , MDI приложенияЗадать цвет фона для MDI-формы
Оформил: DeeCo {******************************************************************************* * * 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) без изменения цветов ее дочерних контролов. Вот подробный анализ того, что код делает: Обзор
Код определяет класс Основной логик
В методе В методе Обработка WM_ERASEBKGND
Процедура Для всех других сообщений она вызывает оригинальную процедуру ( Альтернативное решение
Если вы хотите установить другой фоновый цвет для вашей формы MDI, просто измените вызов
Это изменит фоновый цвет формы MDI на красный. Вы можете заменить Задать цвет фона для MDI-формы без изменения цвета лежащих на ней объектов можно с помощью переопределения процедуры обработки сообщений в форме и использования функции FillRect. Комментарии и вопросыПолучайте свежие новости и обновления по Object Pascal, Delphi и Lazarus прямо в свой смартфон. Подпишитесь на наш Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта. :: Главная :: MDI приложения ::
|
||||
©KANSoftWare (разработка программного обеспечения, создание программ, создание интерактивных сайтов), 2007 |