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?