nicht modale Dialoge

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

Moderator: Moderatoren

Birdy27
**
Beiträge: 20
Registriert: Di, 20.02.2007 10:17

nicht modale Dialoge

Beitrag von Birdy27 »

Hallo,

wie kann ich denn dafür sorgen, dass ein Dialog zwar angezeigt wird, aber nicht verhindert, dass man im Dokument umher klickt (insbesondere eine andere Zeile im Datenquellenbrowser selektiert werden kann)?

Grüße
Christoph
Toxitom
********
Beiträge: 3769
Registriert: Di, 12.08.2003 18:07
Wohnort: Wiesbaden
Kontaktdaten:

Beitrag von Toxitom »

Hey Christoph,

in dem du den Dialog nicht mit execute() aufrufst, sondern mit visible(). Dadurch wird er zwar angezeigt, blockiert aber nicht alle anderen Fenster. Du kannst dann also den Fokus wechseln :-)

Viele Grüße
Thomas
Unterstützer LibreOffice, zertifizierter Trainer und Berater
Bücher: LibreOffice 6- Einstieg und Umstieg
Makros Grundlagen - LibreOffice / OpenOffice Basic
kannenklaus
*****
Beiträge: 319
Registriert: Mi, 14.12.2005 08:08
Wohnort: freising - oder dort, wo das bier herkommt

Beitrag von kannenklaus »

hallo thomas,

der aufruf des dailogs mit .visible() ist ohne wirkung. kann das sein?

grüße
klaus
Toxitom
********
Beiträge: 3769
Registriert: Di, 12.08.2003 18:07
Wohnort: Wiesbaden
Kontaktdaten:

Beitrag von Toxitom »

Hey Klaus,
der aufruf des dailogs mit .visible() ist ohne wirkung. kann das sein?
Hmm, so ja. Sorry, da war ich wieder zu schnell und habe zu viel vorausgesetzt. Der korrekte Befehl lautet:

Code: Alles auswählen

oDlg.setVisible(true)
Das öffnett dir den Dialog, solange noch ein Prozess läuft, ohne den Fokus zu übernehmen. Läuft aber kein Basic-Programm mehr, dann wird der Dialog auch automatisch wieder geschlossen.
Falls du es also nur ausprobiert hast mit

Code: Alles auswählen

Sub Main
	dialoglibraries.loadlibrary("Standard")
	oDlg = createUnoDialog(dialogLibraries.Standard.Dialog1)
	oDlg.setVisible(true)
End Sub
Dann wird er zwar auch geöffnet, aber auch gleich wieder geschlossen - das Makro ist ja fertig! Jetzt ist der Programmierer selbst verantwortlich für die einzelnen Prozesse. ERgänze das ganze um eine Zeile, dann siehst du die Wirksamkeint ;-)

Code: Alles auswählen

Sub Main
	dialoglibraries.loadlibrary("Standard")
	oDlg = createUnoDialog(dialogLibraries.Standard.Dialog1)
	oDlg.setVisible(true)
        wait(2000)
End Sub

Gruss
Thomas
Unterstützer LibreOffice, zertifizierter Trainer und Berater
Bücher: LibreOffice 6- Einstieg und Umstieg
Makros Grundlagen - LibreOffice / OpenOffice Basic
Birdy27
**
Beiträge: 20
Registriert: Di, 20.02.2007 10:17

Beitrag von Birdy27 »

Hallo Thomas,

danke für deine Beschreibung.
Ich möchte gerne dass das Fenster offen bleibt, bis eine gewisse Funktion aufgerufen wird.

Code: Alles auswählen

do until (beendet=true)
 wait(500)
loop
Problem ist nur, falls der Dialog nicht mehr sichtbar ist, soll die Routine aber auch beendet werden. Nur wie mache ich das. ".visible" ist readonly und ein isVisible() gibt es leider nicht.

(Und so richtig schön finde ich meine Lösung mit der while Schleife nicht, um den Dialog offen zu lassen.)

Grüße
Christoph
Antworten