Code: Alles auswählen
oDlgModel = createUnoService("com.sun.star.awt.UnoControlDialogModel")
_MyDialog.setModel(oDlgModel)
_MyDialog.Visible = True
Dieser Code-Teil ist sehr interessant, habe ich soo noch nicht gesehen, aber kommen wir zum Wesentlichen:
Ist denn ein nicht-modaler Dialog nötig?
Reicht nicht ein 'normaler' Dialogstart mittels:
Falls das nicht reicht ist die Lösung das [x] zum Funktionieren zu bewegen kompliziert und aufwendig.
Das [x] müßte über einen Window-Listener kontrolliuert weerden, was prinzipiell so ginge:
Code: Alles auswählen
Option explicit
Global _MyDialog as Object
Global Marker as boolean
Global winlist As Object
Sub Main
Dim oDlgModel as object
if not Marker Then
DialogLibraries.loadLibrary("Standard")
_MyDialog = CreateUNODialog(DialogLibraries.Standard.Dialog1)
oDlgModel = createUnoService("com.sun.star.awt.UnoControlDialogModel")
winlist = CreateUnoListener("jms_", "com.sun.star.awt.XTopWindowListener")
_MyDialog.addTopWindowListener(winlist)
_MyDialog.setModel(oDlgModel)
_MyDialog.Visible = True
Marker = True
endif
End Sub
sub jms_windowClosing()
_MyDialog.removeTopWindowListener(winlist)
_MyDialog.setVisible(false)
End Sub
sub jms_windowActivated()
'dummy
End Sub
sub jms_windowDeactivated()
'dummy
End Sub
Bei mir erzeugt das spontan jedoch einen Laufzeitfehler, um anschließend zu funktionieren, warum das so ist habe ich derzeitig keine Ahnung.
Das Ganze macht aber beispielsweise keine Schwierigkeiten wenn der Dialog zur Laufzeit erstellt wird:
Code: Alles auswählen
Option explicit
Global _MyDialog as Object
Global Marker as boolean
Global winlist As Object
Sub dialog_erstellen()
Dim oDlgModel as object
oDlgModel = createUnoService( "com.sun.star.awt.UnoControlDialogModel" )
With oDlgModel
.setPropertyValue("Width", 213)
.setPropertyValue("Height", 40)
End With
_MyDialog = createUnoService( "com.sun.star.awt.UnoControlDialog" )
winlist = CreateUnoListener("jms_", "com.sun.star.awt.XTopWindowListener")
_MyDialog.addTopWindowListener(winlist)
_MyDialog.setModel(oDlgModel)
_MyDialog.setVisible(true)
End Sub
sub jms_windowClosing()
_MyDialog.removeTopWindowListener(winlist)
_MyDialog.setVisible(false)
End Sub
sub jms_windowActivated()
'dummy
End Sub
sub jms_windowDeactivated()
'dummy
End Sub
Gruß
Stephan