Clipboard.HasPictureFormat - unter Linux

Rund um die LCL und andere Komponenten
MmVisual
Beiträge: 1579
Registriert: Fr 10. Okt 2008, 23:54
OS, Lazarus, FPC: Winuxarm (L 4 FPC 3.2.2)
CPU-Target: 32/64Bit

Clipboard.HasPictureFormat - unter Linux

Beitrag von MmVisual »

Hallo,

Ich nutze die Funktion "Clipboard.HasPictureFormat" um heraus zu finden ob in der Linux Mint Zwischenablage eine Grafik drin ist.

Wenn ich
- mit meiner EXE eine Grafik in die Zwischenablage (ZW) kopiere ist der Wert TRUE
- mit meiner EXE einen Text in die ZW kopiere ist der Wert FALSE
- mit einem anderen Programm eine Grafik in die ZW kopieren, dann merkt das meine EXE erst nach dem Neustart, dass da eine Grafik in der ZW ist >> Fehler.

Ich habe das mit Lazarus V3.4 unter Linux getestet. Das geht nicht so richtig.
In der Regel arbeite ich mit Windows, bei Lazarus V4RC3 sieht der Code identisch aus wie von Lazarus V3.4. Unter Windows hatte ich damit noch keine Probleme.

Kann man Lazarus dazu zwingen die ZW vom OS neu zu untersuchen? Aktuell schaut Lazarus im Cache nach und merkt nicht zuverlässig dass es in der ZW nun was anderes gibt.

VG Markus.
EleLa - Elektronik Lagerverwaltung - www.elela.de

Benutzeravatar
fliegermichl
Lazarusforum e. V.
Beiträge: 1639
Registriert: Do 9. Jun 2011, 09:42
OS, Lazarus, FPC: Lazarus Fixes FPC Stable
CPU-Target: 32/64Bit
Wohnort: Echzell

Re: Clipboard.HasPictureFormat - unter Linux

Beitrag von fliegermichl »

Ich hab's grad mal probiert. Funktioniert bei mir.
Der Timer prüft alle Sekunde und enabled/disabled den Paste Button

project1.zip
Beispiel copy paste linux
(704.32 KiB) 51-mal heruntergeladen

Edit: Ich habe es getestet mit Lazarus 4 RC3

Edit2: Unter Windows hat es auch funktioniert.

MmVisual
Beiträge: 1579
Registriert: Fr 10. Okt 2008, 23:54
OS, Lazarus, FPC: Winuxarm (L 4 FPC 3.2.2)
CPU-Target: 32/64Bit

Re: Clipboard.HasPictureFormat - unter Linux

Beitrag von MmVisual »

Vielen Dank für die kleine App.

Bei mir mit Lazarus V3.4 funktioniert deine App korrekt.

Jedoch bei meiner App ist
bZW := Clipboard.HasPictureFormat;
nicht korrekt.
Bild1.png
(466.64 KiB) Noch nie heruntergeladen
Dein Programm habe ich nur gestartet, ohne eine Taste zu drücken.

Ich versuche das mal mit Lazarus V4 (Linux), aber kann das erst heute Abend machen.
EleLa - Elektronik Lagerverwaltung - www.elela.de

Benutzeravatar
theo
Beiträge: 10856
Registriert: Mo 11. Sep 2006, 19:01

Re: Clipboard.HasPictureFormat - unter Linux

Beitrag von theo »

Manchmal ist es erhellend, einfach mal zu schauen was drin ist:

Code: Alles auswählen

  Clipboard.SupportedFormats(Memo1.Lines);   
@fliegermichl: Du hast in dem Zip deine ganzen gesammelten Werke reingepackt. Das war bestimmt keine Absicht?

Benutzeravatar
fliegermichl
Lazarusforum e. V.
Beiträge: 1639
Registriert: Do 9. Jun 2011, 09:42
OS, Lazarus, FPC: Lazarus Fixes FPC Stable
CPU-Target: 32/64Bit
Wohnort: Echzell

Re: Clipboard.HasPictureFormat - unter Linux

Beitrag von fliegermichl »

theo hat geschrieben: Mi 23. Apr 2025, 12:23 Manchmal ist es erhellend, einfach mal zu schauen was drin ist:

Code: Alles auswählen

  Clipboard.SupportedFormats(Memo1.Lines);   
@fliegermichl: Du hast in dem Zip deine ganzen gesammelten Werke reingepackt. Das war bestimmt keine Absicht?
Ups, Ich habe ein Verzeichnis Lazarus_Projects. Da sind normalerweise meine Projekte drin. Darunter gibt es ein Verzeichnis temp.
In temp habe ich so verschiedene Testdinger u.a. eben auch das kleine Testprojekt aber nicht in einem separaten Verzeichnis.
Ich hab die Funktion "Projekt veröffentlichen" verwendet und wusste nicht, daß diese Funktion alle Testdinger mit exportiert.

