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