Seite 1 von 1
Markierten Text aus Textfeld in Zwischenablage
Verfasst: Do, 22.01.2009 23:12
von oktobaer
Hallo Ihr!
Wie kann ich einen markierten Text in einem Textfeld in die Zwischenablage bringen - quasi einen Befehl der Strg + "C" macht?
Code: Alles auswählen
SUB Dokument_ablegen
Dim oSelection As New com.sun.star.awt.Selection
Verzeichnis$= MDB_Dlg.getControl("FileControl").getText()
Ordner$=MDB_Dlg.getControl("TF_BerichtNr").getText()
AktDatum$=MDB_Dlg.getControl("TF_Stand").getText()
Befehl$=Verzeichnis$ & "\" & AktDatum$ & "_" & Ordner$ & "_"
BefehlLen%=len(Befehl$)
MDB_Dlg.getControl("TF_Ablage").setFocus
MDB_Dlg.getControl("TF_Ablage").setText(Befehl$)
oSelection.Min = 0
oSelection.Max = BefehlLen%
MDB_Dlg.getControl("TF_Ablage").setSelection(oSelection)
' Wie bringe ich jetzt die oSelection in die Zwischenablage?
'Die Notlösung in VBA funktioniert! ;-)
Worksheets("Setup").cells(9,2)=Befehl$
Worksheets("Setup").cells(9,2).select
selection.copy
Worksheets("MDB").Select
END SUB
Ziel des Sub ist es, den langen Dateipfad zu generieren und in die Zwischenablage zu geben, damit ich ihn in einer anderen Anwendung mit "Speichern unter" einfügen kann.
Ideen?
Oktogrüße
Re: Markierten Text aus Textfeld in Zwischenablage
Verfasst: Fr, 23.01.2009 17:15
von komma4
siehe Kapitel 5.23.4 (in meiner Ausgabe)
Storing a string to the clipboard in
Andrews Makro-Dokument.
Kommst Du damit zurecht?
nachträglich: Willkommen im Forum.
Re: Markierten Text aus Textfeld in Zwischenablage
Verfasst: Fr, 23.01.2009 21:36
von oktobaer
Hallo komma4!
Danke für Deinen Tipp - ist für mich aber doch recht schwere Kost...
Ich sehe:
Code: Alles auswählen
Private oTRX
Sub Main
Dim null As Object
Dim sClipName As String
sClipName = "com.sun.star.datatransfer.clipboard.SystemClipboard"
oClip = createUnoService(sClipName)
oTRX = createUnoListener("TR_", "com.sun.star.datatransfer.XTransferable")
oClipContents = oClip.setContents(oTRX, null)
End Sub
Function TR_getTransferData( aFlavor As com.sun.star.datatransfer.DataFlavor )As Any
If (aFlavor.MimeType = "text/plain;charset=utf16") Then
TR_getTransferData = "From OO with love ..."
EndIf
End Function
Function TR_getTransferDataFlavors() As Any
Dim aF As New com.sun.star.datatransfer.DataFlavor
aF.MimeType = "text/plain;charset=utf16"
aF.HumanPresentableName = "UnicodeText"
TR_getTransferDataFlavors = Array(aF)
End Function
Function TR_isDataFlavorSupported( aFlavor As com.sun.star.datatransfer.DataFlavor ) As Boolean
'My XP system beep shows that this routine is called every 2 seconds
'call MyPlaySoundSystem("SystemAsterisk", true)
TR_isDataFlavorSupported = (aFlavor.MimeType = "text/plain;charset=utf16")
End Function
und verstehe Bahnhof. Folgende Lösung habe ich versucht :
Code: Alles auswählen
sClipName = "com.sun.star.datatransfer.clipboard.SystemClipboard"
oClip = createUnoService(sClipName)
oTRX = Befehl$
oClipContents = oClip.setContents(oTRX, null)
Leider ohne Erfolg! (=Fehlermeldung: Objektvariable nicht belegt)
OktoGrüße
PS.: Warum sind selbst einfachste Dinge unter OO so umständlich - ein simples "selection.copy" wäre sooo einfach...
Re: Markierten Text aus Textfeld in Zwischenablage
Verfasst: Sa, 24.01.2009 01:03
von turtle47
Hallo Oktobaer,
schau Dir mal beigefügtes Beispiel an. Vielleicht bringt Dich das weiter.
Viel Erfolg.
Jürgen
Re: Markierten Text aus Textfeld in Zwischenablage
Verfasst: Sa, 24.01.2009 11:29
von oktobaer
Hallo Jürgen!
Danke, ich bin echt begeistert wie das funktioniert - verstehen tue ich das aber nicht...
Welcher Variablen muss ich mein Befehl$ übergeben, damit es diesen in die Zwischenablage kopiert?
Code: Alles auswählen
Sub MarkText
selText= myTextfield.SelectedText
msgbox "Der Folgende Text >> " & selText & " << ist jetzt in der Zwischenablage", 64, "Clipboard Copy"
Zwischenablage
oDialog1.endexecute
End Sub
Sub Zwischenablage
Dim null As Object
Dim sClipName As String
sClipName = "com.sun.star.datatransfer.clipboard.SystemClipboard"
oClip = createUnoService(sClipName)
oTRX = createUnoListener("TR_", "com.sun.star.datatransfer.XTransferable")
oClipContents = oClip.setContents(oTRX, null)
End Sub
Im ersten Makro steckt die Information in selText, in welcher Variable steckt im zweiten Makro der "selText"?
Oder wird das durch msgbox ... ,"Clipboard Copy" schon verschoben?
*ratlos schau*
Oktogrüße
Re: Markierten Text aus Textfeld in Zwischenablage
Verfasst: Sa, 24.01.2009 11:50
von turtle47
Hallo Oktobaer,
oktobaer hat geschrieben:verstehen tue ich das aber nicht...
Toll, dann sind wir ja schon zu zweit.
Die Variable steckt in der nachfolgenden Function:
Code: Alles auswählen
Function TR_getTransferData( aFlavor As com.sun.star.datatransfer.DataFlavor ) As Any
If (aFlavor.MimeType = "text/plain;charset=utf-16") Then
TR_getTransferData = selText ' <<<<< hier wird die Variable mitgegeben!!!! <<<<<
EndIf
End Function
Frage mich aber bitte nicht wie das alles zusammenhängt, ich finde da einfache keine direkte Verbindung zwischen der Sub und der Function.
oktobaer hat geschrieben:Oder wird das durch msgbox ... ,"Clipboard Copy" schon verschoben?
Nö nö, das wäre ja schön, wenn das so einfach funtionieren würde.

