Base: Initialisierung eines FormViews

Programmierung unter AOO/LO (StarBasic, Python, Java, ...)

Moderator: Moderatoren

MaddinR
***
Beiträge: 61
Registriert: So, 06.03.2011 11:15

Base: Initialisierung eines FormViews

Beitrag von MaddinR »

Hallo Leute

Für die Initialisierung meines Base-Formulars beim Öffnen dieses Formulares habe ich mir die Funktion "OnInitFormView()" eingerichtet. Die Funktion wird über den Eventhandler eines CheckButton-Controls auf diesem Formular bei SetFocus() gestartet. Und dieser CheckButton kriegt immer als allererstes den Focus. Als allererstes versteckt die Funktion diesen Checkbutton mit Hide und deaktiviert ihn. Dann wird das Formularfenster auf richtigte Grösse und an die richtige Position auf dem Bildschirm gebracht. Weiterhin werden die ganzen Toolbars ausgeblendet. Es bleiben eigentlich nur meine eigenen Formview-Controls in einem einfach-umrahmten Fenster sichtbar. OK, so weit, so gut...es funktioniert. Allerdings gefällt mir das Bildschirm-Gezappel in der Öffnen-Phase überhaupt nicht. Zuerst wird der Bildschrim default-mäßig erstellt, dann konfiguriert meine Funktion alles um... und dabei zappelts eben ziemlich wüst.

Ich habe alternativ versucht, "OnInitFormView()" über die Ereignisse des Formulares (Menü->Extras->Anpassen->Ereignisse) zu starten. Das zappelt aber nicht weniger. Aber was noch störender ist, "OnInitFormView()" wird auch dann aufgerufen, wenn ich das Formular im Entwurfsmodus zur Bearbeitung öffne. Da sind dann unerwünschterweise alle notwendigen Toolbar-Icons verschwunden.... das geht gar nicht. Also habe ich jetzt hier 2 Probleme: Im Anwender-Modus muss "OnInitFormView()" gestartet werden, im Entwickler-Modus darf's keinesfalls gestartet werden. Das Formular sollte erst dann sichtbar sein, wenn die Initialisierung abgeschlossen ist. Irgendeine Idee, wie man das lösen kann?

vg, Maddin



Moderation,4: verschoben in BASIC-Unterbereich, wo alle Makro-Fragen hin gehören; Betreff angepasst
Benutzeravatar
komma4
********
Beiträge: 5332
Registriert: Mi, 03.05.2006 23:29
Wohnort: Chon Buri Thailand Asia
Kontaktdaten:

Re: Base: Initialisierung eines FormViews

Beitrag von komma4 »

MaddinR hat geschrieben:Dann wird das Formularfenster auf richtigte Grösse und an die richtige Position auf dem Bildschirm gebracht
Dann sollte das Objekt "Fenster" aber auch eine Eigenschaft "IsHidden" haben...

Ob das Fenster im Bearbeitungsmodus geöffnet ist oder nicht - bekommst Du mMn nur raus, wenn Du den Fenstertitel auf die Zeichenkette "(schreibgeschützt)" untersuchst (dann im Dateneingabe-Modus).


Hoffe geholfen zu haben
Cheers
Winfried
aktuell: LO 5.3.5.2 30m0(Build:2) SUSE rpm, unter Linux openSuSE Leap 42.3 x86_64/KDE5
DateTime2 Einfügen von Datum/Zeit/Zeitstempel (als OOo Extension)
DPunch
*******
Beiträge: 1112
Registriert: Mo, 02.11.2009 16:16
Wohnort: Marburg

Re: Base: Initialisierung eines FormViews

Beitrag von DPunch »

Aloha
komma4 hat geschrieben: wenn Du den Fenstertitel auf die Zeichenkette "(schreibgeschützt)" untersuchst (dann im Dateneingabe-Modus).
Dokumente haben standardmässig eine Methode "isReadonly", das wäre wohl die einfachere Variante.
Benutzeravatar
komma4
********
Beiträge: 5332
Registriert: Mi, 03.05.2006 23:29
Wohnort: Chon Buri Thailand Asia
Kontaktdaten:

