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

Материал из DRKB

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

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

  • Создайте новый проект.
  • Установите 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 формы.


ID: 00502