Home » Tipps & Tricks » Grafik » Sonstiges » Bild im MDI-Client Bereich anzeigen

Bild im MDI-Client Bereich anzeigen

Zuerst musst Du ein Image auf das Formular schmeißen und mit einem Bitmap füllen. Jetzt ändere die Eigenschaft FormStyle auf fsMDIForm. Schreibe in die Private-Deklaration folgendes:

private
  FClientInstance : TFarProc;
  FPrevClientProc : TFarProc;
  procedure ClientWndProc(var message: TMessage);
  { Private-Deklarationen }

In den Implementation-Teil kommt folgende Procedure, die wir gerade deklariert haben:

procedure TForm1.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;

Wenn Du jetzt noch ins OnCreate-Ereignis von Form1 das reinschreibst:

FClientInstance := MakeObjectInstance(ClientWndProc);
FPrevClientProc := Pointer(GetWindowLong(ClientHandle,
                                            GWL_WNDPROC));
SetWindowLong(ClientHandle,
              GWL_WNDPROC,
              LongInt(FClientInstance));

und ein zweites Formular erstellst, dessen FormStyle-Eigenschaft auf fsMDIChild steht, dann hast Du eine MDI-Anwendung mit Wallpaper.