Seite 1 von 1
Dialog mit Variablen möglich? (gelöst)
Verfasst: Do, 20.10.2011 13:38
von Noebian
Hi, gibt es einen Weg, in den Text eines Dialogs eine Variable einzubauen? So konnte zB bei einer Sicherheitabfrage der zu loschende Wert angezeigt werden. Mit dem Dialogeditor scheint es nicht zu gehen, oder?
Re: Dialog mit Variablen möglich?
Verfasst: Do, 20.10.2011 14:46
von balu
Hallo
in den Text eines Dialogs eine Variable einzubauen?
In was für einen Text?
So konnte zB bei einer Sicherheitabfrage der zu loschende Wert angezeigt werden.
Mal schaun ob ich dich jetzt richtig verstehe.
Du rufst einen Dialog auf, und möchtest dort in einem TextField, Label oder ... etwas anzeigen lassen. Dieses TextField, oder was auch immer, soll aber nicht mit einem festen sondern mit einem variablen Text beim Dialog aufruf bestückt werden. Stimmt das?
Wenn ja! So ist das machbar.
Und in welchem Modul von OOo soll das ganze geschehen, Calc, Writer ...? Bei Calc könnte ich
eventuell helfen, bei den anderen musst Du auf andere Helfer warten.
Welche OOo Version?
Welches Betriebssystem?
Genauere Infos, bitte schön.
Gruß
balu
Re: Dialog mit Variablen möglich?
Verfasst: Do, 20.10.2011 15:40
von Noebian
moin balu,
ja, du hast mich verstanden. Es ist manchmal gar nicht so leicht, die Dinge in Worte zu fassen, vor allem, wenn man die Materie noch nicht so ganz durchdrungen hat. Betriebssystem ist Vista, bzw Win 7 (zwei verschiedene Rechner). OO ist 3.3.0 bzw LibreOffice 3.4.3
Der Dialog soll in Base zum Einsatz kommen - aber macht das einen Unterschied? das Basic ist doch für alle Module gleich, oder nicht?
Re: Dialog mit Variablen möglich?
Verfasst: Do, 20.10.2011 20:18
von F3K Total
Hi Noebian,
so wie Du mit
den String aus dem Textfeld auslesen kannst, kannst Du mit
den Text des Textfeldes einlesen. Siehe unten.
Hier ist also ostartstring Deine Variable.
Mit "osel" wird der eingegebene Text selektiert, damit man, wenn man noch ändern möchte, gleich lostippen kann.
Code: Alles auswählen
dim oDlg as object
dim oTextField1 as object
Sub Start_Dialog
dim osel as new com.sun.star.awt.Selection
ostartstring="Starttext"
ostringlenght=len(ostartstring)
osel.min=0
osel.max=ostringlenght
DialogLibraries.loadLibrary( "Standard" )
oForm = DialogLibraries.Standard.getbyname("Select_Table")
oDlg = CreateUnoDialog( oForm )
oTextField1 = oDlg.GetControl("TextField1")
oTextfield1.setFocus
oTextField1.Text=ostartstring
oTextField1.Selection=osel
odlg.execute'ausführen
End Sub
Sub Stop_Dialog
oTextField1 = oDlg.GetControl("TextField1")
ostring=oTextField1.Text
odlg.endexecute
msgbox "Du hast "+ostring+" in Textfeld 1 eingegeben"
end sub
Gruß R
Re: Dialog mit Variablen möglich?
Verfasst: Do, 20.10.2011 21:24
von Noebian
genial R, so langsam komme ich dahin wo ich hinwill!
zwei Probleme habe ich noch:
1.) Ich habe zwei Buttons definiert und zwei Makros dafür hinterlegt.
wenn einer der Buttons geklickt wird, wie kann ich dann in der neuen Routine die Dialogbox schließen?
oDlg.endexecute erzeugt erwartungsgemäß eine Fehlermeldung, da das Objekt ja in der neuen Routine nicht bekannt ist. Wie kann ich es aufrufen?
2.) ich habe einen der Buttons als Standardschaltfläche definiert - dann würde ich erwarten, dass ein Druck auf "Return" das entsprechende Makro aktiviert. Tut es aber nicht. Es passiert gar nichts.
Re: Dialog mit Variablen möglich?
Verfasst: Do, 20.10.2011 23:18
von balu
Hallo
wenn einer der Buttons geklickt wird, wie kann ich dann in der neuen Routine die Dialogbox schließen?
Woher sollen wir denn das wissen? Da Du weder deinen Code hier veröffentlichst, noch eine Beispieldatei anhängst. Und eins von beiden solltest Du schon machen. Denn ich könnte ja jetzt ganz einfach sagen, ordne einem Button bei "Aktion ausführen" folgenden Code zu
Der aber bei dir dann gar nicht funktioniert, warum auch immer.
oDlg.endexecute erzeugt erwartungsgemäß eine Fehlermeldung
Warum erwartungsgemäß?
da das Objekt ja in der neuen Routine nicht bekannt ist
Schon wieder das Wort "Routine". Was soll das heißen, was willst Du uns damit sagen?
Ein Datei kann mehrere Bibliotheken haben. Und jede Bibliothek kann mehrere Module beinhalten. Wenn Du einen Basic-Code schreibst, dann geschieht das in einem Modul, was ja unten auf den Reitern nachzulesen ist. Und jedes Modul kann wiederum aus mehreren Subs bestehen.
Also was meinst Du mit Routine?
ich habe einen der Buttons als Standardschaltfläche definiert - dann würde ich erwarten, dass ein Druck auf "Return" das entsprechende Makro aktiviert.
Druck auf "Return"?
Was hast Du denn nun genau eingestellt bei:
Art der Schaltfläche:
Standardschaltfläche:
Und was hast Du im Reiter "Ereignisse" eingestellt?
Gruß
balu
Re: Dialog mit Variablen möglich?
Verfasst: Do, 20.10.2011 23:49
von Noebian
Hi, mit Routine meine ich eine Sub.
Die Struktur sieht so aus: Sub 1 ruft den Dialog auf. Schaltfläche 1 des Dialogs ruft Sub 2 auf, Schaltfläche 2 ruft Sub 3 auf.
"odlg.endexecute" in einer anderen Sub als derjenigen, die den Dialog aufgerufen hat, erzeugt den Fehler "Objektvariable nicht belegt". Was mir auch einleuchtet, da meines Wissens Objekte nur zur Laufzeit einer Sub existieren.
Daher meine Frage: mit welchem Befehl kann ich das Dialog-Objekt in einer anderen Sub wieder zu fassen bekommen?
"CreateUnoDialog( oForm )" wird es doch wohl nicht sein, oder? Der Dialog ist ja schon created...
Art der Schaltfläche:
Super, deine Frage brachte mich auf die richtige Spur - Eigenschaft von "Standard" auf "OK" geändert, jetzt geht es. Teilproblem gelöst. Danke!
Re: Dialog mit Variablen möglich?
Verfasst: Fr, 21.10.2011 06:03
von F3K Total
Hallo Noebian,
das Problem lautet:
Gültigkeitsbereich und Lebensdauer von Variablen, siehe auch hier:
http://download.oracle.com/docs/cd/E195 ... index.html
mit
,
über dem Sub1, wird die Variable odlg als öffentliche Variable deklariert, und steht allen Modulenin der Bibliothek zur Verfügung. Wenn Du also Sub2 und Sub3 in der gleichen Bibliothek hast, geht es.
Eine weitere Möglichkeit, wenn Sub2 in einer anderen Bibliothek, z.B unter "meine Makros" statt im Dokument, steht ist es, den Dialog in der aktuellen Bibliothek zu beenden und Variablen beim Aufruf von z.B Sub2 zu übergeben ala:
Code: Alles auswählen
Sub Stop_Dialog
oTextField1 = oDlg.GetControl("TextField1")
ostring=oTextField1.Text
odlg.endexecute
zweites_Makro(ostring)
end sub
und sub2 in anderer Bibliothek:
Code: Alles auswählen
zweites_Makro(ostring)
msgbox "Du hast "+ostring+" in Textfeld 1 eingegeben"
end sub
Du kannst auch den kompletten Dialog übergeben, falls das Beenden in einem anderen Modul stattfinden soll.
Code: Alles auswählen
zweites_Makro(odlg,ostring)
odlg.endexecute
msgbox "Du hast "+ostring+" in Textfeld 1 eingegeben"
end sub
Gruß R
Re: Dialog mit Variablen möglich?
Verfasst: Fr, 21.10.2011 09:20
von Noebian
Super, danke, damit funzt es!