Как сделать родительское окно с фоновым рисунком в клиентской области

{codecitation class=»brush: pascal; gutter: false;» width=»600px»}

Сначала установите свойство формы FormStyle в fsMDIForm.

Затем разместите Image на форме и загрузите в него картинку.

Найдите { Private Declarations } в обьявлении формы и добаьте следующие строки:

FClientInstance: TFarProc;

FPrevClientProc: TFarProc;

procedure ClientWndProc(var message: TMessage);

Добавьте следующие строки в разделе implementation:

procedure TMainForm.ClientWndProc(var message: TMessage);

var

Dc: hDC;

Row: Integer;

Col: Integer;

begin

with message do

case Msg of

WM_ERASEBKGND:

begin

Dc := TWMEraseBkGnd(message).Dc;

for Row := 0 to ClientHeight div Image1.Picture.Height do

for Col := 0 to ClientWidth div Image1.Picture.Width do

BitBlt(Dc, Col * Image1.Picture.Width, Row *

Image1.Picture.Height, Image1.Picture.Width,

Image1.Picture.Height, Image1.Picture.Bitmap.Canvas.Handle,

0, 0, SRCCOPY);

Result := 1;

end;

else

Result := CallWindowProc(FPrevClientProc,

ClientHandle, Msg, wParam, lParam);

end;

end;

По созданию окна [событие OnCreate()] напишите такой код:

FClientInstance := MakeObjectInstance(ClientWndProc);

FPrevClientProc := Pointer(GetWindowLong(ClientHandle, GWL_WNDPROC));

SetWindowLong(ClientHandle, GWL_WNDPROC, LongInt(FClientInstance));

Добавьте к проекту новую форму и установите ее свойство FormStyle в fsMDIChild

{/codecitation}

Добавить комментарий