Das Problem ist nicht neu, aber ich habe leider nirgendwo eine perfekte Lösung gefunden:
Es geht darum, ein Formular (dessen Position, Größe und auch Inhalt während dem Start angepasst wird) versteckt zu starten und erst nach Ende aller Prozeduren sichtbar zu stellen.
Hier die zwei (mir) bekannten Methoden:
1. Unmittelbar nach "loadComponentFromURL" das Formular mit "CurrentController.Frame.ContainerWindow.Visible" unsichtbar und erst zum Schluss wieder sichtbar stellen. Problem: Das Formular flackert trotzdem während dem Ladevorgang kurz auf, ehe es unsichtbar wird - is' nicht so toll!
2. Die Property "Hidden" an "loadComponentFromURL" übergeben. Angeblich (lt. Lösungsvorschlag eines Foren-Besuchers) soll man dann das Formular ebenfalls mit "CurrentController.Frame.ContainerWindow.Visible" auch nachträglich noch sichtbar stellen können.
Die zweite Methode ist zwar vielversprechend, aber leider ist das Objekt "CurrentController" beim "Hidden"-Start leer (nicht vorhanden) und kann demzufolge auch nicht eingestellt werden = das Formular bleibt also für alle Zeiten unsichtbar!
Möglicherweise liegt das daran, dass meine Formulare nur zur Laufzeit mit einer externen Datenbank verbunden werden. Dazu benutze ich statt "StarDesktop" als Basis den "DataSource". (Ich glaube aber nicht wirklich, dass es daran liegt, denn ohne "Hidden" steht mir der "CurrentController" auch hier ganz normal zur Verfügung).
Hat jemand eine Idee, wie ich ein "Hidden"-Formular nachträglich wieder sichtbar stellen kann?
Hier noch mal der Unterschied zwischen "StarDesktop" und "DataSource":
Code: Alles auswählen
' ---- EINFACHE METHODE - LOKALES FORMULAR MIT STARDESKTOP OEFFNEN: ----
Dim prop(1) as New com.sun.star.beans.PropertyValue
prop(0).Name = "OpenMode"
prop(0).Value = "open"
prop(1).Name = "ActiveConnection"
prop(1).Value = oConnection
oDoc = StarDesktop.loadComponentFromURL(URL,"_blank",0,props())
oDoc.CurrentController.Frame.ContainerWindow.Visible = False
' ---- REMOTE METHODE - FORMULAR ZUR LAUFZEIT VERBINDEN + OEFFNEN: ----
Dim prop(2) as New com.sun.star.beans.PropertyValue
Dim dbContext As Object, oDataSource As Object, oConnection As Object
' Datenbankkontext bereitstellen:
dbContext = createUnoService("com.sun.star.sdb.DatabaseContext")
' Datenquelle ueber den registrierten Datenbank-Namen ermitteln:
oDataSource = dbContext.GetByName(REGISTEREDNAME)
' Temporaere Datenbankverbindung mit Benutzername + Kennwort herstellen:
oConnection = oDataSource.GetConnection(USERNAME, PASSWORD)
' Wahlfreien Zugriff auf das RecordSet ermöglichen:
oStatement = oConnection.createStatement()
oStatement.ResultSetType = 1004
' Properties voreinstellen:
prop(0).Name = "OpenMode"
prop(0).Value = "open"
prop(1).Name = "ActiveConnection"
prop(1).Value = oConnection
prop(2).Name = "Hidden"
prop(2).Value = True
' Formular oeffnen (FORMNAME ist der Name des gewuenschten Formulars):
oForms = oDataSource.DatabaseDocument.FormDocuments
oDoc = oForms.loadComponentFromURL(FORMNAME,"_blank",0,prop())
' Hier passieren jetzt einige Dinge mit dem Formular, die aber
' auf dem Bildschirm zunaechst nicht sichtbar sein sollen:
' ...
' ...
' --- DAS HIER GEHT DANN ZUM SCHLUSS LEIDER NICHT: ---
oDoc.CurrentController.Frame.ContainerWindow.Visible = True
und schöne Grüße aus dem fernen Dresden
ejomi