Markierten Text aus Textfeld in Zwischenablage

Antwort erstellen


BBCode ist eingeschaltet
[img] ist ausgeschaltet
[url] ist eingeschaltet
Smileys sind ausgeschaltet

Die letzten Beiträge des Themas
   

Ansicht erweitern Die letzten Beiträge des Themas: Markierten Text aus Textfeld in Zwischenablage

Re: Markierten Text aus Textfeld in Zwischenablage

von Colster » Mi, 21.07.2010 14:14

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

Re: Markierten Text aus Textfeld in Zwischenablage

von oktobaer » Mi, 11.02.2009 09:02

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

von turtle47 » Di, 10.02.2009 23:36

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

von oktobaer » Di, 10.02.2009 23:15

Hallo shaneat54!

Falsch verstanden :D

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

von oktobaer » Di, 10.02.2009 00:16

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

von turtle47 » Sa, 24.01.2009 11:50

Hallo Oktobaer,
oktobaer hat geschrieben:verstehen tue ich das aber nicht...
Toll, dann sind wir ja schon zu zweit. :D

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. :lol:
Die Msgbox hat damit nichts zu tun. Die war nur zur Visualisierung.

Schönes Wochenende.

Jürgen

Re: Markierten Text aus Textfeld in Zwischenablage

von oktobaer » Sa, 24.01.2009 11:29

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

von turtle47 » Sa, 24.01.2009 01:03

Hallo Oktobaer,

schau Dir mal beigefügtes Beispiel an. Vielleicht bringt Dich das weiter.

Viel Erfolg.

Jürgen
Dateianhänge
SelektierterText.ods
(10.52 KiB) 266-mal heruntergeladen

Re: Markierten Text aus Textfeld in Zwischenablage

von oktobaer » Fr, 23.01.2009 21:36

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

von komma4 » Fr, 23.01.2009 17:15

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.

Markierten Text aus Textfeld in Zwischenablage

von oktobaer » Do, 22.01.2009 23:12

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

Nach oben