ich versuche mithilfe eines zur Laufzeit erzeugten Dialogs einen Text zu bearbeiten. Hier der Code:
Code: Alles auswählen
Option explicit
Global oDlg as Object
Global oWinListener as Object
Global oAktListener as Object
Dim oEvent as Object
REM ***** BASIC *****
Sub Kommafehler_markieren
dim oDlgM as Object ' das Model des Dialoges
dim oMod as Object ' nimmt jeweils das Model der Elemente auf
dim oWin as Object ' erzeugtes Fenster
REM Das Dialogmodel erzeugen:
oDlgM = CreateUnoService("com.sun.star.awt.UnoControlDialogModel")
REM Eigenschaften zuweisen
With oDlgM
.setPropertyValue("Width", 180)
.setPropertyValue("Height", 40)
.setPropertyValue("Title", "Laufzeitdialog")
End With
REM einen Button erzeugen
oMod = oDlgM.createInstance("com.sun.star.awt.UnoControlButtonModel")
REM die Eigenschaften setzen
With oMod
.setPropertyValue("Label", "Fehlerstelle suchen!")
.setPropertyValue("PositionX", 5)
.setPropertyValue("PositionY", 10)
.setPropertyValue("Height", 20)
.setPropertyValue("Width", 75)
.setPropertyValue("HelpText", "Den nächsten Kommafehler finden!")
.setPropertyValue("MultiLine", true)
End With
REM und dem Dialogmodel zuweisen
oDlgM.insertByName("But1", oMod)
REM Ende-Button erzeugen
oMod = oDlgM.createInstance("com.sun.star.awt.UnoControlButtonModel")
REM die Eigenschaften setzen
With oMod
.setPropertyValue("Label", "Programm abbrechen")
.setPropertyValue("PositionX", 100)
.setPropertyValue("PositionY", 10)
.setPropertyValue("Height", 20)
.setPropertyValue("Width", 75)
.setPropertyValue("HelpText", "Programm beenden, um manuell Änderungen am Text vorzunehmen!")
.setPropertyValue("MultiLine", true)
.setPropertyValue("PushButtonType", com.sun.star.awt.PushButtonType.OK)
End With
REM und dem Dialogmodel zuweisen
oDlgM.insertByName("But2", oMod)
REM den Dialog erzeugen
oDlg = CreateUnoService("com.sun.star.awt.UnoControlDialog")
oDlg.setModel(oDlgM)
REM ein Fenster erzeugen und den Dialog zuweisen
oWin = CreateUnoService("com.sun.star.awt.Toolkit")
oDlg.createPeer(oWin, null)
REM Listener erzeugen
oAktListener = createUnoListener("mark_", "com.sun.star.awt.XActionListener")
oDlg.getControl("But1").addActionListener(oAktListener)
oWinListener = createUnoListener("top_", "com.sun.star.awt.XTopWindowListener")
oDlg.addTopWindowListener(oWinListener)
Rem Dialog sichtbar machen
oDlg.setvisible(true)
End Sub
REM Aktionen des Action Listeners "mark_"
Sub mark_actionPerformed(oEvent)
Dim oDoc1 as Object, oViewC as Object
oDoc1 = ThisComponent
Fn_Nebensaetze_finden
oViewC = oDoc1.getCurrentController().getViewCursor()
oViewC.goRight(1, false)
Do while Not isNull(oViewC.string)
wait(5000)
oViewC = oDoc1.getCurrentController().getViewCursor()
If oViewC.string <> "" Then
oViewC.CharWeight = com.sun.star.awt.FontWeight.BOLD
oViewC.CharColor = &HFF00D9
Else
Exit Do
End If
Loop
oDlg.getControl("But1").removeActionListener(oAktListener)
oDlg.removeTopWindowListener(oWinListener)
oDlg.setvisible(false)
' oDlg.endExecute()
End Sub
Es wird aber auch nicht der else- Zweig ausgeführt, das Programm wird also nicht ordnungsgemäß beendet, insbesondere werden die Listener nicht geschlossen. Stattdessen bekomme ich ganz oft die Meldung "Eigenschaft oder Methode nicht gefunden: $(ARG1)", die ich dann mühselig wegklicken muss. Das Makro durchsucht offenbar alle Bibliotheken, nicht nur die des aktuellen Moduls, ohne zu einem Ergebnis zu kommen.
Wahrscheinlich mache ich mal wieder einen ganz trivialen Fehler. Vielleicht hat ja jemand einen Tipp für mich?
MfG Mr.Ed