calc - Dialog - Textfelder auslesen @balu???

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

Moderator: Moderatoren

DITA
***
Beiträge: 91
Registriert: Fr, 16.11.2012 16:23

calc - Dialog - Textfelder auslesen @balu???

Beitrag von DITA »

Hallo zusammen,

habe mich jetzt mal an Dialog getraut, habe nur das Problem, dass ich meine Eingabe nicht in Basic weiterverarbeiten kann.

Hab mit Hilfe des Internets und der Hilfe einiges probiert, aber irgendwie klappt das nicht

Schaut doch bitte mal was ich falsch gemacht habe - Danke

Gruss Dirk
Netztest.ods
(13.71 KiB) 177-mal heruntergeladen
Jörg
*****
Beiträge: 392
Registriert: Mo, 21.10.2013 12:05

Re: calc - Dialog - Textfelder auslesen @balu???

Beitrag von Jörg »

Hallo,
bei der OK-Schaltfläche kann ich vielleicht helfen.
Dialoge verwalten->
Schaltfläche->Eigenschaften->Art der Schaltfläche-> OK wählen, dann Standardschaltfläche-> Ja wählen
Gruß Jörg
Gruß Jörg

Win 10 Pro AOO 4.1.15
Benutzeravatar
balu
********
Beiträge: 3810
Registriert: Fr, 24.08.2007 00:28
Wohnort: Warstein

Re: calc - Dialog - Textfelder auslesen @balu???

Beitrag von balu »

Hallo Dirk,

Du musst aber im Betreff nich unbedingt mich direkt anschreiben, denn andere wollen doch auch versuchen zu helfen :lol:
Schaut doch bitte mal was ich falsch gemacht habe
Eigentlich nur zwei kleinigkeiten.

1.
Du hast die Variable für den Dialog nicht deklariert.

2.
Du hast in der zweiten Sub die Variable für den Dialog neu definiert.

Das war die Kurzform.

Etwas ausführlicher.

Zu 1.
Generell müssen die Variablen rechtzeitig deklariert werden, bevor sie definiert werden. Und die Variable *MyDlg* hast Du wohl richtig definiert, aber eben nicht deklariert, denn das DIM fehlt welches die deklaration ausführt.

Wenn Du einen Dialog erstellst, ist es sehr von Vorteil wenn die Variablen deklaration öffentlich gemacht wird. Das heißt das sie im dementsprechendem Modul als aller erstes gemacht wird, und zwar noch vor der ersten Sub.
Kurzes Beispiel:

Code: Alles auswählen

Dim MyDlg as Object

Sub Testsub
[...]
End sub
Wie gesagt, das nennt man eine öffentliche deklaration. Dadurch steht dann die Variable im gesamten Modul zur Verfügung.

Wird aber die Variable lokal deklariert,

Code: Alles auswählen

Sub Testsub
Dim MyDlg as Object

[...]
End sub
dann gilt diese Variable nur in dieser Sub. Und wenn eine andere Sub im gleichen Modul per Dialog abgearbeitet werden soll, dann ist die Variable dem Makro nicht bekannt und es kommt zu deinem Problem, beispielsweise.


Zu 2.
In der ersten Sub Dlg_Start hattest Du schon MyDlg definiert, und von daher ist das in der zweiten Sub vollkommen überflüssig, wenn Du dich an die Erklärung zu 1. hälst, was Du dringend beachten musst.

Hier der überarbeitete Code.

Code: Alles auswählen


dim MyDlg as object

Sub Dlg_Start

Dialoglibraries.Loadlibrary("Standard")
MyDlg= CreateUnoDialog(Dialoglibraries.Standard.PWAbfrage)
'----------------------------------- Ab hier gibt es jetzt auch Bunte Buttons im Dialog :-) --
	Dim bNativeLook as Boolean
	bNativeLook = False
	MyDlg.getPeer().setProperty( "NativeWidgetLook", bNativeLook )
'-----------------------------------
MyDlg.execute

End Sub

'#######################################

Sub Dlg_PWAbfrage

oEingabe = MyDlg.getControl("txt_PW")

