Autor |
Beitrag |
galagher
Beiträge: 2534
Erhaltene Danke: 44
Windows 10 Home
Delphi 10.1 Starter, Lazarus 2.0.6
|
Verfasst: Mo 21.03.22 13:33
Hallo!
Ich möchte ein Icon in die Zwischenablage kopieren, mit Clipboard.Assign(aIcon); funktioniert das aber nicht. Ich kann das Icon natürlich zuvor in ein Bitmap konvertieren und dieses der Zwischenablage zuweisen, dabei verliere ich aber die eigenschaft Transparent. aber es muss doch auch direkt gehen!
_________________ gedunstig war's - und fahle wornen zerschellten karsig im gestrock. oh graus, es gloomt der jabberwock - und die graisligen gulpen nurmen!
|
|
mandras
Beiträge: 430
Erhaltene Danke: 107
Win 10
Delphi 6 Prof, Delphi 10.4 Prof
|
Verfasst: Mo 21.03.22 13:42
Das wird vermutlich nicht funktionieren, dazu müßte es ein eigenes Zwischenablageformat für Icons geben.
Lt.
docs.microsoft.com/d...hg/clipboard-formats
ist dem aber nicht so
|
|
jaenicke
Beiträge: 19288
Erhaltene Danke: 1743
W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
|
Verfasst: Mo 21.03.22 15:18
Der Internet Explorer kannte ein Format dafür:
Die Frage ist aber was du damit machen möchtest. Möchtest du ein Icon für eine andere Anwendung kopieren oder innerhalb deiner eigenen? Bei einer fremden Anwendung könntest du dort eins kopieren, wenn möglich, und schauen welches Format verwendet wird.
|
|
galagher
Beiträge: 2534
Erhaltene Danke: 44
Windows 10 Home
Delphi 10.1 Starter, Lazarus 2.0.6
|
Verfasst: Mo 21.03.22 18:25
jaenicke hat folgendes geschrieben : | Die Frage ist aber was du damit machen möchtest. Möchtest du ein Icon für eine andere Anwendung kopieren |
Ja, genau das. In die Windows-Zwischenablage. Ich würde ja auch das Bitmap-Format akzeptieren, wenn Transparent bei der Konvertierung erhalten bleibt.
_________________ gedunstig war's - und fahle wornen zerschellten karsig im gestrock. oh graus, es gloomt der jabberwock - und die graisligen gulpen nurmen!
|
|
Sinspin
Beiträge: 1334
Erhaltene Danke: 118
Win 10
RIO, CE, Lazarus
|
Verfasst: Mo 21.03.22 18:32
Irfan View kann das. Habe ich vor Jahren verwendet um herauszufinden wie die ContentId's sind um zu identifizieren was man vor sich hat.
_________________ Wir zerstören die Natur und Wälder der Erde. Wir töten wilde Tiere für Trophäen. Wir produzieren Lebewesen als Massenware um sie nach wenigen Monaten zu töten. Warum sollte unser aller Mutter, die Natur, nicht die gleichen Rechte haben?
|
|
jaenicke
Beiträge: 19288
Erhaltene Danke: 1743
W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
|
Verfasst: Mo 21.03.22 21:50
Man kann die Formate auch selbst mit EnumClipboardFormats durchgehen, wenn das Zielprogramm das gewünschte Format selbst dort abgelegt hat:
docs.microsoft.com/e...enumclipboardformats
|
|
galagher
Beiträge: 2534
Erhaltene Danke: 44
Windows 10 Home
Delphi 10.1 Starter, Lazarus 2.0.6
|
Verfasst: Mi 23.03.22 16:42
_________________ gedunstig war's - und fahle wornen zerschellten karsig im gestrock. oh graus, es gloomt der jabberwock - und die graisligen gulpen nurmen!
|
|
Sinspin
Beiträge: 1334
Erhaltene Danke: 118
Win 10
RIO, CE, Lazarus
|
Verfasst: Do 24.03.22 08:18
Die Zwischenablage ist eine recht komplexe Struktur. Microsoft hat einiges geändert über die Jahre was Zugriff und Benachrichtigung von lauschenden Prozessen angeht, das war mal wirklich grausig.
Aber die Zwischenablage in der Lage alles an Daten zu halten und transportieren was es gibt. Sogar parallele Daten sind möglich. Zum Beispiel eine HTML und eine Text Version des gleichen Dokumentes.
_________________ Wir zerstören die Natur und Wälder der Erde. Wir töten wilde Tiere für Trophäen. Wir produzieren Lebewesen als Massenware um sie nach wenigen Monaten zu töten. Warum sollte unser aller Mutter, die Natur, nicht die gleichen Rechte haben?
|
|
jaenicke
Beiträge: 19288
Erhaltene Danke: 1743
W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
|
Verfasst: Do 24.03.22 08:31
Nicht nur das, man kann sogar nur einen Verweis auf den Inhalt hinterlegen. Erst wenn der Inhalt dann wirklich benötigt wird, muss er geliefert werden. Dadurch kann man auch große Datenmengen sehr schnell in die Zwischenablage kopieren.
|
|
galagher
Beiträge: 2534
Erhaltene Danke: 44
Windows 10 Home
Delphi 10.1 Starter, Lazarus 2.0.6
|
Verfasst: Do 24.03.22 16:22
Da blicke ich leider nicht durch. Und es ist nicht das Zielprogramm, das das Icon in der Zwischenablage ablegt, sondern mein Delphi-Programm. Das Zielprogramm soll das Icon dann von dort einlesen.
jaenicke hat folgendes geschrieben : | Nicht nur das, man kann sogar nur einen Verweis auf den Inhalt hinterlegen. Erst wenn der Inhalt dann wirklich benötigt wird, muss er geliefert werden. |
Gut und schön, aber das hilft mir nicht weiter! Dass die Zwischenablage Icons nicht so ohne Weiteres verarbeiten kann, finde ich schon seltsam. Schliesslich sind Icons ja eine "typische" Windows-Sache und kein exotisches Datenformat!
Wie also bereite ich die Zwischenablage vor?
_________________ gedunstig war's - und fahle wornen zerschellten karsig im gestrock. oh graus, es gloomt der jabberwock - und die graisligen gulpen nurmen!
|
|
Th69
Beiträge: 4791
Erhaltene Danke: 1059
Win10
C#, C++ (VS 2017/19/22)
|
Verfasst: Do 24.03.22 17:56
Soll der Anwender dann mit einem anderen Programm interagieren oder soll es nur innerhalb deines Programms zum Kopieren des Icons benutzt werden?
Wenn du ein anderes Programm kennst, welches das Icon-Format unterstützt, dann kannst du mit dem FreeClipboardViewer das Format dir anschauen.
Du kannst auch selber ein Clipboard-Format erstellen: Register and use a custom clipboard format in Delphi (Stichwörter: Get/SetAsHandle).
Aber was genau funktioniert bei Clipboard.Assign(aIcon) denn nicht?
Ich habe in der Doku zu Clipboard.Assign nachgeschaut und gesehen, daß alle TPersistent-Klassen unterstützt werden sollten, also auch TIcon.
Oder wird eine Exception erzeugt?
Und warum sollte eine transparente Bitmap nicht funktionieren? Mit TBitmap.TransparentColor kann man doch bestimmen, welche Pixel als transparent angesehen werden.
Oder wird diese Transparenz dann nicht in die Zwischenablage übernommen?
|
|
Sinspin
Beiträge: 1334
Erhaltene Danke: 118
Win 10
RIO, CE, Lazarus
|
Verfasst: Fr 25.03.22 09:53
Keine Ahnung mit welcher Delphi Version du arbeitest und was da alles schon enthalten ist. Damals, mit Delphi 7, habe ich mir was eigenes geschrieben und fand da MSDN Clipboard sehr hilfreich.
_________________ Wir zerstören die Natur und Wälder der Erde. Wir töten wilde Tiere für Trophäen. Wir produzieren Lebewesen als Massenware um sie nach wenigen Monaten zu töten. Warum sollte unser aller Mutter, die Natur, nicht die gleichen Rechte haben?
|
|
galagher
Beiträge: 2534
Erhaltene Danke: 44
Windows 10 Home
Delphi 10.1 Starter, Lazarus 2.0.6
|
Verfasst: Fr 25.03.22 16:35
Th69 hat folgendes geschrieben : | Soll der Anwender dann mit einem anderen Programm interagieren oder soll es nur innerhalb deines Programms zum Kopieren des Icons benutzt werden? |
Es soll dann ausserhalb meines Programmes allgemein verfügbar sein, zB. soll man es mit IcoFX (ein Programm zum Erzeugen und Bearbeiten von Icons) aus der Zwischenablage laden können.
Th69 hat folgendes geschrieben : | Wenn du ein anderes Programm kennst, welches das Icon-Format unterstützt, dann kannst du mit dem FreeClipboardViewer das Format dir anschauen. |
Zuerst möchte ich versuchen, es so hinzubekommen.
Th69 hat folgendes geschrieben : | Du kannst auch selber ein Clipboard-Format erstellen: |
Ziemlich verwirrend... Welchen Datentyp muss ich denn in RegisterClipboardFormat angeben?
Th69 hat folgendes geschrieben : | Aber was genau funktioniert bei Clipboard.Assign(aIcon) denn nicht?
Ich habe in der Doku zu Clipboard.Assign nachgeschaut und gesehen, daß alle TPersistent-Klassen unterstützt werden sollten, also auch TIcon.
Oder wird eine Exception erzeugt? |
Mit Clipboard.Assign(aIcon) erhalte ich die Meldung
Zitat: | Zwischenablage unterstützt keine Symbole. |
Th69 hat folgendes geschrieben : | Und warum sollte eine transparente Bitmap nicht funktionieren? [...]
Oder wird diese Transparenz dann nicht in die Zwischenablage übernommen? |
Ich habe alles versucht, was mit Transparenz zusammenhängt - erfolglos. Es ist wohl so, dass die Transparenz nicht in die Zwischenablage übernommen wird.
_________________ gedunstig war's - und fahle wornen zerschellten karsig im gestrock. oh graus, es gloomt der jabberwock - und die graisligen gulpen nurmen!
|
|
jaenicke
Beiträge: 19288
Erhaltene Danke: 1743
W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
|
Verfasst: Fr 25.03.22 18:49
galagher hat folgendes geschrieben : | Es soll dann ausserhalb meines Programmes allgemein verfügbar sein, zB. soll man es mit IcoFX (ein Programm zum Erzeugen und Bearbeiten von Icons) aus der Zwischenablage laden können. |
IcoFX kann nur die Bilddaten eines einzelnen Formats (z.B. 256x256 mit alpha) aus einem Icon in die Zwischenablage kopieren oder daraus laden. Ein ganzes Icon kann es von dort gar nicht laden.
IcoFX verwendet 32-Bit Bitmaps mit Alphakanal. Lazarus kann damit gut umgehen, bei Delphis TBitmap ist der Support etwas... verbesserungswürdig. Deshalb würde ich für Delphi eher Bibliotheken wie Graphics32 verwenden.
|
|
galagher
Beiträge: 2534
Erhaltene Danke: 44
Windows 10 Home
Delphi 10.1 Starter, Lazarus 2.0.6
|
Verfasst: Fr 25.03.22 19:20
jaenicke hat folgendes geschrieben : | IcoFX kann nur die Bilddaten eines einzelnen Formats (z.B. 256x256 mit alpha) aus einem Icon in die Zwischenablage kopieren oder daraus laden. Ein ganzes Icon kann es von dort gar nicht laden. |
Ich weiss, was du meinst - stimmt, ja.
Wenn das also nicht einfach mit Boardmitteln geht, dann belasse ich es erstmal so, wie es ist. Alternativ kann ich ja das Icon als Datei speichern.
Ich nehme mit Erstaunen zur Kenntnis, dass die Windows-Zwischenablage das Icon-Format nicht (ohne weiteren Aufwand) unterstützt.
_________________ gedunstig war's - und fahle wornen zerschellten karsig im gestrock. oh graus, es gloomt der jabberwock - und die graisligen gulpen nurmen!
|
|
jaenicke
Beiträge: 19288
Erhaltene Danke: 1743
W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
|
Verfasst: Sa 26.03.22 09:05
Warum verwendest du denn nicht einfach ein PNG? Das kannst du inkl. Transparenz mit Bordmitteln per Assign in die Zwischenablage packen und das wird von IcoFX auch korrekt transparent verwendet.
Man kann zwar auch ein Bitmap mit Alphakanal z.B. in ein TImage werfen, dann wird das auch transparent dargestellt (wenn man Transparent auf False hat), aber das Assign für die Zwischenablage kann das offenbar nicht.
Aber wie geschrieben:
Mit einem PNG klappt es mit IcoFX und anderen problemlos.
|
|
galagher
Beiträge: 2534
Erhaltene Danke: 44
Windows 10 Home
Delphi 10.1 Starter, Lazarus 2.0.6
|
Verfasst: So 27.03.22 19:28
jaenicke hat folgendes geschrieben : | Warum verwendest du denn nicht einfach ein PNG? |
Weil die Quelle ein Icon ist! Ich müsste also zunächst einen Weg finden, das Icon in ein PNG zu konvertieren, da bin ich gerade dabei, aber noch ohne Erfolg.
_________________ gedunstig war's - und fahle wornen zerschellten karsig im gestrock. oh graus, es gloomt der jabberwock - und die graisligen gulpen nurmen!
|
|
jaenicke
Beiträge: 19288
Erhaltene Danke: 1743
W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
|
Verfasst: Mo 28.03.22 08:16
Ich kenne leider keine sinnvolle Variante ein Icon mit Delphi zu öffnen oder zu editieren. TIcon kann das nur sehr rudimentär. Ich habe danach aber auch noch nie gesucht.
|
|
galagher
Beiträge: 2534
Erhaltene Danke: 44
Windows 10 Home
Delphi 10.1 Starter, Lazarus 2.0.6
|
Verfasst: Mo 28.03.22 16:58
jaenicke hat folgendes geschrieben : | Ich kenne leider keine sinnvolle Variante ein Icon mit Delphi zu öffnen oder zu editieren. TIcon kann das nur sehr rudimentär. Ich habe danach aber auch noch nie gesucht. |
Ich habe danach gesucht und das hier gefunden: torry.net/pages.php?id=84, siehe dort TIconDialog, das öffnet den "Anderes Symbol"-Dialog von Windows. Mit etwas Umbau des Codes funktioniert die Komponente auch mit Delphi 10.3.
Diese Icons möchte ich - wie gesagt - in die Zwischanablage kopieren.
_________________ gedunstig war's - und fahle wornen zerschellten karsig im gestrock. oh graus, es gloomt der jabberwock - und die graisligen gulpen nurmen!
|
|
jaenicke
Beiträge: 19288
Erhaltene Danke: 1743
W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
|
Verfasst: Mo 28.03.22 19:35
Aber das ist eben nicht so einfach. Denn der Dialog wählt ja nur das Icon aus, aber du brauchst danach ja noch die Auswahl innerhalb der Icon-Datei welches Format du haben möchtest.
Wäre es da nicht einfacher das Icon schlicht komplett an IcoFX zu übergeben? Dort hast du diese Auswahl, kannst kopieren und einfügen, automatisch resizen für neue Formate, ...
|
|