Makro aufzeichnen gescheitert - versuche es jetzt mit Basic

Programmierung unter AOO/LO (StarBasic, Python, Java, ...)

Moderator: Moderatoren

DocMcFly
*
Beiträge: 10
Registriert: Mo, 07.11.2005 09:11

Makro aufzeichnen gescheitert - versuche es jetzt mit Basic

Beitrag von DocMcFly »

Hallo,

ich wollte mir ein kleines MakroTool basteln, was folgendes macht:

1. markierten Text merken
2. neuen Querverweis anlegen hinter dem markierten Text
3. Querverweis soll so heißen: [ markierter Text ]

Ich dachte das wäre einfach. Der Makrorecorder bekommt das gar nicht hin... Also selbst ist der Tipper...

Aber mein erstes Problem ist schon Punkt 1: Wie bekomme ich den markierten Text in eine Variable?

Vom Makrorecorder habe ich folgenden Quelltext erhalten:

Code: Alles auswählen

sub AutoQuerverweis
rem ----------------------------------------------------------------------
rem define variables
dim document   as object
dim dispatcher as object

rem --------Von Mir:------------------------------------------------------
dim text$

rem ----------------------------------------------------------------------
rem get access to the document
document   = ThisComponent.CurrentController.Frame
dispatcher = createUnoService("com.sun.star.frame.DispatchHelper")


rem ---------Mein erstes OOo Basic-Programm:------------------------------
rem Hier müsste ich ansetzen...


text$ = document.getSelectedText() 

rem oder so ähnlich... Wie bekomme ich raus, melche Methoden im Document-Object stecken? 

end sub
Ich bin etwas verwöhnt, weil ich in JAVA entwickle und so in meiner IDE nur einen Punkt eingebe und sehe welche Funktionen (Methoden) zur Verfügung stehen... Basic ist halt echt lange her... (TurboBasic & QuickBasic)


Naja, jedenfalls danke fürs Lesen und Anworten und Helfen...

Clemens
Benutzeravatar
komma4
********
Beiträge: 5332
Registriert: Mi, 03.05.2006 23:29
Wohnort: Chon Buri Thailand Asia
Kontaktdaten:

Beitrag von komma4 »

Beispiel (ohne irgendwelche Prüfungen) aus add2dic.sxw:

ein markiertes Wort wird übernommen. Ist keines markiert, so wird das Wort unter dem Cursor markiert.

Code: Alles auswählen

' sichtbares Dokument (es ist besser eines da) 
oDok = StarDesktop.getCurrentComponent()

' sichtbaren cursor
oViewCursor = oDok.getCurrentController().getViewCursor()

' textcursor an stelle des sichtbaren cursors
oCur = oViewCursor.getText().createTextCursorByRange(oViewCursor)

' wenn nur Einfügemarkierung
if oCur.IsCollapsed then
	' Wort unter dem Cursor mit TC markieren

	if NOT oCur.isStartOfWord() then
		oCur.gotoStartofWord(FALSE)
	endif
		
	' Wortanfang bis Ende markieren
	oCur.gotoEndofWord(TRUE)

	' den Inhalt des TC
	sWort = oCur.getString
	
' Ausgewählter Text
else
	sWort = oCur.getString
end if

Für das Setzen von Referenzen empfehle ich die Lektüre des Quellcodes von http://ooomacros.org/user.php#113812


Hilft das für's Erste?
Cheers
Winfried
aktuell: LO 5.3.5.2 30m0(Build:2) SUSE rpm, unter Linux openSuSE Leap 42.3 x86_64/KDE5
DateTime2 Einfügen von Datum/Zeit/Zeitstempel (als OOo Extension)
DocMcFly
*
Beiträge: 10
Registriert: Mo, 07.11.2005 09:11

Beitrag von DocMcFly »

Vielen Dank ... Mittels Deiner Hilfe war das Skript in wenigen Minuten fertig und genau so wie ich es haben wollte:

Wort markieren -> Skript über Button anklicken -> Querverweis fertig! -> Clemens freut sich! :D

Hier ist für alle, die auch so einen kleinen Helfer brauchen können der Quelltext:

Code: Alles auswählen

sub AutoQuerverweis

dim document   as object
dim dispatcher as object

rem ----------------------------------------------------------------------
rem get access to the document

document   = ThisComponent.CurrentController.Frame
dispatcher = createUnoService("com.sun.star.frame.DispatchHelper")
oDok = StarDesktop.getCurrentComponent()

' sichtbaren cursor
oViewCursor = oDok.getCurrentController().getViewCursor()

' textcursor an stelle des sichtbaren cursors
oCur = oViewCursor.getText().createTextCursorByRange(oViewCursor)

' wenn nur Einfügemarkierung
if oCur.IsCollapsed then
   ' Wort unter dem Cursor mit TC markieren
   if NOT oCur.isStartOfWord() then
      oCur.gotoStartofWord(FALSE)
   endif
      
   ' Wortanfang bis Ende markieren
   oCur.gotoEndofWord(TRUE)

   ' den Inhalt des TC
   sWort = oCur.getString
   
' Ausgewählter Text
else
   sWort = oCur.getString
end if

dim args3(5) as new com.sun.star.beans.PropertyValue
args3(0).Name = "Type"
args3(0).Value = 12
args3(1).Name = "SubType"
args3(1).Value = 0
args3(2).Name = "Name"
args3(2).Value = "[" + sWort+ "]"
args3(3).Name = "Content"
args3(3).Value = ""
args3(4).Name = "Format"
args3(4).Value = 0
args3(5).Name = "Separator"
args3(5).Value = " "

dispatcher.executeDispatch(document, ".uno:InsertField", "", 0, args3())

end sub
Vielen Dank für die schnelle Hilfe...

Clemens

PS: Aber wo bekommen ich Infos her, welche Methoden und Variablen Objecte wie das Dokument haben?
Benutzeravatar
komma4
********
Beiträge: 5332
Registriert: Mi, 03.05.2006 23:29
Wohnort: Chon Buri Thailand Asia
Kontaktdaten:

Beitrag von komma4 »

DocMcFly hat geschrieben:PS: Aber wo bekommen ich Infos her, welche Methoden und Variablen Objecte wie das Dokument haben?
Clemens,

steht alles in der API :-)

Ich empfehle zum Stöbern (auch hier) xray
Cheers
Winfried
aktuell: LO 5.3.5.2 30m0(Build:2) SUSE rpm, unter Linux openSuSE Leap 42.3 x86_64/KDE5
DateTime2 Einfügen von Datum/Zeit/Zeitstempel (als OOo Extension)
Jonny
Beiträge: 6
Registriert: Fr, 14.07.2006 08:39

Beitrag von Jonny »

probier mal:

Code: Alles auswählen

msgbox objektname.dbg_properties
Mihilist
****
Beiträge: 120
Registriert: Di, 25.04.2006 15:27
Wohnort: Nürnberg
Kontaktdaten:

Beitrag von Mihilist »

.DBG_methods ist auch recht nützlich :)
Antworten