msgbox oEingabe.text

If oEingabe.text = "lolli" then
msgbox "jep"
else
msgbox "so nicht"
End If

End Sub
Nimm deine Datei, gehe in dein Modul *DialogMakros* und lösche ALLES was dort drin steht. Kopiere diesen überarbeiteten Code und füge ihn in das Modul ein. Mehr brauchts nicht. Und schon funktioniert deine Makroabfrage.

Viel Erfolg bei deinen Tests. ;-)



Gruß
balu
Sei öfter mal ein Faultier, sag öfter mal "Ach was!" Dann kriegst du keinen Herzinfarkt, und hast ne menge Spass.

wehr rächtschraipfähler findet khan si behalden :D
DITA
***
Beiträge: 91
Registriert: Fr, 16.11.2012 16:23

Re: calc - Dialog - Textfelder auslesen @balu???

Beitrag von DITA »

Hallo Jörg,

vielen Dank, dass war genau das was ich wollte - läuft so perfekt

Vielen Dank für Deine Hilfe

Gruss Dirk
DITA
***
Beiträge: 91
Registriert: Fr, 16.11.2012 16:23

Re: calc - Dialog - Textfelder auslesen @balu???

Beitrag von DITA »

Hallo balu,

sorry, wollte Dich nicht .........., nur sicherstellen, dass ich von Dir ein Statement erhalte, denn Deine Erklärungen sind immer super nachvollziehbar und lehrreich.

Ja, glaube mit dieser Dimensionierung....... - da muss ich glaub ich mal "nachsitzen"

aber,

habe Deine überarbeitete Makros nach Löschung meiner "eingearbeitet", mit dem Ergebnis

sobald ich nun auf den Wartungsbutton klicke, kommt die Fehlermeldung

Basic - Laufzeitfehler
Objektvariable nicht belegt

und springt in die erste Zeile des Makros Dlg_PWAbfrage

oEingabe = MyDlg.getControl("txt_PW")


Vermutung meinerseits war/ist
Dimensionierung des Textfeldes...... auch als Object????? und "ausserhalb" der Makros im Modul

Wäre super, wenn Du oder natürlich auch andere hier im Forum nochmal schauen, wo der Fehler steckt

Danke

Gruss Dirk
DITA
***
Beiträge: 91
Registriert: Fr, 16.11.2012 16:23

Re: calc - Dialog - Textfelder auslesen @balu???

Beitrag von DITA »

Hallo zusammen,

habe einen Fehler gerade selbst beseitigt, hatte der Schaltfläche das falsche Makro zugeordnet.

Jetzt passiert Nichts
habe einen debug eingebaut, aber als wenn das Makro garnicht angesprochen wird

Danke nochmals

Gruss Dirk
Benutzeravatar
balu
********
Beiträge: 3810
Registriert: Fr, 24.08.2007 00:28
Wohnort: Warstein

Re: calc - Dialog - Textfelder auslesen @balu???

Beitrag von balu »

Hallo Dirk,
sorry, wollte Dich nicht ..........,
Mensch Junge, hatte doch nur nen Spaß gemacht ;-)

Vermutung meinerseits war/ist
Dimensionierung des Textfeldes...... auch als Object????? und "ausserhalb" der Makros im Modul
Vorsicht! Du musst aufpassen was Du da sagst.
Eine Variablen deklaration ist z.B. das: Dim VariablenNamen as Object
Eine Variablen definition ist z.B. das: oEingabe = MyDlg.getControl("txt_PW")
Eine Dimensionierung ist etwas vollommen anderes, denn dabei geht es um Arrays, und die sind in deiner Datei nicht vorhanden.

Du siehst, manchmal muss man seine Worte sehr sorgfältig überlegen, wenn es um bestimmte Begriffe geht. Aber das wird schon, das wirst Du auch noch verstehen.

Jedoch ist dein Gedankengang wohl nicht ganz so verkehrt, aber selbst für dich noch nicht ganz so einfach zu verstehen.

