Seite 1 von 1

Dialog benden und Funktion ausführen

Verfasst: So 7. Feb 2016, 17:42
von Rango1278
Hallo liebe Calc-Gemeinde,

ich habe Peobleme mit dialogen in Calc....
Ich kann einen selbst erstellten Dialog wie unten starten:

DialogLibraries.LoadLibrary("Standard")
objNavigatorDialog = CreateUnoDialog(DialogLibraries.Standard.Navigator)
objNavigatorDialog.Execute


beeneden kann ich diesen aber nur mit dem [X] oben in der rechten Ecke und sonst sind keine aktionen möglich.

Ich habe auf dem selbst erstellten Dialog Schaltflächen die Unterprogramme "functions" aufrufen.
Mit "ObjectVariable.Endexecute wollte ich den Dialog wieder beenden... -> erfolglos.

Nun mein Problem:
Nach dem ich den Dialog aufgerufen habe möchte ich eine "function" ausführen. Wie mache ich das?
Beispiel:
Dialog aufrufen:
DialogLibraries.LoadLibrary("Standard")
objNavigatorDialog = CreateUnoDialog(DialogLibraries.Standard.Navigator)

Unterprogramm:
funcShowMassage -> (MsgBox("Hallo"))
objNavigatorDialog.Execute


Wie führe ich aus dem Dialog die Funktion aus?
Und wie beende ich durch einen selbst erstellten Button den Dialog?

Vielen Dank für eure Hilfe und besten Dank im Voraus!

Gruß Rango1278

Re: Dialog benden und Funktion ausführen

Verfasst: So 7. Feb 2016, 18:30
von musikai
Zum Aufruf des Dialogs muss execute verwendet werden.
Den Namen Deines Dialog-Objektes ausserhalb des subs mit dim deklarieren, damit Du aus anderen Subs darauf zugreifen kannst.
Zum Beenden mit Button gibt's 2 Möglichkeiten:
Button, dessen Button-Type "Cancel" ist, oder
Button, dessen Button-Type "Default" ist. Damit kannst Du auch Deine Funktionen ausführen.
Z.B mit endexecute in einem sub zum Beenden des Dialogs.

Code: Alles auswählen

dim objNavigatorDialog 
sub StartNavigatorDialog
	DialogLibraries.loadLibrary("Standard")
	objNavigatorDialog = CreateUnoDialog(DialogLibraries.Standard.Navigator)
	objNavigatorDialog.getModel().getByName("TextBox").text = "1"
	objNavigatorDialog.getModel().getByName("TextBox").label = "2"
	objNavigatorDialog.execute()
End Sub

rem-----Button mit Typ "Default": Event ausführen: Makro 
Sub changeNavigatorDialog
objNavigatorDialog .getModel().getByName("TextBox").text = "new text"
objNavigatorDialog .getModel().getByName("TextBox").label = "new Label"
end sub

rem-----Button mit Typ "Default": Event ausführen: Makro 
sub EndNavigatorDialog
objNavigatorDialog .endExecute()
end sub

Re: Dialog benden und Funktion ausführen

Verfasst: So 7. Feb 2016, 19:27
von F3K Total
T'schuldigung, es gibt mindestens noch die meistverwendete Möglichkeit mit einem OK-Button

Code: Alles auswählen

Sub S_Dialog
    DialogLibraries.LoadLibrary("Standard")
    oDialog1 = createunoDialog(DialogLibraries.Standard.Dialog1)
    oTextField1 = oDialog1.getControl("TextField1")
    bDialog = oDialog1.execute
    msgbox "der Dialog gibt """ & bDialog & """ zurück"
    if bDialog Then
        sText = oTextField1.Text
        msgbox("Du hast """ & sText & """ eingegeben und den OK-Button gedrückt")
    else
        sText = oTextField1.Text
        msgbox("Du hast """ & sText & """ eingegeben und den Dialog über das Kreuz oder den Abbrechen-Button abgebrochen")
        exit sub'Abbruch
    endif
    'Weiter
    Print "hier geht es nach dem OK-Button weiter ..."
End Sub
Vorteil: man kann durch den Rückgabewert des Dialogs ermitteln, ob der Dialog mit dem OK-Button als i.O. beendet wurde, oder durch das X bzw. Abbrechen abgebrochen werden soll, siehe Beispiel anbei.
Da braucht man dann kein zusätzliches Makro sondern macht nach der Abfrage des Rückabewertes eben weiter oder bricht ab.
Gruß R

Re: Dialog benden und Funktion ausführen

Verfasst: Mo 8. Feb 2016, 11:58
von musikai
Oh, danke! Das wusste ich noch nicht. Jetzt ergibt der button-type OK auch plötzlich Sinn. :P
Das ist für einfache dialoge natürlich ein viel eleganterer weg!

Re: Dialog benden und Funktion ausführen

Verfasst: Mi 10. Feb 2016, 22:46
von Rango1278
Hallo,

vielen Dank für eure Beiträge.... Ich werde in den nächsten Tagen daran arbeiten und Bescheid geben...

Gruß Rango1278