Einzelnen Beitrag anzeigen

Benutzerbild von KodeZwerg
KodeZwerg

Registriert seit: 1. Feb 2018
3.685 Beiträge
 
Delphi 11 Alexandria
 
#28

AW: Screenshot like Snipping Tool

  Alt 15. Okt 2022, 20:49
Wenn jemand bereit wäre diesen Quelltext nach DWM zu portieren wäre ich sehr dankbar.
Auch Verzeihung das ich vorhin etwas angepi.... war
Ich habe mir das mit DWM hier angeschaut und werde daraus nicht wirklich schlau.
Ich habe die in meiner zugrunde liegende "Schnappschuss" Methode nun isoliert so das hoffentlich klar sein sollte worum es mir geht, angestaubte Technik zu erneuern.
Wenn meine Vorgehensweise per left, top, right, bottom falsch ist im Umgang mit DWM dann bitte höflichst um Entschuldigung, da spricht dann meine Unwissenheit aus mir.
Delphi-Quellcode:
procedure TkzScreenShot.ScreenShot(const ALeft: Integer; const ATop: Integer; const ARight: Integer; const ABottom: Integer);
var
  ShotDC: HDC;
begin
  FRect.Left := ALeft;
  FRect.Top := ATop;
  FRect.Right := ARight;
  FRect.Bottom := ABottom;
  FImageWidth := FRect.Right - FRect.Left;
  FImageHeight := FRect.Bottom - FRect.Top;
  ShotDC := GetDCEx(GetDesktopWindow, 0, DCX_WINDOW or DCX_PARENTCLIP or DCX_CLIPSIBLINGS or DCX_CLIPCHILDREN);
  try
    FImage.ReleaseHandle;
    FImage.Width := FImageWidth;
    FImage.Height := FImageHeight;
    FCanvas.Handle := ShotDC;
    if FInverted then
      begin
        FInverted := False;
        FImage.Canvas.CopyMode := cmSrcInvert;
      end
      else
      FImage.Canvas.CopyMode := cmSrcCopy;
    FImage.Canvas.CopyRect(
          Rect(0, 0, FImageWidth, FImageHeight),
          FCanvas,
          Rect(FRect.Left,
               FRect.Top,
               FRect.Right,
               FRect.Bottom));
    FImage.Dormant;
    FImage.FreeImage;
  finally
    ReleaseDC(GetDesktopWindow, ShotDC);
  end;
end;
Gruß vom KodeZwerg
  Mit Zitat antworten Zitat