Mathias
Beiträge: 6899
Registriert: Do 2. Jan 2014, 17:21
OS, Lazarus, FPC: Linux (die neusten Trunk)
CPU-Target: 64Bit
Wohnort: Schweiz

Re: Clipboard.HasPictureFormat - unter Linux

Beitrag von Mathias »

Kann man Lazarus dazu zwingen die ZW vom OS neu zu untersuchen? Aktuell schaut Lazarus im Cache nach und merkt nicht zuverlässig dass es in der ZW nun was anderes gibt.
Ich habe da mal native Versuche mit dem Clipboard gemacht,

Wen man <space> drückt werden alle Varianten gelistet, welcher der Host zu Verfügung stellt.


https://github.com/sechshelme/Lazarus-X ... ow_Targets.

Die Ausgabe sieht dann etwa so aus
Der erste Test in der Inhalt von einem ScreeShoot, das sieht man gut, das da ein PNG zu Verfügung steht.
Bei Zweiten Versuch habe ich Ctrl-C im Browser gemacht.

Code: Alles auswählen

exposure
------------ SelectionNotify ---------------------


(0) image/png
(1) TARGETS
(2) TIMESTAMP


------------ SelectionNotify ---------------------


(0) TIMESTAMP
(1) TARGETS
(2) SAVE_TARGETS
(3) MULTIPLE
(4) STRING
(5) UTF8_STRING
(6) TEXT
(7) chromium/x-source-url
(8) text/plain
(9) text/plain;charset=utf-8
(a) chromium/x-internal-source-rfh-token
Mit Lazarus sehe ich grün
Mit Java und C/C++ sehe ich rot

MmVisual
Beiträge: 1579
Registriert: Fr 10. Okt 2008, 23:54
OS, Lazarus, FPC: Winuxarm (L 4 FPC 3.2.2)
CPU-Target: 32/64Bit

Re: Clipboard.HasPictureFormat - unter Linux

Beitrag von MmVisual »

In meiner App wird deutlich weniger verfügbare Clipboard Varianten gezeigt als von der Demo App:

- Text mit meinem Programm in die ZW kopiert
- Dann eine Grafik von einem fremden Programm in die ZW kopiert
- Meine App merkt überhaupt nicht dass die Grafik in der ZW nun drin ist:
Bild2.png
Bild2.png (175.62 KiB) 1245 mal betrachtet
Im Quellcode ist "CanReadFromCache" gesetzt und der merkt überhaupt nicht dass da was anderes in der ZW drin ist.
Irgendwie funktioniert der Mechanismus nicht, dass es etwas anderes in der ZW gibt und daher lädt meine App das Bild nicht.
Bild3.png
Bild3.png (82.09 KiB) 1239 mal betrachtet
Wenn ich mit meiner eigenen App ein Bild in die ZW kopiere, dann weis er das. Als ob meine App eine "private" ZW hat und nicht die vom Linux, aber dennoch kann ich die Dinge aus meiner App in andere Programme einfügen.

Das ist der Code um die Texte in dem Memo1 an zu zeigen:

Code: Alles auswählen

    Clipboard.SupportedFormats(frmMain.Memo1.Lines);
    For i := frmMain.Memo1.Lines.Count - 1 DownTo 0 Do
      If Trim(frmMain.Memo1.Lines[i]) = '' Then
        frmMain.Memo1.Lines.Delete(i); 
EleLa - Elektronik Lagerverwaltung - www.elela.de

MmVisual
Beiträge: 1579
Registriert: Fr 10. Okt 2008, 23:54
OS, Lazarus, FPC: Winuxarm (L 4 FPC 3.2.2)
CPU-Target: 32/64Bit

Re: Clipboard.HasPictureFormat - unter Linux

Beitrag von MmVisual »

Ich habe mit FpcUpDeluxe nun Lazarus V4.99 mit FPC V3.2.2 installiert.
Es ist das gleiche, also geht nicht so richtig.
EleLa - Elektronik Lagerverwaltung - www.elela.de

Benutzeravatar
greye
Beiträge: 45
Registriert: So 16. Feb 2014, 15:38
OS, Lazarus, FPC: Debian/Fedora/Windows, Lazarus 3.6/4.0RC2, FPC 3.2.2
CPU-Target: 64 Bit

Re: Clipboard.HasPictureFormat - unter Linux

Beitrag von greye »

MmVisual hat geschrieben: Mi 23. Apr 2025, 14:53Als ob meine App eine "private" ZW hat und nicht die vom Linux, aber dennoch kann ich die Dinge aus meiner App in andere Programme einfügen.
Äh, ja, irgendwas ist da. Es gibt mindestens zwei Zwischenablagen unter Linux, wobei die eine nur für Text ist.
Siehe z.B.: https://wiki.ubuntuusers.de/Zwischenablage/

