In the comments on my first answer, you ask how to draw the client area of ββan MDI form. This is a bit trickier because you don't have an OnPaint event ready that we can disable.
Instead, we need to change the window procedure of the MDI client window and implement the WM_ERASEBKGND message WM_ERASEBKGND .
The way to do this is to override ClientWndProc in the MDI form:
procedure ClientWndProc(var Message: TMessage); override; .... procedure TMyMDIForm.ClientWndProc(var Message: TMessage); var Canvas: TCanvas; ClientRect: TRect; Left, Top: Integer; begin case Message.Msg of WM_ERASEBKGND: begin Canvas := TCanvas.Create; Try Canvas.Handle := Message.WParam; Windows.GetClientRect(ClientHandle, ClientRect); Left := 0; while Left<ClientRect.Width do begin Top := 0; while Top<ClientRect.Height do begin Canvas.Draw(Left, Top, FBitmap); inc(Top, FBitmap.Height); end; inc(Left, FBitmap.Width); end; Finally Canvas.Free; End; Message.Result := 1; end; else inherited; end; end;
And it looks like this:

Turns out you are using an old version of Delphi that does not allow you to override ClientWndProc . This makes it a little harder. You need modifications to the window procedure. I used the same approach as the Delphi 6 source code, as this is the Delphi legacy I have.
Your form will look like this:
type TMyForm = class(TForm) procedure FormCreate(Sender: TObject); private FDefClientProc: TFarProc; FClientInstance: TFarProc; FBitmap: TBitmap; procedure ClientWndProc(var Message: TMessage); protected procedure CreateWnd; override; procedure DestroyWnd; override; end;
And the implementation is this:
procedure TMyForm.FormCreate(Sender: TObject); begin FBitmap := TBitmap.Create; FBitmap.LoadFromFile('C:\desktop\bitmap.bmp'); end; procedure TMyForm.ClientWndProc(var Message: TMessage); var Canvas: TCanvas; ClientRect: TRect; Left, Top: Integer; begin case Message.Msg of WM_ERASEBKGND: begin Canvas := TCanvas.Create; Try Canvas.Handle := Message.WParam; Windows.GetClientRect(ClientHandle, ClientRect); Left := 0; while Left<ClientRect.Right-ClientRect.Left do begin Top := 0; while Top<ClientRect.Bottom-ClientRect.Top do begin Canvas.Draw(Left, Top, FBitmap); inc(Top, FBitmap.Height); end; inc(Left, FBitmap.Width); end; Finally Canvas.Free; End; Message.Result := 1; end; else with Message do Result := CallWindowProc(FDefClientProc, ClientHandle, Msg, wParam, lParam); end; end; procedure TMyForm.CreateWnd; begin inherited; FClientInstance := Classes.MakeObjectInstance(ClientWndProc); FDefClientProc := Pointer(GetWindowLong(ClientHandle, GWL_WNDPROC)); SetWindowLong(ClientHandle, GWL_WNDPROC, Longint(FClientInstance)); end; procedure TMyForm.DestroyWnd; begin SetWindowLong(ClientHandle, GWL_WNDPROC, Longint(FDefClientProc)); Classes.FreeObjectInstance(FClientInstance); inherited; end;