[Gelöst] Auf geöffneten Dialog prüfen

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

Moderator: Moderatoren

keksi1970
*****
Beiträge: 464
Registriert: So, 27.01.2008 11:47
Wohnort: DU

[Gelöst] Auf geöffneten Dialog prüfen

Beitrag von keksi1970 »

Hallo zusammen,

ich brauche Hilfe, um auf einen bereits geöffneten Dialog zu prüfen. ( Hinweise, Vorschläge, Lösungen sind willkommen ). Ich weiß z.Zt. nicht, wo ich danach suchen soll.

Folgendes Szenario :

eine Datei öffnet einen Dialog zur Kommunikation mit einer MySQL-DB.
Jetzt kommt dem Anwender aber was dazwischen und dieser öffnet eine andere Datei, die wiederum einen Dialog öffnet, ebenso Verbindung zur MySQL-DB.
Folglich stürzt Basic mit einem Laufzeitfehler ab.

Jetzt würde ich gerne prüfen, ob in irgendeiner OOO-Instanz schon ein Dialog geöffnet ist, so dass kein weiterer geöffnet werden kann.

mfg
Andreas
Zuletzt geändert von keksi1970 am Di, 26.04.2011 08:33, insgesamt 1-mal geändert.
Benutzeravatar
komma4
********
Beiträge: 5332
Registriert: Mi, 03.05.2006 23:29
Wohnort: Chon Buri Thailand Asia
Kontaktdaten:

Re: Auf geöffneten Dialog prüfen

Beitrag von komma4 »

keksi1970 hat geschrieben:Folglich stürzt Basic mit einem Laufzeitfehler ab.
Warum?
Fehlermeldung?


Ansonsten: setze eine globale Variable, wenn ein Dialog geöffnet ist und frage diese vor weiteren Versuchen ab.
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)
keksi1970
*****
Beiträge: 464
Registriert: So, 27.01.2008 11:47
Wohnort: DU

Re: Auf geöffneten Dialog prüfen

Beitrag von keksi1970 »

Die einzige Meldung : BASIC-Laufzeitfehler, Objektvariable nicht belegt.
Die Variablen sind jedoch einwandfrei deklariert und haben auch unterschiedliche Namen. Die Reihenfolge des Startens spielt keine Rolle. Sobald das hinterlegte Makro auf den Dialog oder ein Objekt im Dialog zugreift, bricht Basic mit dieser Fehlermeldung ab.

Daher suche ich nun eine Möglichkeit, auf einen bereits geöffneten Dialog zu prüfen.
Karolus
********
Beiträge: 7532
Registriert: Mo, 02.01.2006 19:48

Re: Auf geöffneten Dialog prüfen

Beitrag von Karolus »

Hallo
Die Fehlermeldung deutet eher darauf hin das eine Variable noch nicht deklariert/intitialisiert wurde, evtl. der Dialog selbst ?

Hier mal ein Minimalbeispiel wie du jederzeit "myDlg.execute()" ausführen kannst, und nur im Fehlerfall vorher deklarierst.

Code: Alles auswählen

Global  MyDlg as Object   'oder public ... ?

Sub create
MyDlg= CreateUnoDialog(Dialoglibraries.Standard.Dialog1)
End Sub

sub ausfuehren
onError: create
myDlg.execute()
end sub
Gruß Karo
LO7.4.7.2 debian 12(bookworm) auf Raspberry5 8GB (ARM64)
LO25.2.3.2 flatpak debian 12(bookworm) auf Raspberry5 8GB (ARM64)
Benutzeravatar
komma4
********
Beiträge: 5332
Registriert: Mi, 03.05.2006 23:29
Wohnort: Chon Buri Thailand Asia
Kontaktdaten:

Re: Auf geöffneten Dialog prüfen

Beitrag von komma4 »

keksi1970 hat geschrieben:Die einzige Meldung : BASIC-Laufzeitfehler, Objektvariable nicht belegt.
Das bedeutet, dass bei der Belegung des Objektes ein Fehler aufgetreten ist und Du deswegen nicht auf das Objekt zugreifen kannst.

Zeige uns dochmal den Code 8)
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)
keksi1970
*****
Beiträge: 464
Registriert: So, 27.01.2008 11:47
Wohnort: DU

Re: Auf geöffneten Dialog prüfen

Beitrag von keksi1970 »

komma4 hat geschrieben:
keksi1970 hat geschrieben:Die einzige Meldung : BASIC-Laufzeitfehler, Objektvariable nicht belegt.
Das bedeutet, dass bei der Belegung des Objektes ein Fehler aufgetreten ist und Du deswegen nicht auf das Objekt zugreifen kannst.

Zeige uns dochmal den Code 8)
1. Datei

Code: Alles auswählen

Dialoglibraries.Loadlibrary("Standard")
EingabeDlg = CreateUnoDialog(Dialoglibraries.Standard.Dialog1)
2. Datei

Code: Alles auswählen

Dialoglibraries.Loadlibrary("Standard")
oPerfDlg = CreateUnoDialog(Dialoglibraries.Standard.PerfDialog)
Und hier der 1. Zugriff der 2. Datei bei geöffnetem Dialog der 1.

Code: Alles auswählen

oPerfDlg.getControl("User").text = UserName
3. Datei

Code: Alles auswählen

Dialoglibraries.Loadlibrary("Standard")
SokoDlg = CreateUnoDialog(Dialoglibraries.Standard.SoKoDlg)
Bei Zugriff auf ein Dialog-Objekt :

Code: Alles auswählen

SpediCtr = SoKoDlg.getControl("SpediteurList")
Die Fehlermeldung kommt wie gesagt nur, wenn bereits einer dieser 3 Dialoge gestartet ist ( Es gibt mehr als diese 3 Dateien ). wenn ich den gestarteten Dialog schliesse, ohne die Datei zu beenden, gibts keinen Fehler.
DPunch
*******
Beiträge: 1112
Registriert: Mo, 02.11.2009 16:16
Wohnort: Marburg

Re: Auf geöffneten Dialog prüfen

Beitrag von DPunch »

Aloha

Das ist ein schon seit über einem Jahr bekanntes Problem, siehe auch Bug 109032 - CreateUnoDialog returns Null when Dialog/s running from other odb file at the same time.

Das einfachste ist die Abfrage mit isNull nach Erzeugen des Dialogs.

Code: Alles auswählen

oPerfDlg = CreateUnoDialog(Dialoglibraries.Standard.PerfDialog)
If isNull(oPerfDlg) Then
  MsgBox "Es läuft bereits ein anderer Dialog oder Dialog nicht gefunden"
  Exit Sub
End If
oPerfDlg.getControl("User").text = UserName
Die zweite, sehr viel umständlichere Variante wäre das Verwenden einer, bzw mehrerer globaler Variablen.
keksi1970
*****
Beiträge: 464
Registriert: So, 27.01.2008 11:47
Wohnort: DU

Re: [Gelöst] Auf geöffneten Dialog prüfen

Beitrag von keksi1970 »

Hallo DPunch,

ich war doch froh keine globalen Variablen nutzen zu müssen ;)

Deine Lösung funktioniert einwandfrei.

Vielen Dank

Andreas
Antworten