![]() |
Bitmap von DirectX will nicht in die Zwischenablage
![]() 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:
Leider funktioniert weder das reguläre noch wenn ich die Daten roh sende.
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; Was übersehe ich hier? |
AW: Bitmap von DirectX will nicht in die Zwischenablage
:wall: Hat sich erledigt, der Aufruf der CopyToClipboard methode hatte bei DirectX gefehlt :oops:
|
AW: Bitmap von DirectX will nicht in die Zwischenablage
Zitat:
Delphi-Quellcode:
Clipboard.Assign(FBitmap);
Invalidate macht nichts, das das TImage eh nicht sichtbar ist
Delphi-Quellcode:
von TImage wird garnicht benutzt, also TPicture
Image := TImage.Create(Self.Owner);
try Image.Picture.Bitmap.Assign(FBitmap); Clipboard.Assign(Image.Picture.Graphic); finally Image.Free; end;
Delphi-Quellcode:
im Graphic ist das Bitmap drin, wodurch Graphic = Bitmap,
Picture := TPicture.Create(Self.Owner);
try Picture.Bitmap.Assign(FBitmap); Clipboard.Assign(Picture.Graphic); finally Picture.Free; end; also
Delphi-Quellcode:
Clipboard.Assign(Picture.Bitmap);
Picture.Bitmap erstellt ein TBitmap (wenn/da noch Keines drin ist), und es wird unverändert als TBitmap weiterverwendet, womit auch das TPicture praktisch garnicht verwendet wird
Delphi-Quellcode:
und dann kopierst du den Inhalt des einen Bitmaps nur in ein Anderes, womit das auch wegfallen könnte, weil sich doch nichts verändert,
Bitmap := TBitmap.Create(Self.Owner);
try Bitmap.Assign(FBitmap); Clipboard.Assign(Bitmap); finally Bitmap.Free; end; also
Delphi-Quellcode:
Clipboard.Assign(FBitmap);
|
AW: Bitmap von DirectX will nicht in die Zwischenablage
@himitsu
Ich hatte im Vorfeld Deine gezeigten Variationen durchprobiert aber da scheint doch etwas anderes zu passieren weil wenn ich direkt
Delphi-Quellcode:
aufrufe, ist das Bild zwar in der Zwischenablage aber ich kann es nicht von dort in andere Anwendungen rauskopieren (vielleicht in einigen aber nicht da wo ich es oft benötige), deshalb der Umweg über ein TImage/Graphic, das funktioniert dann zumindest in meinen Versuchen immer.
Clipboard.Assign(FBitmap);
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 07:42 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz