Ja der Code war leider nicht ganz sauber (War ja auch nicht von mir.)
ich habe ihn gesäubert:
Code: Alles auswählen
Global sTxtCString As String
Sub clipboard_1
Dim sText As String
sText =Inputbox ("Bitte geben sie den Text ein," &Chr(10)& _
"den sie in die Zwischenablage Kopieren möchten.","Ihr Text","ABC123" )
CopyToClipBoard(sText)
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
Die Zwischenablage ist nicht einfach ein Ordner, in den Man etwas hineinkopiert, und herausholt,
sondern ein Programm, dass Kopieren selbständig macht, und einem die Daten auch wieder in einem bestimmten Format zu Verfügung stellt.
Um dies tuen zu können, muss die Zwischenablage mit dem Programm, das die Daten holt oder Bringt (z.B. Libreoffice Basic Makro) kommunizieren.
Dazu wir der Listener benötigt.(ein zuhörer: er hört das was die Zwischenablage fragt, und antwortet darauf.)
Ich versuche das mahl zu verdeutlichen:
Makro an Zwischenablage: Ich habe Daten für dich, hier ist der Listener, mit dem du kommunizieren kannst. [oClip.setContents(oTR,Null) ].
Zischenablage: ich habe folgende Datentypen...,Wird dieser Datentyp unterstüzt? [Tr_isDataFlavorSupported]
Listener: Ja [Tr_isDataFlavorSupported = true]
Zischenablage: Was sind das für Daten [Tr_getTransferDataFlavors()]
Listener: Es ist Unicode text [aFlavor.MimeType ="text/plain;charset=utf-16"
aFlavor.HumanPresentableName ="Unicode-Text"]
Zischenablage: Gib mir die Daten [Tr_getTransferData]
Listener:Hier nimm sie.[Tr_getTransferData() = sTxtCString]
P.S.
Da hier mit einem Listener gearbeitet wird, kann der Code nicht in ein einzelnes Sub gesteckt werden.
und das Sub "clipboard_1" ist ja nur zu Demonstrationszwecken da.
P.P.S. an alle die es interessiert:
dieser Listener bildet eine Ausnahme, er benötigt die Methode "disposing" nicht:
Code: Alles auswählen
sub Tr_disposing (oEvent)
end sub
da es kein Event-Listener ist.
Man sieht an den "Dbg_Methods" eines Listeners immer, ob ein "disposing" Benötigt wird oder nicht.
Gruß Frieder