ich arbeite im Moment an einem Makro für ein OO XML-Formular. Dieses enthält mehrere Schaltflächen und Eingabefelder, die das Makro ab- und auch wieder einschalten können soll.
Allerdings sollen nur die Elemente geschaltet werden, die auch sichtbar sind (da es einige versteckte Felder für Verweise und dergleichen in dem Formular gibt).
Mein Ansatz ist, dass ich mir alle Elemente angucke und über das Control des Formulares in Erfahrung bringe, ob das Element Sichtbar ist oder nicht. Daraufhin nehm ich mir das Element vor und setze Enabled auf den gewünschten Wert.
Code: Alles auswählen
'@param bLock FALSE for locking, TRUE for unlock
Function lock_func(bLock As Boolean)
BasicLibraries.loadLibrary("OpenOfficeAPI")
' GlobalScope.BasicLibraries.Loadlibrary("XrayTool")
' msgbox "Xray geladen / Xray loaded"
Dim Doc As Object
Dim DrawPage As Object
Doc = ThisComponent
DrawPage = Doc.DrawPage
Form = DrawPage.Forms.GetByIndex(0)
Dim Temp
Dim TempName As String
Dim TempView
Dim oControl
oControl = ThisComponent.getCurrentController()
Dim I
For I = 0 To Form.Count-1
Temp = Form.getbyIndex(I)
TempName = Temp.getName
If TempName <> "IT-Investnr" Then 'Hier wird ein Feld zusätzlich ausgeschlossen
TempView = oControl.getControl(Temp)
If (TempView.isVisible) Then
Temp.Enabled = bLock
End If
End If
Next I
End Function
Im Grunde funktioniert diese Methode auch relativ gut, allerdings hängt sich das Makro auf und OO stürzt ab, wenn man das Formular gerade frisch geöffnet hat und sofort das Makro ausführt. Das ist natürlich nicht Sinn der Sache.

Vermutung :
Meine Befürchtung ist nun, dass das Abfragen nach der Sichtbarkeit bei einem gerade geladenem/teilweise geladenem Formular nicht effizient ist und ich mir eine andere Eigenschaft der Felder suchen muss, nach der ich sie schalte.
Ich hoffe jemand weiß Rat, oder weiß eine bessere Vorgehensweise als die meine. Meine OO-Version: 3.2.1