Da du es früher oder später mit mehr als nur ein, oder zwei Variablen bei Dialogen zu tun hast, ist folgendes Verfahren (was ich ja schon in meinem ersten Beitrag erklärte) einzuhalten, oder empfehlenswert.
Die deklaration der Variablen außerhalb der ersten Sub ganz am Anfang.

Code: Alles auswählen

Dim MyDlg as object
Dim oEingabe as Object

Sub Dlg_Start

Du siehst, ich habe jetzt 2 Variablen öffentlich deklariert. Und ja, ein TextField (Textfeld) in einem Dialog ist auch ein Object, genau so wie alle anderen Grafischen Elemente die man in einem Dialog zeichnen kann.

Da jetzt auch das Textfeld öffentlich deklariert wurde, kann nun auch das Makro dementsprechend geändert werden. Und dabei gehe ich nach folgendem Schema vor.

Alle Variablen die ein Grafisches Element im Dialog darstellen, werden in der ersten Sub, die den Dialog aufruft, definiert.

Code: Alles auswählen

Sub Dlg_Start

Dialoglibraries.Loadlibrary("Standard")
MyDlg= CreateUnoDialog(Dialoglibraries.Standard.PWAbfrage)
oEingabe = MyDlg.getControl("txt_PW")
Da die Variable oEingabe öffentlich deklariert wurde, steht sie auch der anderen Sub zur Verfügung.
Und dadurch würde dann der Code wie folgt aussehen

Code: Alles auswählen


Dim MyDlg as object
Dim oEingabe as Object

Sub Dlg_Start

Dialoglibraries.Loadlibrary("Standard")
MyDlg= CreateUnoDialog(Dialoglibraries.Standard.PWAbfrage)
oEingabe = MyDlg.getControl("txt_PW")

'----------------------------------- Ab hier gibt es jetzt auch Bunte Buttons im Dialog :-) --
   Dim bNativeLook as Boolean
   bNativeLook = False
   MyDlg.getPeer().setProperty( "NativeWidgetLook", bNativeLook )
'-----------------------------------

MyDlg.execute

End Sub

'#######################################

Sub Dlg_PWAbfrage

msgbox oEingabe.text

If oEingabe.text = "lolli" then
msgbox "jep"
else
msgbox "so nicht"
End If

End Sub

Ich hänge jetzt zusätzlich zu dem Code auch noch die Datei an.

Jetzt passiert Nichts
habe einen debug eingebaut, aber als wenn das Makro garnicht angesprochen wird
Da kann keiner Helfen, ohne die Datei zu sehen. Vielleicht solltest du die Datei anhängen.


Danke für dein Lob. Über so etwas freue ich mich auch sehr. Weiß ich doch das meine Arbeit nicht umsonst ist. :D



Gruß
balu
Dateianhänge
Netztest-b2.ods
(13.13 KiB) 152-mal heruntergeladen
Sei öfter mal ein Faultier, sag öfter mal "Ach was!" Dann kriegst du keinen Herzinfarkt, und hast ne menge Spass.

wehr rächtschraipfähler findet khan si behalden :D
DITA
***
Beiträge: 91
Registriert: Fr, 16.11.2012 16:23

Re: calc - Dialog - Textfelder auslesen @balu???

Beitrag von DITA »

Hallo balu,

Deine Arbeit umsonst???? Nein, bestimmt nicht, manchmal vielleicht vergebens :D
aber ich find die Erläuterungen von Dir wirklich sehr sehr lehrreich und nachvollziehbar, mit dem entscheidenden Hintergrundwissen, und dafür ist ein Danke eigentlich viiieeel zu wenig.

Dimensionierung, Deklaration und Co , gut, das Du wusstest was ich meinte.

Ja, sicherlich werden die Dialoge demnächst umfangreicher, aber fange klein an, denn will auch verstehen was ich tue, und warum es so ist.

Jetzt funktioniert es soweit - vielen vielen Dank.

Werde bestimmt noch ein- zwei- dreimal ......... in Bezug Dialog auf Hilfe angewiesen sein.

Nochmals vielen Dank für Deine Super Hilfe, bis sicherlich demnächst

Gute Nacht und Danke
Gruss Dirk
Antworten