Einzelnen Beitrag anzeigen

Benutzerbild von KodeZwerg
KodeZwerg

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

Bitmap von DirectX will nicht in die Zwischenablage

  Alt 17. Okt 2022, 13:59
In dieser Post zeigte ich wie ich ein Bild erstelle.
Jetzt wollte ich etwas total simples machen, dieses Bild in die Zwischenablage einfügen um damit Global eine Möglichkeit zu haben es irgendwo einzufügen.
Bei einem TBitmap generiert mit der GDI-Technik (BitBlt) funktioniert es, bei einem TBitmap generiert mit der DirectX Variante tut sich gar nichts.
Auf diese Weise wollte ich ans Ziel kommen: (FBitmap ist ein TBitmap)
Delphi-Quellcode:
procedure TkzSnapShot.CopyToClipboard;
var
{
  DataStream: TMemoryStream;
  Data: Pointer;
  DataHandle: THandle;
}

  Image: TImage;
begin
  Image := TImage.Create(Self.Owner);
  try
    Image.Picture.Bitmap.Assign(FBitmap);
    Image.Invalidate;
    Clipboard.Assign(Image.Picture.Graphic);
  finally
    Image.Free;
  end;
(*
  //MessageBox(0, 'CopyToClipboard', 'CopyToClipboard', MB_OK);
  DataStream := TMemoryStream.Create;
  try
    FImage.SaveToStream(DataStream);

    DataHandle := GlobalAlloc(GHND or GMEM_SHARE, DataStream.Size);
    try
      Data := GlobalLock(DataHandle);
      try
        DataStream.Position := 0;
        DataStream.ReadBuffer(Data^, DataStream.Size);
      finally
        GlobalUnlock(DataHandle);
        if OpenClipboard(0) then
          begin
            EmptyClipboard;
            SetClipboardData(FClipboardFormat, DataHandle);
            CloseClipboard;
          end;
      end;
    except
      GlobalFree(DataHandle);
      Raise;
    end;
  finally
    DataStream.Free;
  end;
*)

end;
Leider funktioniert weder das reguläre noch wenn ich die Daten roh sende.
Was übersehe ich hier?
Gruß vom KodeZwerg
  Mit Zitat antworten Zitat