Formuar verstecken + sichtbar stellen (loadComponentFromURL)

Antwort erstellen


BBCode ist eingeschaltet
[img] ist ausgeschaltet
[url] ist eingeschaltet
Smileys sind ausgeschaltet

Die letzten Beiträge des Themas
   

Ansicht erweitern Die letzten Beiträge des Themas: Formuar verstecken + sichtbar stellen (loadComponentFromURL)

Re: Formuar verstecken + sichtbar stellen (loadComponentFrom

von ejomi » Fr, 21.02.2014 09:53

EsKl hat geschrieben:Hiho in die Vergangenheit :-)

Und? Hast du dein Problem irgendwie lösen können?
Oha - ganz schön lange her: 16.04.12! ... und: leider nein.

Ich lebe jetzt einfach damit, dass das versteckte Formular beim Start kurz aufflackert.
Bei sehr schnellen Rechnern ist es kaum zu sehen (mich persönlich stört es aber nach wie vor).

Ich arbeite allerdings nach wie vor mit der veralteten OO-Version 3.2 (weil für mich
bisher am stabilsten). Mir ist also nicht bekannt, ob vielleicht zwischenzeitlich
in den neueren AOO-Versionen der BASIC-Compiler verändert/korrigiert wurde.

Leider hat sich bis heute (nach fast 2 Jahren) keiner für diesen Thread interessiert,
sodass ich annehme, dass es einfach keine Lösung gibt - schade.

Gruß: ejomi

Re: Formuar verstecken + sichtbar stellen (loadComponentFrom

von ejomi » Mo, 16.04.2012 11:14

Hallo?

Hmm - hat denn wirklich keiner eine Idee, wie man ein Hidden-Dokument mit alternativen Methoden sichtbar stellen kann?

Also, lt. Kochbuch von Andrew Pitonyak (Kapitel 5.45) scheint tatsächlich das Objekt "CurrentController" bei Formularaufruf mit "StarDesktop" vorhanden zu sein. (Weiter unten habe ich nochmal seinen Original-Code einkopiert) und man soll demnach später mit "Frame.ContainerWindow" das Formular sichbar stellen können.

Wie auch immer: Wenn ich das Formular aber mit "DataSource" öffne, ist das Objekt ""CurrentController" definitiv nicht vorhanden.

Gibt es vielleicht die Möglichkeit, die Properties nachträglich zu ändern (also z.B. "Hidden" = false)? Mein Versuch, mit Doc.addProperty("Hidden",False) funktionierte jedenfalls nicht - war wohl etwas zu einfach gedacht!

Kurz: Ich stehe immernoch vor einem unlösbaren Rätsel!


Hier noch einmal Pitonyak's Original-Code (das geleiche, wie schon in meinem 1. Thread beschrieben - nur andere Variablen-Namen und diesmal mit einem Writer-Dokument):

Code: Alles auswählen

Dim Doc As Object 
Dim aMediaDesc(0) as New com.sun.star.beans.PropertyValue 
Dim sURL$

aMediaDescriptor(0).Name  = "Hidden"

aMediaDescriptor(0).Value = TRUE
sURL = "private:factory/swriter"
 
Doc = StarDesktop.loadComponentFromURL(sURL, "_default", 0, aMediaDesc) 
Doc.getText().setString("I was hidden!")
wait 10000
Doc.getCurrentController().getFrame().getContainerWindow().setVisible(True)
... wie gesagt: Nichts neues. Hab's nur der Vollständigkeit nochmal hier einkopiert.

Beim Öffnen des Formulars mit der "DataSource"-Methode steht "setVisible" jedenfalls nicht zur Verfügung - Sch...!

Gruß an alle und einen schönen Tag noch.
ejomi

Formuar verstecken + sichtbar stellen (loadComponentFromURL)

von ejomi » Fr, 13.04.2012 20:17

Hallo erst mal - und einen schönen Tag!

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

Im Voraus herzlichen Dank für Eure Mithilfe
und schöne Grüße aus dem fernen Dresden
ejomi

Nach oben