Einzelnen Beitrag anzeigen

Benutzerbild von Garfield
Garfield

Registriert seit: 9. Jul 2004
Ort: Aken (Anhalt-Bitterfeld)
1.334 Beiträge
 
Delphi XE5 Professional
 
#12

Re: Bildschirmlupe - Bereich unter Formular ermitteln

  Alt 30. Dez 2008, 13:42
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.
Angehängte Dateien
Dateityp: 7z lupe_105.7z (149,8 KB, 22x aufgerufen)
Gruss Garfield
Ubuntu 22.04: Laz2.2.2/FPC3.2.2 - VirtBox6.1+W10: D7PE, DXE5Prof
  Mit Zitat antworten Zitat