🙏 Helfen Sie jetzt mit, unser LibreOffice Forum zu erhalten! 🙏
Mit Ihrer Spende sichern Sie den Fortbestand, den Ausbau und die laufenden Kosten dieses Forums. 🌱

🍀 Jeder Beitrag zählt – vielen Dank für Ihre Unterstützung!🍀

❤️ DANKE >> << DANKE ❤️

>> Dank Ihrer Unterstützung -> Keine Werbung für alle registrierten LibreOffice-Forum User! <<
🤗 Als Dankeschön werden Sie im Forum als LO-SUPPORTER gekennzeichnet. 🤗

Makro, aber elegant statt aufgezeichnet ...

Alles zur Programmierung im LibreOffice.
Antworten
Butch
Beiträge: 122
Registriert: Mi 20. Jan 2016, 18:59

Makro, aber elegant statt aufgezeichnet ...

Beitrag von Butch » Mo 19. Aug 2019, 13:00

Hallo!

Könnte mir jemand hier am folgenden Beispiel zeigen, wie man ein aufgezeichnetes Writer-Makro in eine elegante Form umschreibt?
Das Makro fügt nur drei Zeichen (|A|), allerdings in rot, fett, unterstrichen und gelb hervorgehoben, in den Text ein.

Vielen Dank im Voraus!

Z.

Code: Alles auswählen

rem ----------------------------------------------------------------------
rem define variables
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")

rem ----------------------------------------------------------------------
dim args1(0) as new com.sun.star.beans.PropertyValue
args1(0).Name = "Text"
args1(0).Value = "|A|"

dispatcher.executeDispatch(document, ".uno:InsertText", "", 0, args1())

rem ----------------------------------------------------------------------
dim args2(1) as new com.sun.star.beans.PropertyValue
args2(0).Name = "Count"
args2(0).Value = 3
args2(1).Name = "Select"
args2(1).Value = true

dispatcher.executeDispatch(document, ".uno:GoLeft", "", 0, args2())

rem ----------------------------------------------------------------------
dim args5(0) as new com.sun.star.beans.PropertyValue
args5(0).Name = "Bold"
args5(0).Value = true

dispatcher.executeDispatch(document, ".uno:Bold", "", 0, args5())

rem ----------------------------------------------------------------------
dim args6(2) as new com.sun.star.beans.PropertyValue
args6(0).Name = "Underline.LineStyle"
args6(0).Value = 1
args6(1).Name = "Underline.HasColor"
args6(1).Value = false
args6(2).Name = "Underline.Color"
args6(2).Value = -1

dispatcher.executeDispatch(document, ".uno:Underline", "", 0, args6())

rem ----------------------------------------------------------------------
dim args7(0) as new com.sun.star.beans.PropertyValue
args7(0).Name = "Color"
args7(0).Value = 13181214

dispatcher.executeDispatch(document, ".uno:Color", "", 0, args7())

rem ----------------------------------------------------------------------
dim args8(0) as new com.sun.star.beans.PropertyValue
args8(0).Name = "BackColor"
args8(0).Value = 16776960

dispatcher.executeDispatch(document, ".uno:CharBackgroundExt", "", 0, args8())

rem ----------------------------------------------------------------------
dispatcher.executeDispatch(document, ".uno:Escape", "", 0, Array())


end sub

Butch
Beiträge: 122
Registriert: Mi 20. Jan 2016, 18:59

Re: Makro, aber elegant statt aufgezeichnet ...

Beitrag von Butch » Mo 19. Aug 2019, 16:48

Ergänzung: So weit wäre ich schon: siehe unten. Wie könnte man für oString die Formatierungen angeben?

Code: Alles auswählen

Sub Test
  Dim oDoc As Object
  Dim oText As Object
  Dim oVCurs As Object
  Dim oTCurs As Object
  Dim oString As String
          
  oDoc = ThisComponent
  oText = oDoc.Text
  oVCurs = oDoc.CurrentController.getViewCursor()
  oTCurs = oText.createTextCursorByRange(oVCurs.getStart())
  ' Place the text to insert here
  oString = "|A|"
  oText.insertString(oTCurs, oString, FALSE)
