im IDE habe ich bislang vergeblich nach einer Möglichkeit gesucht, Code-Zeilen automatisiert und bei Bedarf auch blockweise auszukommentieren oder Einrücken vorzunehmen. Fündig geworden bin ich dann im OpenOffice-Forum, wo jemand 2009 (!) auch schon einmal so etwas nachgefragt hatte. Ein hilfreiches Mitglied des Forums hat dann einen Basic-Code ausfindig gemacht http://www.oooforum.de/viewtopic.php?t=30665,
der das Auskommentieren übernimmt. Diesen Code habe ich an meine Bedürfnisse angepasst und dahingehend erweitert, dass er nun auch das Einrücken von (markierten) Code-Zeilen übernimmt. Ist zwar noch nicht das Gelbe vom Ei, funktioniert aber zu meiner Zufriedenheit. Ist halt nur eine Krücke - und die ist bekanntlich besser als nix. Den Code stelle ich mal für alle Fälle hier ein, vielleicht kann ihn jemand brauchen.
Kann es sein, dass ich im IDE etwas übersehen habe oder machen alle Star-Basic Anwender diese Aktionen seit 2009 von Hand? Wenn Ihr Tipps für mich habt, dann lasst es mich bitte wissen.
Vielen Dank vorab und liebe Grüße
vom Martin
Und hier ist der Code. Kleiner Tipp noch am Rande: Diesen Code unter "Meine Makros" abspeichern und jedem Funktionsaufruf (das sind die ersten vier Prozeduren) eine Tastenkombination zuweisen (Extras / Anpassen... und im Dialog die Registerkarte "Tastatur" wählen. Viel Glück!
Code: Alles auswählen
REM ***** BASIC *****
'----------------------------------------------------
' Makro Code-Zeilen |
'----------------------------------------------------
' Dieses Makro ermöglicht dem Anwender, |
' für markierte Code-Zeilen autmatisiert |
' - Kommentierungszeichen zu setzen/entfernen |
' - horizontale Einzüge zu verkleinern/vergrößern |
'----------------------------------------------------
' Autor unbekannt |
' Code gefunden im OpenOffice-Forum, |
' http://www.oooforum.de/viewtopic.php?t=30665 |
' Modifiziert am 07.05.2020 von Proma |
'----------------------------------------------------
' Für etwaige Schäden, die im Zusammenhang mit der |
' Verwendung dieses Code stehen, wird keinerlei |
' Haftung übernommen. |
'----------------------------------------------------
'Fundstelle:
'http://www.oooforum.de/viewtopic.php?t=30665
Sub pCodeLn_Com_ON
'Starten mit [Strg]+[K]
'Fügt ein Kommentierungszeichen (Hochkomma ')
'am Beginn der markierten Code-Zeile(n) ein
Call pCodeLines(True, False)
End Sub
Sub pCodeLn_Com_OFF
'Starten mit [Strg]+[N]
'Entfernt alle Kommentierungszeichen (Hochkomma ')
'am Beginn der markierten Code-Zeile(n)
Call pCodeLines(True, True)
End Sub
Sub pCodeLn_Mov_R
'Starten mit [Strg]+[R]
'Fügt 2 Leerzeichen am Beginn
'der markierten Code-Zeile(n) ein
Call pCodeLines(False, False)
End Sub
Sub pCodeLn_Mov_L
'Starten mit [Strg]+[L]
'Entfernt - sowiet vorhanden - 2 Leerzeichen
'am Beginn der markierten Code-Zeile(n)
Call pCodeLines(False, True)
End Sub
Sub pCodeLines(ByVal bolREM as Boolean, bolCUT as Boolean)
oBasicComp = getBasicWindow
oContWin = oBasicComp.CurrentController.Frame.ComponentWindow
oACScrollPane1 = oContWin.AccessibleContext.getAccessiblechild(0)
oACPanel1 = oACScrollPane1.AccessibleContext.getAccessiblechild(2)
oACPanel2 = oACPanel1.AccessibleContext.getAccessibleChild(4)
oACScrollPane2 = oACPanel2.AccessibleContext.getAccessibleChild(0)
oACTextFrame = oACScrollPane2.AccessibleContext.getAccessibleChild(1)
iMaxPara = oACTextFrame.AccessibleContext.AccessibleChildCount-1
aiParaSelected = getSelectedParas(oACTextFrame)
Call commentParas(oACTextFrame, aiParaSelected, bolREM, bolCUT)
End Sub
Sub commentParas(oACTextFrame as Any, aiPara as Any, bolREM as Boolean, bolCUT as Boolean)
'Werte von bolREM:
' TRUE Setzt/entfernt Kommentierungszeichen am Zeilenanfang eines markierten Code-Blocks (Code-Zeilen [ent]kommentieren)
' FALSE Setzt/entfernt 2 Leerzeichen am Zeilenanfang eines makrierten Code-Blocks (Code-Zeilen nach links/rechts verschieben)
'Werte von bolCUT:
' TRUE je nach Einstellung von bolREM Kommentierungszeichen setzen bzw. Code-Zeilen nach LINKS verschieben
' FALSE je nach Einstellung von bolREM Kommentar.-Zeichen entfernen bzw. Code-Zeilen nach RECHTS verschieben
If bolREM = True Then
If bolCUT=True Then
' Kommentierungszeichen entfernen
For k = 0 To UBound(aiPara)
oACP = oACTextFrame.AccessibleContext.getAccessibleChild(aiPara(k))
If Left(oACP.Text,1) = "'" Then bResult = oACP.cutText(0,1)
Next k
Else
' Kommentierungszeichen einfügen
For k = 0 To UBound(aiPara)
oACP = oACTextFrame.AccessibleContext.getAccessibleChild(aiPara(k))
bResult = oACP.insertText( "'", 0)
Next k
End IF
Else
If bolCUT = True Then
' Zwei Leerzeichen entfernen --> Code-Zeilen nach LINKS verschieben
For k = 0 To UBound(aiPara)
oACP = oACTextFrame.AccessibleContext.getAccessibleChild(aiPara(k))
For i = 1 to 2
If Left(oACP.Text,1) = " " Then bResult = oACP.cutText(0,1)
Next i
Next k
Else
' Zwei Leerzeichen einfügen --> Code-Zeilen nach RECHTS verschieben
For k = 0 To UBound(aiPara)
oACP = oACTextFrame.AccessibleContext.getAccessibleChild(aiPara(k))
bResult = oACP.insertText( " ", 0)
Next k
End If
End if
End Sub
Function getSelectedParas(oACTextFrame as Any) as Any
iMaxPara = oACTextFrame.AccessibleContext.AccessibleChildCount-1
Dim aiParaSelected(iMaxPara) as integer
iCount = 0
For k = 0 to iMaxPara
oACP = oACTextFrame.AccessibleContext.getAccessibleChild(k)
If (oACP.SelectedText = oACP.Text) and (oACP.Text <> "") then
aiParaSelected(iCount) = k
iCount = iCount + 1
End If
Next k
If iCount >= 1 Then
Redim Preserve aiParaSelected(iCount-1)
getSelectedParas = aiParaSelected
Else
getSelectedParas = Array()
End If
End Function
Function getBasicWindow() as Any
oEnum = Stardesktop.Components.createEnumeration
While oEnum.hasMoreElements
oComp = oEnum.nextElement
If HasUnoInterfaces(oComp, "com.sun.star.lang.XServiceInfo") Then 'to catch the Help Window
If oComp.supportsService("com.sun.star.script.BasicIDE") Then
oBasicComp = oComp
End If
End if
Wend
getBasicWindow = oBasicComp
End Function