Entwickler-Ecke
Multimedia / Grafik - Image ins Clipboard will einfach nicht
OlafSt - Di 17.10.17 11:58
Titel: Image ins Clipboard will einfach nicht
Hallo Freunde,
so langsam glaube ich, ich sollte echt Gärtner werden.
Ich habe hier ein TAdvImage, in das ich per SOAP ein Bild hineinschiebe. So weit, so gut.
Nun soll dies Imager ins Clipboard gehen:
Delphi-Quelltext
1:
| Clipboard.Assign(Img_Foto.Picture); |
So weit kein Hexenwerk. Will ich das aber z.B. in Paint einfügen, erscheint "Kann nicht eingefügt werden". Auch mit Paint3D geht das nicht.
Ich habe auch schon mit
SaveToClipboardFormat und allem anderen, was Google so hergab, experimentiert. Inklusive eine TImage erstellen, diesem das Img_Foto zu-Assignen und das dann ins Clipboard. Ergebnis immer gleich: Entweder es ist nix im Clipboard oder es läßt sich nicht pasten.
Wie geht das denn nun ?
Delete - Di 17.10.17 12:06
- Nachträglich durch die Entwickler-Ecke gelöscht -
OlafSt - Di 17.10.17 13:18
Interessant. HasFormat(CF_PICTURE) ergibt false.
Schreit nach RegisterClipboardFormat, aber die Beschreibung dazu ist... Dürftig.
Delete - Di 17.10.17 13:23
- Nachträglich durch die Entwickler-Ecke gelöscht -
OlafSt - Di 17.10.17 14:11
Ich habe das TAdvPicture nun gegen ein TImage getauscht.
Auch das hat nix gebracht. HasFormat ist nach wie vor false.
Delete - Di 17.10.17 14:22
- Nachträglich durch die Entwickler-Ecke gelöscht -
OlafSt - Di 17.10.17 15:40
Ebenso negativ.
Interessanterweise verschwindet der Inhalt des Images, sobald ich
Clipboard.Assign durchlaufen habe.
Möglicherweise hängt das mit dem Umstand zusammen, mit dem ich das TImage mit Bilddaten füttere:
WebService via SOAP liefert nur halbe Bilddaten [
https://www.entwickler-ecke.de/viewtopic.php?p=708927#708927]. Nachdem ich den SOAP-Datenstrom ent-XML habe, werden die Binärdaten in einen MemoryStream geschaufelt und aus diesem dann per
Img.Picture.LoadFromStream(T); in das TImage geladen. Darf ich womöglich den MemoryStream nicht freigeben ? Muß ich womöglich noch andere Aktionen mit dem TImage ausführen, damit das auch wirklich "im Bild" landet ?
Steku - Di 17.10.17 15:50
Hi,
nur so eine Idee...
Stream.Position := 0 ???
VG
Steku
Delete - Di 17.10.17 15:50
- Nachträglich durch die Entwickler-Ecke gelöscht -
OlafSt - Di 17.10.17 16:23
An Stream.Position brauchte nicht mehr gedacht zu werden,sonst wäre ja nix im TImage gelandet, das ins Clipboard hätte kopiert werden können ;)
Das mit dem temporären TPicture hat geholfen:
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9:
| if Assigned(TheImage) then begin TP:=TPicture.Create; TP.Assign(TheImage.Picture); Clipboard.Assign(TP); if not Clipboard.HasFormat(CF_BITMAP) then raise Exception.Create('Nope'); TP.Free; end; |
Keine Exception mehr, und ein CTRL-V in Paint liefert das Bild. Ich frage mich nur, warum man das so umständlich machen muß und das Quell-Picture beim kopieren ins Clipboard offenbar seiner Bildinformationen beraubt wird.
Ansonsten Frage beantwortet, danke für eure Hilfe !
Delete - Di 17.10.17 16:37
- Nachträglich durch die Entwickler-Ecke gelöscht -
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2024 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!