Einzelnen Beitrag anzeigen

Benutzerbild von jaenicke
jaenicke

Registriert seit: 10. Jun 2003
Ort: Berlin
9.960 Beiträge
 
Delphi 12 Athens
 
#6

AW: Bitmap aus Clipboard laden

  Alt 8. Apr 2025, 22:37
Ich vermute einmal, dass das Problem die Konvertierung als Bitmap ist, denn Paint legt in die Zwischenablage unter anderem CF_DIB und PNG ab, aber nicht CF_Bitmap. Wenn du also CF_Bitmap abrufst, muss Windows den Inhalt der Zwischenablage zuerst konvertieren.

Aber das Programm will unbedingt meinen PC reparieren und ist von dieser Idee nicht abzubringen.
Solch eine Funktion hat das Tool gar nicht. Was meinst du damit? Hast du vielleicht auf einen Werbebanner auf der Seite geklickt statt auf den Download?

Gibt es keine Möglichkeit, mit Delphi an die Binärdaten heranzukommen?
Doch, aber dann hast du auch wirklich nur die reinen Bildinformationen:
Delphi-Quellcode:
function GetClipboardDIBData(const ATarget: TMemoryStream): Boolean;
var
  ClipboardHandle: THandle;
  Src: Pointer;
  Size: Integer;
begin
  if Clipboard.HasFormat(CF_DIB) then
  begin
    OpenClipboard(0);
    try
      ClipboardHandle := GetClipboardData(CF_DIB);
      if ClipboardHandle <> 0 then
      begin
        Src := GlobalLock(ClipboardHandle);
        try
          Size := GlobalSize(ClipboardHandle);
          if Size > 0 then
          begin
            ATarget.WriteBuffer(Src^, Size);
            ATarget.Position := 0;
            Result := True;
          end
          else
            Result := False;
        finally
          GlobalUnlock(ClipboardHandle);
        end;
      end
      else
        Result := False;
    finally
      CloseClipboard;
    end;
  end
  else
    Result := False;
end;

procedure TForm290.FormCreate(Sender: TObject);
var
  Data: TMemoryStream;
begin
  Data := TMemoryStream.Create;
  try
    if GetClipboardDIBData(Data) then
      Data.SaveToFile('c:\temp\clipboarddata.bin');
  finally
    Data.Free;
  end;
end;
Sebastian Jänicke
AppCentral
  Mit Zitat antworten Zitat