❤️ Helfen Sie jetzt mit, unser LibreOffice Forum zu erhalten! ❤️
Mit Ihrer Spende sichern Sie den Fortbestand, den Ausbau und die laufenden Kosten dieses Forums. 🌱

🍀 Jeder Beitrag zählt – vielen Dank für Ihre Unterstützung!🍀

❤️ DANKE >> << DANKE ❤️

>> Dank Ihrer Unterstützung -> Keine Werbung für alle registrierten LibreOffice-Forum User! <<
🤗 Als Dankeschön werden Sie im Forum als LO-SUPPORTER gekennzeichnet. 🤗

[Gelöst] Text per Basic-Makro in die Zwischenablage schreiben

Alles zur Programmierung im LibreOffice.
Antworten
Proma
Beiträge: 42
Registriert: Di 24. Sep 2024, 16:53

[Gelöst] Text per Basic-Makro in die Zwischenablage schreiben

Beitrag von Proma » Di 5. Aug 2025, 11:31

Hallo liebe Experten,

seit einiger Zeit habe ich massive Probleme mit den Basic-IDE-Tools (Vers. 1.2.0); beim Setzen / Entfernen von Einzügen oder Kommentarzeichen stürzt LO ab. Der Fehler liegt m.E. daran, dass mein neuerdings installiertes LO (Version 25.2 / Win 11) nicht mit der nachstehenden Prozedur zum Einfügen von Text in das ClipBoard (vermutlich mit der Zeile oTR = ...) klar kommt:

Code: Alles auswählen

Sub BIT_SetClipBoard( sText As String )
'--------------------------------------------------------------------------------------------
	' Inserta sText en el portapapeles. SOLO TEXTO
	' Insert sText into clipboard. ONLY TEXT
	Dim oClip As Object, oTR As Object
	' crea una instancia de SystemClipboard
	oClip = CreateUNOService( "com.sun.star.datatransfer.clipboard.SystemClipboard")
	oTR = CreateUNOListener("BIT_Tr_", "com.sun.star.datatransfer.XTransferable")
	' insertar en el portapapeles (clipboard)
	oClip.setContents(oTR,Null)
	BIT_sTxtClipBoardString = sText
	' oClip.flushClipboard() ' no funciona/ no work
End Sub
Im Internet habe ich mir die Finger wund gegoogelt, bin aber immer nur auf Lösungen gestoßen, die ebenfalls auf diesem Service "com.sun.star.datatransfer.XTransferable" basieren und beim Testen mein LO abstürzen ließen. Jetzt bin ich ratlos und baue auf Eure Hilfe.

Vielen Dank vorab für die Unterstützung und liebe Grüße
vom Martin
Zuletzt geändert von Proma am Mi 6. Aug 2025, 18:17, insgesamt 1-mal geändert.

mikele
* LO-Experte *
Beiträge: 1936
Registriert: Mo 1. Aug 2011, 20:51

Re: Text per Basic-Makro in die Zwischenablage schreiben

Beitrag von mikele » Mi 6. Aug 2025, 08:49

Hallo,
zu dem Listener müssen auch ein paar Subs definiert werden. Beschreibe mal etwas genauer, was du (wie) in die Zwischenablage schreiben nöchtest.
Gruß,
mikele

Benutzeravatar
karolus
* LO-Experte *
Beiträge: 2550
Registriert: Fr 10. Dez 2010, 10:01

Re: Text per Basic-Makro in die Zwischenablage schreiben

Beitrag von karolus » Mi 6. Aug 2025, 10:24

mikele hat geschrieben:
Mi 6. Aug 2025, 08:49
Hallo,
zu dem Listener müssen auch ein paar Subs definiert werden. Beschreibe mal etwas genauer, was du (wie) in die Zwischenablage schreiben nöchtest.
Der gezeigte Code stammt aus der Erweiterung »Basic-Ide-Tools« anscheinend ist das 2012 rausgekommen und 2013 dann das letzte Release. … :?: sollte man auf tote Pferde einprügeln :?:
LO7.4.7.5 debian 12(bookworm) auf Raspberry4b 8GB (64bit)
LO24.8.0.3 flatpak debian 12(bookworm) auf Raspberry4b 8GB (64bit)

Proma
Beiträge: 42
Registriert: Di 24. Sep 2024, 16:53

Re: Text per Basic-Makro in die Zwischenablage schreiben

Beitrag von Proma » Mi 6. Aug 2025, 18:14

Hallo mikele, hallo Karolus,

danke erstmal für Eure Rückmeldungen!

Seit meiner Anfrage war ich nicht ganz untätig und es ist mir auch gelungen eine (auf meinem Rechner) funktionierende Prozedur zu finden, die - nach ein paar Anpassungen - genau das tut, was ich mir von ihr erhofft habe, nämlich Texte in die Zwischenablage schreiben. Das war auch nicht anders zu erwarten, denn den Code habe ich hier in diesem Forum entdeckt! :D Der angepasste Code sieht nun so aus:

Code: Alles auswählen

Option Explicit

' MAKRO-BEISPEL  Text in die Zwischenablage kopieren
' FUNDSTELLE     LibreOffice-Forum
' THEMA          Zwischenablage befüllen / einfügen                         
' AUTOR          Frieder 12.02.2012 16:29
' MODIFIZIERT    Proma   05.08.2025  


Global sTxtCString As String 

Sub Demo_pCopyToClipboard() 
' Zeigt anhand eines Beispiels den
' Aufruf der Prozedur pCopyToClipBoard()

  Dim c      As String                                          'Zeilenwechsel
  Dim strTxt As String, strPmt As String                        'Beispiel-Text            / Eingabeaufforderung
  Dim strTtl As String, strDft As String                        'Beschriftung Titelleiste / Vorschlag für eine Eingabe