Die Msgbox hat damit nichts zu tun. Die war nur zur Visualisierung.
Schönes Wochenende.
Jürgen
Re: Markierten Text aus Textfeld in Zwischenablage
Verfasst: Di, 10.02.2009 00:16
von oktobaer
Hallo Jürgen!
Kannst Du mir bitte sagen wie es möglich ist einen Text mit Zeilenumbrüchen, CHR$(13), so zu kopieren, dass auch die Zeilenumbrüche ankommen.
Aktuell entsteht eine lange "Textwurst"
Danke!
Oktobaer
Re: Markierten Text aus Textfeld in Zwischenablage
Verfasst: Di, 10.02.2009 23:15
von oktobaer
Hallo shaneat54!
Falsch verstanden
Habe ja schon ein mehrzeiliges Textfeld mit Zeilenumbrüchen.
Dieses markiere ich von Anfang bis Ende und schiebe es in die Zwischenablage.
In der Zielanwendung füge ich es dann ein.
Im MS-Editor entsteht dann eine lange Textwurst, im Mailprogramm passte es seltsamer Weise.
Insofern ist erst mal Entwarnung; interessieren würde es mich aber schon...
Vielen Dank!
Oktobaer
Re: Markierten Text aus Textfeld in Zwischenablage
Verfasst: Di, 10.02.2009 23:36
von turtle47
Hi Oktobaer,
oktobaer hat geschrieben:im Mailprogramm passte es seltsamer Weis
Das hängt wohl damit zusammen, weil man in den Mailprogrammen einstellen
kann nach wieviel Zeichen umgebrochen werden soll.
oktobaer hat geschrieben:interessieren würde es mich aber schon...
Mich auch.
Jürgen
Re: Markierten Text aus Textfeld in Zwischenablage
Verfasst: Mi, 11.02.2009 09:02
von oktobaer
Hallo Jürgen!
Glaube ich nicht!
Denn im MSEditor sehe ich die Zeilenschaltungen (CHR$(13) als kleine Kästchen stehen - die sind also da!
Im Mailprogramm ist genau an der beabsichtigten Stelle die Zeilenschaltung - also nicht automatisch nach xx Zeichen!
Überlege gerade ob wie früher evtl. ein LF UND ein CR notwendig wäre (chr$(10) und CHR$(13)?
Mal probieren...
Oktogrüße!
Re: Markierten Text aus Textfeld in Zwischenablage
Verfasst: Mi, 21.07.2010 14:14
von Colster
Hallo,
auch wenn es schon eine Weile her ist mit diesem Thread, bin ich sehr froh folgenden Code-Schnipsel präsentieren zu können:
Aus einem Calc-Dokument werden die Zellen a1:a2 selektiert, der Inhalt mit .getTransferable in die Zwischenablage übertragen und kann dann mit Strg-V an beliebiger Stelle im Dokument eingefügt werden.
Code: Alles auswählen
Sub Main
Dim null As Object
Dim sClipName As String
Dim oClip, oDataTransfer, oClipOwner
oClipOwner = Null
oDocCont = thisComponent.getCurrentController()
oSheet = thisComponent.sheets().getByIndex(0)
oDocCont.select(oSheet.getCellRangeByPosition(0,0,0,1)
oDataTransfer = oDocCont.getTransferable()
sClipName = "com.sun.star.datatransfer.clipboard.SystemClipboard"
oClip = createUNOService(sClipName)
oClip.setContents(oDatatransfer,Null)
End Sub
Vielleicht hilft das irgendwem an anderer Stelle weiter ...
Mit Gruß
Colster