Autor Beitrag
OlafSt
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 438
Erhaltene Danke: 82

Win7, Win81, Win10
Tokyo, VS2017
BeitragVerfasst: Di 17.10.17 10:58 
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:

ausblenden 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 ?

_________________
Lies, was da steht. Denk dann drüber nach. Dann erst fragen.
Frühlingsrolle
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 1695
Erhaltene Danke: 307

[Win NT] 5.1 x86 6.1 x64
[Delphi] 7 PE, 2006, 10.1 Starter, Lazarus - [C#] VS Exp 2012 - [Android API 15] VS Com 2015, Eclipse, AIDE - [C++] Builder 10.1
BeitragVerfasst: Di 17.10.17 11:06 
Guten Tag

frag' mal ab, ob überhaupt ein Bild in der Zwischenablage ist, nach dem .Assign:
ausblenden Delphi-Quelltext
1:
if Clipboard.HasFormat(CF_PICTURE)					

Das Eregbnis wäre interessant.

_________________
„Politicians are put there to give you the idea that you have freedom of choice. You don’t. You have no choice. You have owners. They own you. They own everything." (George Denis Patrick Carlin)
OlafSt Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 438
Erhaltene Danke: 82

Win7, Win81, Win10
Tokyo, VS2017
BeitragVerfasst: Di 17.10.17 12:18 
Interessant. HasFormat(CF_PICTURE) ergibt false.

Schreit nach RegisterClipboardFormat, aber die Beschreibung dazu ist... Dürftig.

_________________
Lies, was da steht. Denk dann drüber nach. Dann erst fragen.
Frühlingsrolle
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 1695
Erhaltene Danke: 307

[Win NT] 5.1 x86 6.1 x64
[Delphi] 7 PE, 2006, 10.1 Starter, Lazarus - [C#] VS Exp 2012 - [Android API 15] VS Com 2015, Eclipse, AIDE - [C++] Builder 10.1
BeitragVerfasst: Di 17.10.17 12:23 
Dann ist dein TPicture Objekt insofern ungültig. Ich weiss garnicht, ob die Zwischenablage damit klar kommt. Es sollte eher ein TBitmap oder ein TJpeg... übergeben werden.

_________________
„Politicians are put there to give you the idea that you have freedom of choice. You don’t. You have no choice. You have owners. They own you. They own everything." (George Denis Patrick Carlin)
OlafSt Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 438
Erhaltene Danke: 82

Win7, Win81, Win10
Tokyo, VS2017
BeitragVerfasst: Di 17.10.17 13:11 
Ich habe das TAdvPicture nun gegen ein TImage getauscht.

Auch das hat nix gebracht. HasFormat ist nach wie vor false.

_________________
Lies, was da steht. Denk dann drüber nach. Dann erst fragen.
Frühlingsrolle
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 1695
Erhaltene Danke: 307

[Win NT] 5.1 x86 6.1 x64
[Delphi] 7 PE, 2006, 10.1 Starter, Lazarus - [C#] VS Exp 2012 - [Android API 15] VS Com 2015, Eclipse, AIDE - [C++] Builder 10.1
BeitragVerfasst: Di 17.10.17 13:22 
Dann probier's mal mit dem TBitmap:

ausblenden Delphi-Quelltext
1:
2:
3:
Clipboard.Assign(Image1.Picture.Bitmap);
if Clipboard.HasFormat(CF_BITMAP) then
  //...

_________________
„Politicians are put there to give you the idea that you have freedom of choice. You don’t. You have no choice. You have owners. They own you. They own everything." (George Denis Patrick Carlin)
OlafSt Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 438
Erhaltene Danke: 82

Win7, Win81, Win10
Tokyo, VS2017
BeitragVerfasst: Di 17.10.17 14: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. 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 ?

_________________
Lies, was da steht. Denk dann drüber nach. Dann erst fragen.
Steku
ontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic star
Beiträge: 19
Erhaltene Danke: 4



BeitragVerfasst: Di 17.10.17 14:50 
Hi,

nur so eine Idee...

Stream.Position := 0 ???

VG
Steku
Frühlingsrolle
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 1695
Erhaltene Danke: 307

[Win NT] 5.1 x86 6.1 x64
[Delphi] 7 PE, 2006, 10.1 Starter, Lazarus - [C#] VS Exp 2012 - [Android API 15] VS Com 2015, Eclipse, AIDE - [C++] Builder 10.1
BeitragVerfasst: Di 17.10.17 14:50 
Lege ein temporäres TPicture Objekt an, lade dort den Stream, und übergib dieses Objekt ans TImage, für die Anzeige, sowie an die Zwischenablage, für was auch immer du sie brauchst

_________________
„Politicians are put there to give you the idea that you have freedom of choice. You don’t. You have no choice. You have owners. They own you. They own everything." (George Denis Patrick Carlin)
OlafSt Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 438
Erhaltene Danke: 82

Win7, Win81, Win10
Tokyo, VS2017
BeitragVerfasst: Di 17.10.17 15: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:

ausblenden 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 !

_________________
Lies, was da steht. Denk dann drüber nach. Dann erst fragen.
Frühlingsrolle
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 1695
Erhaltene Danke: 307

[Win NT] 5.1 x86 6.1 x64
[Delphi] 7 PE, 2006, 10.1 Starter, Lazarus - [C#] VS Exp 2012 - [Android API 15] VS Com 2015, Eclipse, AIDE - [C++] Builder 10.1
BeitragVerfasst: Di 17.10.17 15:37 
Ich hoffe mal, dass du dennoch einen try-finally Block eingebaut hast. Sollte es zum raise kommen, wird .Free() nicht ausgeführt, und du hast ein Speicherleck.

_________________
„Politicians are put there to give you the idea that you have freedom of choice. You don’t. You have no choice. You have owners. They own you. They own everything." (George Denis Patrick Carlin)