' BENUTZEREINGABE VORBEREITEN
  c = Chr(10)                                                   'Zeilenumbruch definieren
  strPmt = "Bitte geben sie den Text ein," & c & "den Sie "     'Eingabeaufforderung (Teil 1)
  strPmt = strPmt & "in die Zwischenablage kopieren möchten:"   'Eingabeaufforderung (Teil 2)
  strTtl = "Demo - Text in die Zwischenablage schreiben"        'Beschriftung für die Titelleiste der InputBox
  strDft = "'Abc Äöü ß?! 123"                                   'Vorschlag für eine Eingabe
  
' BENUTZEREINGABE HOLEN
  strTxt = InputBox(strPmt, strTtl, strDft)                     'Benutzer zur Text-Eingabe per InputBox auffordern
  If Trim(strTxt) = "" Then GoTo Exit_Demo_pCopyToClipboard     'Wenn Benutzereingabe unbrauchbar, Prozedur verlassen

' PROZEDURAUFRUF
  CopyToClipBoard(strTxt)                                        'Ruft die zu testende Prozedur auf
  
'ERFOLGSMELDUNG
  MsgBox "Dieser Text wurde ins ClipBoard kopiert" & c & strTxt 'Bestätigung zeigen

Exit_Demo_pCopyToClipboard:                                   'SM: Ausgang
End  Sub 



Sub CopyToClipBoard(sText) 
  Dim oClip As Object
  Dim oTR As Object

' create SystemClipboard instance 
  oClip = CreateUnoService("com.sun.star.datatransfer.clipboard.SystemClipboard") 
  oTR = createUnoListener("Tr_", "com.sun.star.datatransfer.XTransferable") 

' set data 
  oClip.setContents(oTR, Null) 
  sTxtCString = sText 

'oClip.flushClipboard() ' does not work 
End  Sub 


Function Tr_getTransferData(aFlavor As com.sun.star.datatransfer.DataFlavor) 
  If (aFlavor.MimeType = "text/plain;charset=utf-16") Then 
    Tr_getTransferData() = sTxtCString 
  End If 
End  Function 


Function Tr_getTransferDataFlavors() 
  Dim aFlavor As New com.sun.star.datatransfer.DataFlavor 

  aFlavor.MimeType = "text/plain;charset=utf-16" 
  aFlavor.HumanPresentableName = "Unicode-Text" 
  Tr_getTransferDataFlavors() = Array(aFlavor) 
End  Function 


Function Tr_isDataFlavorSupported(aFlavor as com.sun.star.datatransfer.DataFlavor) as Boolean 
  If  aFlavor.MimeType ="text/plain;charset=utf-16"  Then 
    Tr_isDataFlavorSupported = true 
  Else 
    Tr_isDataFlavorSupported = false 
  End  If 
End Function
Leider hat mir dieser Code letztlch aber nichts gebracht, LO ist auch nach Einbau dieser Prozedur weiterhin beim Versuch, Texte einzurücken, zu kommentieren usw. regelmäßig abgestürzt.

Danach habe ich in den BIT_ die Wartezeiten nach den ClipBoard-Aktionen von 50 (vermutlich Millisekunden) auf 150 erhöht und auch vor jeder ClipBoard-Aktion das ClipBoard zurücksetzen lassen mit BIT_ClearClipboard().

Seither laufen die Aktionen in den BIT_ wieder wie geschmiert. Naja, ein bisschen langsamer sind sie natürlich jetzt schon geworden (3-fache Wartezeit halt). Aber tot sind die Pferde noch lange nicht, hächstens ein bisschen altersschwach...

Vielen Dank nochmal für Eure Nachfrage und liebe Grüße
vom Martin

Benutzeravatar
karolus
* LO-Experte *
Beiträge: 2550
Registriert: Fr 10. Dez 2010, 10:01

Re: Text per Basic-Makro in die Zwischenablage schreiben

Beitrag von karolus » Mi 6. Aug 2025, 20:54

Proma hat geschrieben:
Mi 6. Aug 2025, 18:14
Aber tot sind die Pferde noch lange nicht, hächstens ein bisschen altersschwach...
Ein Tierquäler ist auch nicht besser als ein Leichenschänder :!:

mir freundlichen Grüßen
LO7.4.7.5 debian 12(bookworm) auf Raspberry4b 8GB (64bit)
LO24.8.0.3 flatpak debian 12(bookworm) auf Raspberry4b 8GB (64bit)

Proma
Beiträge: 42
Registriert: Di 24. Sep 2024, 16:53

Re: [Gelöst] Text per Basic-Makro in die Zwischenablage schreiben

Beitrag von Proma » Do 7. Aug 2025, 06:40

Ich prügle ja nicht auf die Pferde ein sondern versuche lediglich, sie bei Laune zu halten, jedoch nur mit Bio-Zuckerbrot und ganz ohne Peitsche. Als Rentner haben sie sich solches Gnadenbrot durchaus verdient, :D

Vielen Dank nochmal und liebe Grüße
vom Martin


An alle, die das LibreOffice-Forum gern nutzen und unterstützen wollen:


Bitte helfen Sie uns mit 7 Euro pro Monat.
Durch Ihren Beitrag tragen Sie dazu bei, unsere laufenden Kosten für die kommenden Monate zu decken.
Unkompliziert per Kreditkarte oder PayPal.
Als ein kleines Dankeschön werden Sie im LO-Forum als SUPPORTER gekennzeichnet.



Antworten