[Back to DELPHI SWAG index] [Back to Main SWAG index] [Original]

    How to give wallpaper or image in the delphi's form, not Windows
    wallpaper?

    Aries,

    We do this in our application (D1), but the method is rather difficult (well, its not easy at any rate). If interested ( or others) I can post the code. (its not too long). Oh what the hey, I'll just post it now:

    {the declaration part}
      TMainForm = class(TForm)
      private
             PROCEDURE ClientWndProc(VAR Message: TMessage);

    {the actual procedure}
    PROCEDURE TMainForm.ClientWndProc(VAR Message: TMessage);
    VAR
      MyDC : hDC;
      Ro, Co : Word;
    begin
      with Message do
        case Msg of
          WM_ERASEBKGND:
            begin
              MyDC := TWMEraseBkGnd(Message).DC;
              Ro := 0;
              Co := 0;
              PaintRgn(MyDC, CreateRectRgn(0, 0, ClientWidth, ClientHeight));
              BitBlt(MyDC, Co*ImageEagle.Picture.Width, Ro*ImageEagle.Picture.Height,
                    ImageEagle.Picture.Width, ImageEagle.Picture.Height,
                                     {ImageEagle.Picture.Bitmap.Canvas.Handle, 0, -130, SRCCOPY);}
                                     ImageEagle.Picture.Bitmap.Canvas.Handle, 0, 0, SRCCOPY);
                       Result := 1;
                     end;
        else
          Result := CallWindowProc(FPrevClientProc, ClientHandle, Msg, wParam, lParam);
        end;

    end;

    {the reference to activate the process}
    procedure TMainForm.FormCreate(Sender: TObject);
    begin
      FClientInstance := MakeObjectInstance(ClientWndProc);
      FPrevClientProc := Pointer(GetWindowLong(ClientHandle, GWL_WNDPROC));
      SetWindowLong(ClientHandle, GWL_WNDPROC, LongInt(FClientInstance));
    end;

    On the form itself there is a TImage called ImageEagle. this contains the image that will be used.
    It works for us, but there may be a better way do do it.

    HTH,
    Dustin

[Back to DELPHI SWAG index] [Back to Main SWAG index] [Original]