Objektvariable (Controlelement eines Dialogmodels) manchmal nicht belegt
Verfasst: Do 29. Aug 2019, 10:57
Hallo zusammen,
ich habe mit ein paar Makros u.a. ein Fenster erstellt, welches mir ein Bild darstellen kann. Das Fenster kann ganz normal über das X geschlossen werden und mit Hilfe einer Checkbox sichtbar oder unsichtbar geschalten werden. Beim Klicken auf Zellen wird ein passender Name zusammengestellt und das Bild dazu aus dem Web geladen und angezeigt.
Die Variable für den Dialog (Zuweisung in einer Sub durch) ist global. Alle anderen Elemente des Dialoges werden nur lokal in der Sub angelegt, dazu gehören:
D.h., das Window, der Listener, das Model und das Control sind lokale Variablen in dieser Sub (nur der Dialog selbst ist global, da er in der Sub der Checkbox auf invisible gesetzt wird, wenn diese abgewählt wird [Haken entfernt]).
In der Sub, welche regelmäßig für die Anzeige gerufen wird, wird zuerst geprüft, ob oDialog null ist. Wenn ja, wird er komplett neu angelegt, mit allem was dazugehört (s. Codeausschnitte oben). Ist er nicht null, wird einfach nur eine neue Bild-URL wie folgt gesetzt:
Und hier habe ich das Problem, dass oCntrl immer mal wieder den Fehler wirft "Objektvariable nicht belegt.". Das kann ich immer mal wieder reproduzieren - aber nie zuverlässig!
Woran könnte das denn liegen? Muss ich alle Elemente, die mit dem Dialog zu tun haben global machen, um das Problem zu umgehen?
Dank euch schon mal für eure Hilfe!
Ciao
ich habe mit ein paar Makros u.a. ein Fenster erstellt, welches mir ein Bild darstellen kann. Das Fenster kann ganz normal über das X geschlossen werden und mit Hilfe einer Checkbox sichtbar oder unsichtbar geschalten werden. Beim Klicken auf Zellen wird ein passender Name zusammengestellt und das Bild dazu aus dem Web geladen und angezeigt.
Die Variable für den Dialog (Zuweisung in einer Sub durch
Code: Alles auswählen
odialog = CreateUnoService("com.sun.star.awt.UnoControlDialog")Code: Alles auswählen
odlgModel = CreateUnoService("com.sun.star.awt.UnoControlDialogModel")
...
oMod = odlgModel.createInstance("com.sun.star.awt.UnoControlImageControlModel")
...
oWindow = CreateUnoService("com.sun.star.awt.Toolkit")
...
oTopWindowsListener = CreateUnoListener( "Top_Win_", "com.sun.star.awt.XTopWindowListener" )
In der Sub, welche regelmäßig für die Anzeige gerufen wird, wird zuerst geprüft, ob oDialog null ist. Wenn ja, wird er komplett neu angelegt, mit allem was dazugehört (s. Codeausschnitte oben). Ist er nicht null, wird einfach nur eine neue Bild-URL wie folgt gesetzt:
Code: Alles auswählen
if not odialog.isVisible() Then
odialog.setVisible(True)
end if
oCntrl = odialog.getcontrol("IMG1")
oCntrl.model.ImageURL = cardGraphicNameWoran könnte das denn liegen? Muss ich alle Elemente, die mit dem Dialog zu tun haben global machen, um das Problem zu umgehen?
Dank euch schon mal für eure Hilfe!
Ciao