Sources
Delphi Russian Knowledge Base
DRKB - это самая большая и удобная в использовании база знаний по Дельфи в рунете, составленная Виталием Невзоровым

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

01.01.2007

Для того чтобы сделать это выполните следующие шаги:

     Создайте новый проект.

     Установите 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.

            У Вас получился MDI-проект с "обоями" в клиентской области MDI формы.