End Sub

craig
* LO-Experte *
Beiträge: 1137
Registriert: Do 21. Apr 2016, 11:42

Re: Makro, aber elegant statt aufgezeichnet ...

Beitrag von craig » Mo 19. Aug 2019, 17:54

Hallo Butch,

nutze die Debug-Funktionen der Basic-IDE:
Stichwörter:
  • Ansicht --> Zeilennummerierung
  • Haltepunkte
  • Prozedurschritte
  • Nutze den "Beobachter" für die Untersuchung der Variablen, in Kombination mit den Haltepunkten
  • Achte auf die Programmier-Konventionen ,
    ist besonders hilfreich bei längeren Codes und es ist für Helfer eine Erleichterungen gepostete Codes zu "entschlüsseln"
  • Lade Dir hier das Codeinspektionstool siehe Abschnitt X-RAY Tool
    Es handelt sich hierbei um eine deutschsprachige Writerdatei mit Makros. Lese die Anleitung, wie diese Tool verwendet wird.
Achte auf die Kommentare im Code:

Code: Alles auswählen

REM  *****  BASIC  *****

Sub Test
  Dim oDoc As Object
  Dim oText As Object
  Dim oVCurs As Object
  Dim oTCurs As Object

' Präfix s, weil STRING und nicht o wie OBJECT
' siehe Konventionen:
' https://wiki.openoffice.org/wiki/DE/Makro_Basic_Tutorial  
  Dim sString As String	
          
  oDoc = ThisComponent
  oText = oDoc.Text
  
  oVCurs = oDoc.CurrentController.getViewCursor()
  oTCurs = oText.createTextCursorByRange(oVCurs.getStart())
  ' Place the text to insert here
  With oTCurs
  		.CharBackColor=RGB(255,255,0)
  		.CharColor=RGB(255,0,0)
' https://www.openoffice.org/api/docs/common/ref/com/sun/star/awt/FontWeight.html
' https://www.openoffice.org/api/docs/common/ref/com/sun/star/awt/FontWeight.html#BOLD
  		.CharWeight=150.000000
  End With
  sString = "|A|"
  oText.insertString(oTCurs, sString, FALSE)
End Sub
Gruß

Craig

Nie die Sicherungskopie vergessen!

════════════════════════════════════════════════
WIN 10 Pro 64-Bit • LO 7.4.5.1 (x64) • AOO 4.1.8

Butch
Beiträge: 122
Registriert: Mi 20. Jan 2016, 18:59

Re: Makro, aber elegant statt aufgezeichnet ...

Beitrag von Butch » Mo 19. Aug 2019, 19:55

Wunderbar, besten Dank, craig, das funktioniert schon mal.
Ein Nachteil: Beim Rückgängigmachen wird nur der Text entfernt, nicht aber die Formatierung ...

craig
* LO-Experte *
Beiträge: 1137
Registriert: Do 21. Apr 2016, 11:42

Re: Makro, aber elegant statt aufgezeichnet ...

Beitrag von craig » Mo 19. Aug 2019, 20:06

Hallo Butch,

Makro's werden schrittweise abgearbeitet, deshalb musst Du ggf. mehrere Schritte zurückgehen.
Gruß

Craig

Nie die Sicherungskopie vergessen!

════════════════════════════════════════════════
WIN 10 Pro 64-Bit • LO 7.4.5.1 (x64) • AOO 4.1.8


An alle, die das LibreOffice-Forum gern nutzen und unterstützen wollen:


Bitte helfen Sie uns mit 7 Euro pro Monat.
Durch Ihren Beitrag tragen Sie dazu bei, unsere laufenden Kosten für die kommenden Monate zu decken.
Unkompliziert per Kreditkarte oder PayPal.
Als ein kleines Dankeschön werden Sie im LO-Forum als SUPPORTER gekennzeichnet.



Antworten