Seite 1 von 1

Makro aufzeichnen gescheitert - versuche es jetzt mit Basic

Verfasst: Mo, 17.07.2006 17:57
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

Verfasst: Di, 18.07.2006 13:14
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?

Verfasst: Di, 18.07.2006 14:07
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?

Verfasst: Di, 18.07.2006 14:27
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

Verfasst: Mi, 19.07.2006 11:44
von Jonny
probier mal:

Code: Alles auswählen

msgbox objektname.dbg_properties

Verfasst: Mi, 19.07.2006 13:19
von Mihilist
.DBG_methods ist auch recht nützlich :)