Vielleicht so etwas wie im Anhang?
Delphi-Quellcode:
procedure TForm1.ontmr(Sender: TObject);
var
SrcRect : TRect;
DestRect : TRect;
tmpCanvas : TCanvas;
hDesktop : Hwnd;
begin
if (frmTop <> Form1.Left) or (frmLeft <> Form1.Top)
then begin
frmTop := Form1.Left;
frmLeft := Form1.Top;
img.Visible := False;
Form1.TransparentColor := True;
hDesktop := GetDesktopWindow;
DestRect := img.Canvas.ClipRect;
SrcRect.Left := img.ClientOrigin.X + (img.Width div 4);
SrcRect.Top := img.ClientOrigin.Y + (img.Height div 4);
SrcRect.Right := SrcRect.Left + (img.Width div 2);
SrcRect.Bottom := SrcRect.Top + (img.Height div 2);
tmpCanvas := TCanvas.Create;
try
tmpCanvas.Handle := GetDC(GetDesktopWindow);
img.Canvas.CopyRect(DestRect, tmpCanvas, SrcRect);
finally
ReleaseDC(hDesktop, tmpCanvas.Handle);
tmpCanvas.Free;
end;
Application.ProcessMessages;
img.Visible := True;
Form1.TransparentColor := False;
end;
end;
Funktioniert nicht ganz zuverlässig. Man kann das Formular transparent lassen, allerdings ist dann die Bildqualität deutlich schlechter.