Dialogfenster schließen

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

Moderator: Moderatoren

turtle47
*******
Beiträge: 1849
Registriert: Mi, 04.01.2006 20:10
Wohnort: Rheinbach

Dialogfenster schließen

Beitrag von turtle47 »

Hallo Programmierer,

ich öffne mit folgendem Makro ein Dialogfenster:

Code: Alles auswählen

Sub Feiertage
Dim Dlg As Object
Dlg = CreateUnoDialog(DialogLibraries.Feiertage.Feiertage)
Dlg.Execute() 
Dlg.dispose()
Dlg.EndExecute() 
end Sub
Funktioniert auch wunderbar.
Jetzt möchte ich das Fenster über eine Schaltfläche wieder schließen.

Dazu habe ich fogende Information im Internet gefunden:
Schließen mit einem expliziten Programmaufruf

Ein geöffnetes Dialogfenster kann auch mit der endExecute-Methode geschlossen werden:

Dlg.endExecute()
Hier mein Code zum schließen:

Code: Alles auswählen

Sub Abbrechen
Dlg.endExecute()
end sub
Jetzt bekomme ich die Fehlermeldung: Basic-Laufzeitfehler
Hier im Forum habe ich schon gesucht, aber nichts gefunden.
Kann mir bitte einer helfen?

Jürgen
Software hat keinen Verstand - benutze deinen eigenen...!

Win 7 SP1/ LibreOffice 3.4.2 OOO340m1 (Build:203) / Firefox 15.0.1 / Notebook ASUS K70IO 64 Bit-Betriebssytem
Toxitom
********
Beiträge: 3769
Registriert: Di, 12.08.2003 18:07
Wohnort: Wiesbaden
Kontaktdaten:

Beitrag von Toxitom »

Hey Jürgen,

dadurch, dass es funktioniert, ist es nicht ideal!

Code: Alles auswählen

Dlg = CreateUnoDialog(DialogLibraries.Feiertage.Feiertage)
Dlg.Execute()
Dlg.dispose()
Dlg.EndExecute() 
Mit "dispose() entfernst du das Objekt aus de Speicher, danach schliesst du die Dialogmaske?? Also bitte. IN diesem Code sind zwei zeilen überflüssi!g:
Der Dialog wird mit dlg.excecute() aufgerufen. Das Makro bleibt jetzt solange in dieser Zeile stehen, bis der Dialog wieder geschlossen wird. Erst dann werden die weitern Zeilen abgearbeitet. Warum willst du einen Dialog, der schon geschlossen ist, nochmals zweimal schliessen? Jeder der folgenden Zeilen tut nämlich genau das, wobei die erste den Dialog auch noch aus dem Speicher befördert....
Also, beide Zeilen striechen.
Jetzt möchte ich das Fenster über eine Schaltfläche wieder schließen.
Wenn du es "nur" schliessen willst, dann definiere den Buttton über die Eigenschaften nicht als Standard-Button, sondern entweder als "Ja" button oder als "Abbrechen" Button. Dann schliesst sich jeweils dein Dialog - fertig. Den Rest kannst du dir dann ersparen.

Code: Alles auswählen

Sub Abbrechen
Dlg.endExecute()
end sub
Das ist vom Prinzip her richtig. Aber: erstens überflüssig, wenn du sonst nichts mehr machst - siehe oben - und zweitens : kann nur funktionieren, wenn dein Dialogobjekt auch global definiert wurde. Und das wurde es in deinem Code nicht - wie also soll OpenOffice.org mit "Dlg" etwas anfangen?
Richtig wäre:

Code: Alles auswählen

dim oDlg as object

sub Feiertage
  oDlg = CreateUnoDialog(DialogLibraries.Feiertage.Feiertage)
  oDlg.Execute() 
end sub

Sub Abbrechen
  oDlg.endExecute()
end sub
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 jürgen

::ZUM SUB FEIERTAGE::
Dlg.dispose()
kann zu unerwünschten ergebnissen führen

Dlg.EndExecute()
wenn du willst, dass der dialog ausgeführt und nicht gleich beendet wird, solltest du beim sub feiertage die code-ziele endexecute kpl. rausnehmen. am besten du legst jeweils eine proezdur für das starten/beenden des dialogs anlegen.

::ZU DEN SCHALTFLÄCHEN::
in deinem dialog feiertag eine schaltfläche anlegen z.b. "Ende" und dieser beim auslösen das makro sub abbrechen zuwesein

alternativ kannst du eine schaltfläche als steuerelement erzeugen und mit der re-maus über eigenschaft den typ OK oder ABBRECHEN wählen.

grüße

klaus
turtle47
*******
Beiträge: 1849
Registriert: Mi, 04.01.2006 20:10
Wohnort: Rheinbach

Beitrag von turtle47 »

Hallo Kannenklaus und Toxitom,

ihr seid ja schneller als die Polizei erlaubt mit Euren Anworten.

Entschuldigt bitte, aber was Basic anbetrifft bin ich noch total grün hinter den Ohren.

Funktioniert jetzt richtig supi.

Danke

Jürgen
Software hat keinen Verstand - benutze deinen eigenen...!

Win 7 SP1/ LibreOffice 3.4.2 OOO340m1 (Build:203) / Firefox 15.0.1 / Notebook ASUS K70IO 64 Bit-Betriebssytem
Antworten