Allerdings kann das auch stark vom verwendeten Desktop Environment abhängen. Seit einiger Zeit kämpfe ich unter KDE damit, dass z.B. Screenshots zwar irgendwie da sind, aber nicht überall eingefügt werden können, wo es gehen sollte. Manchmal passiert das auch mit Text.
Z.B. mache ich einen Screenshot aus dem Browser heraus. Den kann ich dann kopieren und im Browser wieder irgendwo einfügen, aber ein externes Programm wie Gimp sieht ihn nicht. Das liegt aber nicht an der Screenshot-Funktion des Browsers, denn umgekehrt ist es auch so: Bild außerhalb kopieren und dann einfügen geht oder geht nicht, je nach Tagesform.

Irgendwie fühlt es sich an, als wären da plötzlich drei oder vier Zwischenablagen, die wetteifern, welche mir das Leben am schwersten macht. Rausgefunden, woran das jetzt genau liegt, habe ich noch nicht.

Mathias
Beiträge: 6899
Registriert: Do 2. Jan 2014, 17:21
OS, Lazarus, FPC: Linux (die neusten Trunk)
CPU-Target: 64Bit
Wohnort: Schweiz

Re: Clipboard.HasPictureFormat - unter Linux

Beitrag von Mathias »

Äh, ja, irgendwas ist da. Es gibt mindestens zwei Zwischenablagen unter Linux, wobei die eine nur für Text ist.
Genau, es gibt 3. Wobei eigentlich nur noch "clipboard" relevant ist, "primary" und "secondary" sind alte Relikte aus der X11 Zeit.

https://wiki.ubuntuusers.de/xsel/
Mit Lazarus sehe ich grün
Mit Java und C/C++ sehe ich rot

MmVisual
Beiträge: 1579
Registriert: Fr 10. Okt 2008, 23:54
OS, Lazarus, FPC: Winuxarm (L 4 FPC 3.2.2)
CPU-Target: 32/64Bit

Re: Clipboard.HasPictureFormat - unter Linux

Beitrag von MmVisual »

Ich habe mal danach gesucht wo überall in meinem Programm irgend was mit "Clipboard." gemacht wird. Da ist nicht spezielles drin:
Bild1.png
Bild1.png (111.9 KiB) 384 mal betrachtet
Unter Windows kompilliert funktioniert der Code ja auch, nur unter Linux gibt es die Probleme.
EleLa - Elektronik Lagerverwaltung - www.elela.de

Benutzeravatar
fliegermichl
Lazarusforum e. V.
Beiträge: 1639
Registriert: Do 9. Jun 2011, 09:42
OS, Lazarus, FPC: Lazarus Fixes FPC Stable
CPU-Target: 32/64Bit
Wohnort: Echzell

Re: Clipboard.HasPictureFormat - unter Linux

Beitrag von fliegermichl »

Merkwürdig,

wenn es doch aber mit der kleinen TestApp geht.
Liegen vielleicht irgendwelche anderen Units dazwischen, die Einfluss auf das Clipboard haben?

MmVisual
Beiträge: 1579
Registriert: Fr 10. Okt 2008, 23:54
OS, Lazarus, FPC: Winuxarm (L 4 FPC 3.2.2)
CPU-Target: 32/64Bit

Re: Clipboard.HasPictureFormat - unter Linux

Beitrag von MmVisual »

Meine App sieht nur einen zu vorletzt kopierten Text in der ZW, hingegen das zuletzt in die ZW Ablage kopierte ist eine Grafik von einem anderen Programm.
Lazarus arbeitet mit einem Cache, den man nicht deaktivieren kann. Ich denke dass daher das Problem kommt.
EleLa - Elektronik Lagerverwaltung - www.elela.de

Mathias
Beiträge: 6899
Registriert: Do 2. Jan 2014, 17:21
OS, Lazarus, FPC: Linux (die neusten Trunk)
CPU-Target: 64Bit
Wohnort: Schweiz

Re: Clipboard.HasPictureFormat - unter Linux

Beitrag von Mathias »

Ich habe mal danach gesucht wo überall in meinem Programm irgend was mit "Clipboard." gemacht wird. Da ist nicht spezielles drin:
Wo hast du diesen Suchen Dialog gefunden, denn kenne ich gar nicht.
Mit Lazarus sehe ich grün
Mit Java und C/C++ sehe ich rot

MmVisual
Beiträge: 1579
Registriert: Fr 10. Okt 2008, 23:54
OS, Lazarus, FPC: Winuxarm (L 4 FPC 3.2.2)
CPU-Target: 32/64Bit

Re: Clipboard.HasPictureFormat - unter Linux

Beitrag von MmVisual »

Text markieren
Shift + Strg + F
Dann kommt der Dialog zum in Dateien zu suchen, dann kann man alle Projektdateien auswählen.
Bild2.png
Bild2.png (21.77 KiB) 330 mal betrachtet
EleLa - Elektronik Lagerverwaltung - www.elela.de

Antworten