Re: Base: Initialisierung eines FormViews

Beitrag von komma4 »

DPunch hat geschrieben:standardmässig eine Methode "isReadonly"
ANDENKOPFSCHLAG!

Warum bin ich nicht darauf gekommen? :)
Cheers
Winfried
aktuell: LO 5.3.5.2 30m0(Build:2) SUSE rpm, unter Linux openSuSE Leap 42.3 x86_64/KDE5
DateTime2 Einfügen von Datum/Zeit/Zeitstempel (als OOo Extension)
MaddinR
***
Beiträge: 61
Registriert: So, 06.03.2011 11:15

Re: Base: Initialisierung eines FormViews

Beitrag von MaddinR »

Moin zusammen

Im Objekt "ThisComponent.CurrentController.Frame" habe ich den Wert "IsHidden" gefunden. Und mit der Funktion StarDesktop.getCurrentFrame().getContainerWindow().SetVisible(false) kann ich das Window auf Hide setzen. Allerdings krieg ich nicht so recht auf die Reihe, wie ich das jetzt am besten verwende. In meiner Funktion OnInitFormView() ist es zu spät, weil da das Fenster ja schon sichtbar ist. Wie kann ich am Besten das Fenster auf Hide setzen, bevor es angezeigt wird, um es dann in Ruhe zu konfigurieren und es dann fix-und-fertig wieder anzeigen? Also, das Objekt "Windows" muss eigentlich existieren, darf aber noch nicht angezeigt sein. Dann möchte ich die Eigenschaften setzen, und es erst dann anzeigen.

"IsReadOnly" habe ich als Eigenschaft des Doc's gefunden. Wenn ich das richtig verstanden habe, ist IsReadOnly immer False, wenn das FormView im Entwurfsmodus geöffnet wurde... stimmt das?

vg, Maddin
Benutzeravatar
komma4
********
Beiträge: 5332
Registriert: Mi, 03.05.2006 23:29
Wohnort: Chon Buri Thailand Asia
Kontaktdaten:

Re: Base: Initialisierung eines FormViews

Beitrag von komma4 »

MaddinR hat geschrieben:Wie kann ich am Besten das Fenster auf Hide setzen, bevor es angezeigt wird
Kannst Du wohl nicht.

Bei meinen Versuchen mit Code ein Formular zu öffnen... wird ein HIDDEN Parameter nicht akzeptiert

MaddinR hat geschrieben:"IsReadOnly"
Ein Formular zeigt Dir dies auch mit ThisComponent.CurrentController.isFormDesignMode() an
Cheers
Winfried
aktuell: LO 5.3.5.2 30m0(Build:2) SUSE rpm, unter Linux openSuSE Leap 42.3 x86_64/KDE5
DateTime2 Einfügen von Datum/Zeit/Zeitstempel (als OOo Extension)
DPunch
*******
Beiträge: 1112
Registriert: Mo, 02.11.2009 16:16
Wohnort: Marburg

Re: Base: Initialisierung eines FormViews

Beitrag von DPunch »

Aloha
komma4 hat geschrieben:Ein Formular zeigt Dir dies auch mit ThisComponent.CurrentController.isFormDesignMode() an
Nagut, wir sind quitt - daran hatte ich wiederum gar nicht gedacht. ;)
MaddinR hat geschrieben:Wenn ich das richtig verstanden habe, ist IsReadOnly immer False, wenn das FormView im Entwurfsmodus geöffnet wurde... stimmt das?
Das ist korrekt, spielt aber keine Rolle mehr mit isFormDesignMode.
MaddinR hat geschrieben:Wie kann ich am Besten das Fenster auf Hide setzen, bevor es angezeigt wird
Wenn Du das Formular per Doppelklick öffnest, sehe ich da momentan keine Möglichzeit für.
Wenn Du es aus einem anderen Formular heraus öffnest, wäre es *vielleicht* möglich, wobei es eigentlich schon daran scheitern dürfte, dass die Änderungen am View eines versteckt geöffneten Dokuments in der Regel nicht wirksam werden sollten.
Müsste ich aber bei Gelegenheit mal testen, bevor ich gefestigte Aussagen dazu treffen kann.
Antworten