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 -