Thema: Delphi Zeichnen auf MDI-Form...

Einzelnen Beitrag anzeigen

bingo72

Registriert seit: 18. Aug 2006
Ort: Österreich
180 Beiträge
 
Delphi 5 Professional
 
#3

Re: Zeichnen auf MDI-Form...

  Alt 5. Okt 2007, 07:27
Hey!!

Bin jetzt schon ein gutes Stück weitergekommen und hab im Netz doch noch wertvolle Tipps gefunden:

Vielleicht mal ein wenig Code:

Im Create mach ich das:
Delphi-Quellcode:
fLogo := imLogo.Picture.Graphic;

  fBkBrush := CreateSolidBrush(GetColor);
  fClientInstance := MakeObjectInstance(MainClientWndProc);
  fPrevClientProc := Pointer (GetWindowLong(ClientHandle, GWL_WNDPROC));
  SetWindowLong(ClientHandle, GWL_WNDPROC, Longint(fClientInstance));
  
  fCanvas := TCanvas.Create;
  fCanvas.Handle := GetDC(ClientHandle);
und im Destroy das...
Delphi-Quellcode:
DeleteObject(fBkBrush);
  ReleaseDC(ClientHandle, fCanvas.Handle);

  fCanvas.Free;
im ClientWindowProc(var Message: TMessage) das:

Delphi-Quellcode:
var
  lDC : HDC;
  lBrushOld : HBRUSH;
begin
  with Message do begin
    case Msg of WM_ERASEBKGND:
      begin
        lDC := TWMEraseBkGnd(Message).DC;
        lBrushOld := SelectObject(lDC, fBkBrush);
        FillRect(lDC, ClientRect, fBkBrush);
        SelectObject(lDC, lBrushOld);
        Result := 1;
      end else begin
        Result := CallWindowProc (fPrevClientProc, ClientHandle, Msg, wParam, lParam);
      end;
    end;
  end;
end;
und zu guter Letzt die DrawBackground-Methode:
Delphi-Quellcode:
var
  lImage : TGraphic;
  lBitmap : TBitmap;
  lLeft : Integer;
  lTop : Integer;
  lRect : TRect;
begin
    if Assigned (fCanvas) then begin
      lLeft := (ClientWidthEx - fBitmap.Width) div 2;
      lTop := (ClientHeightEx - fBitmap.Height) div 2;

      if Assigned (fBitmap.Canvas) then begin
        fCanvas.Draw(lLeft, lTop, fBitmap);
      end;
    end;
end;
Es funktioniert schon recht gut und die Effekte sind so wie ich es mir vorstelle...eigentlich fertig oder??

Naja nicht ganz...wenn ich nämlich die Applikation beende bekomme ich im DrawBackground eine AccessViolation-Exception an der Draw-Position...drum hab ich dort auch schon alles abgetestet, was nil sein könnte??
Vielleicht findet ja wer gleich den Grund??

LG
Thomas
  Mit Zitat antworten Zitat