Textfeld wird nicht erstellt

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

Moderator: Moderatoren

Schwedenbitter
**
Beiträge: 47
Registriert: So, 25.06.2006 13:03
Wohnort: Finsterwalde, Brandenburg

Textfeld wird nicht erstellt

Beitrag von Schwedenbitter »

Hallo,

ich habe damit begonnen, ein umfangreiches Makro nebst zu erstellen. Über den Dialog soll abhängig von den Eingaben ein Text gebaut werden, der auch ein Textfeld enthält. Genau hier liegt mein Problem:

Wenn ich die sub Z_Test aufrufe, dann wird das Textfeld erstellt. Wenn ich Z_Test aus der sub Abfrage heraus aufrufe, kommt nichts mehr. Wo liegt mein Fehler?

Code: Alles auswählen

Dim MyDlg	As Object
Dim O_Ber_G	As Object
Dim O_Ber_S	As Object
Dim O_Tip_G	As Object
Dim O_Tip_S	As Object
Dim O_Aus_G	As Object
Dim O_Aus_S	As Object
Dim O_Aus_M	As Object
Dim O_Aus_A	As Object
Dim O_Sch_G	As Object
Dim O_Sch_S	As Object
Dim O_Ein_G	As Object
Dim O_Ein_S	As Object
Dim O_Ers_G	As Object
Dim O_Ers_S	As Object
Dim O_Ve1_G	As Object
Dim O_Ve1_S	As Object
Dim O_Zwe_G	As Object
Dim O_Zwe_S	As Object
Dim O_Ve2_G	As Object
Dim O_Ve2_S	As Object
Dim O_Los	As Object
Dim O_Alles	As Object
Dim O_All_S	As Object

Sub A_Init_Dlg
	rem --- Zeiger auf den Dialog setzen ---
	Dialoglibraries.Loadlibrary("RVG")
	MyDlg = CreateUnoDialog(Dialoglibraries.RVG.Zivilrecht)
	rem --- Objecte initialisieren ---------
	O_Ber_G = MyDlg.GetControl("Ber_G")
	O_Ber_S = MyDlg.GetControl("Ber_S")
	O_Tip_G = MyDlg.GetControl("Tip_G")
	O_Tip_S = MyDlg.GetControl("Tip_S")
	O_Aus_G = MyDlg.GetControl("Aus_G")
	O_Aus_S = MyDlg.GetControl("Aus_S")
	O_Aus_M = MyDlg.GetControl("Aus_M")
	O_Aus_A = MyDlg.GetControl("Aus_A")
	O_Sch_G = MyDlg.GetControl("Sch_G")
	O_Sch_S = MyDlg.GetControl("Sch_S")
	O_Ein_G = MyDlg.GetControl("Ein_G")
	O_Ein_S = MyDlg.GetControl("Ein_S")
	O_Ers_G = MyDlg.GetControl("Ers_G")
	O_Ers_S = MyDlg.GetControl("Ers_S")
	O_Ve1_G = MyDlg.GetControl("Ve1_G")
	O_Ve1_S = MyDlg.GetControl("Ve1_S")
	O_Zwe_G = MyDlg.GetControl("Zwe_G")
	O_Zwe_S = MyDlg.GetControl("Zwe_S")
	O_Ve2_G = MyDlg.GetControl("Ve2_G")
	O_Ve2_S = MyDlg.GetControl("Ve2_S")
	O_Los	= MyDlg.GetControl("Los")
	O_Alles	= MyDlg.GetControl("Alles")
	O_All_S	= MyDlg.GetControl("All_S")
End Sub

sub Z_Test
rem ----------------------------------------------------------------------
rem define variables
dim document   as object
dim dispatcher as object
rem ----------------------------------------------------------------------
rem get access to the document
document   = ThisComponent.CurrentController.Frame
dispatcher = createUnoService("com.sun.star.frame.DispatchHelper")
rem ----------------------------------------------------------------------
dim args1(5) as new com.sun.star.beans.PropertyValue
args1(0).Name = "Type"
args1(0).Value = 38
args1(1).Name = "SubType"
args1(1).Value = 0
args1(2).Name = "Name"
args1(2).Value = "Das ist ein Test"
args1(3).Name = "Content"
args1(3).Value = ""
args1(4).Name = "Format"
args1(4).Value = 0
args1(5).Name = "Separator"
args1(5).Value = " "
dispatcher.executeDispatch(document, ".uno:InsertField", "", 0, args1())
end sub

Sub Auswertung
	Z_Test
	MsgBox("Was ist denn los?")	
End Sub

Sub Abfrage
	A_Init_Dlg
	MyDlg.Execute()
End Sub
Falls (auch) sontige Anmerkungen zu machen sind, nur her damit. Außerdem würde ich mich freuen, fall es eine Möglichkeit gibt, mehrere Befehle in einer Zeile zu machen und mir jemand sagen würde, wie das geht...

Gruß, Alex
OpenOffice.org 2.0.2 (stable)
OpenOffice.org 2.0.3 (update am 06.07.2006)
...
OpenOffice.org 4.1.1 (seit August 2014)
Schwedenbitter
**
Beiträge: 47
Registriert: So, 25.06.2006 13:03
Wohnort: Finsterwalde, Brandenburg

Re: Textfeld wird nicht erstellt

Beitrag von Schwedenbitter »

Hallo,

habe etwas weitergetest und meine, es müsste an oOO liegen. Auch ein Update auf 2.4.1 hat nichts gebracht.
Ich habe einfach mal einen Dialog mit nur einem Button angelegt und dem Button das im Folgende mit Z_Test benannte Makro dem Ereignis Auslösen zugeordnet. Außerdem habe ich im Menü zwei Einträge erstellt. Einer ruft nur Z_Test auf -> und es klappt. Der andere startet den Dialog. Zur Kontrolle habe ich bei Z_Test eine MsgBox() eingebaut. Die kommt immer.
Den langen Code von oben braucht sich also keiner unbedingt durchzulesen. Das Phänomen tritt auch im Kleinen auf.

Ich bin echt am Verzweifeln. Ich würde mir ja was anderes einfallen lassen. Aber ich brauche das Textfeld als Platzhalter...

Code: Alles auswählen

sub Z_Test
	dim document   as object
	dim dispatcher as object
	document   = ThisComponent.CurrentController.Frame
	dispatcher = createUnoService("com.sun.star.frame.DispatchHelper")
	dim args1(5) as new com.sun.star.beans.PropertyValue
	args1(0).Name = "Type"
	args1(0).Value = 38
	args1(1).Name = "SubType"
	args1(1).Value = 0
	args1(2).Name = "Name"
	args1(2).Value = "Das ist ein Test!"
	args1(3).Name = "Content"
	args1(3).Value = ""
	args1(4).Name = "Format"
	args1(4).Value = 0
	args1(5).Name = "Separator"
	args1(5).Value = " "
	dispatcher.executeDispatch(document, ".uno:InsertField", "", 0, args1())
	MsgBox("Das gibt es doch nicht!")
end sub

sub Aufruf
rem	Dim MyDlg	As Object	rem --- Dialog -----------------------------
	Dialoglibraries.Loadlibrary("Standard")
	MyDlg = CreateUnoDialog(Dialoglibraries.Standard.Zivilrecht)
	MyDlg.Execute()	
end sub
OpenOffice.org 2.0.2 (stable)
OpenOffice.org 2.0.3 (update am 06.07.2006)
...
OpenOffice.org 4.1.1 (seit August 2014)
turtle47
*******
Beiträge: 1849
Registriert: Mi, 04.01.2006 20:10
Wohnort: Rheinbach

Re: Textfeld wird nicht erstellt

Beitrag von turtle47 »

Hallo Alex,
Schwedenbitter hat geschrieben:Wenn ich Z_Test aus der sub Abfrage heraus aufrufe, kommt nichts mehr. Wo liegt mein Fehler?
Dem kann ich nicht ganz folgen, zumindest wenn ich mir den Code ansehe:

Code: Alles auswählen

Sub Abfrage
   A_Init_Dlg
   MyDlg.Execute()
End Sub
Wo ist den da der Aufruf "Z-Test"?

Und wo ist in Deinem zweiten Beispiel der Aufruf "Z-Test"?
Versuche es mal damit:

Code: Alles auswählen

sub Aufruf
rem   Dim MyDlg   As Object   rem --- Dialog -----------------------------
   Dialoglibraries.Loadlibrary("Standard")
   MyDlg = CreateUnoDialog(Dialoglibraries.Standard.Zivilrecht)
   Z_Test
   MyDlg.Execute()   
end sub
Vielleicht habe ich Dein Problem aber auch nicht richtig verstanden. :(

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
Benutzeravatar
komma4
********
Beiträge: 5332
Registriert: Mi, 03.05.2006 23:29
Wohnort: Chon Buri Thailand Asia
Kontaktdaten:

Re: Textfeld wird nicht erstellt

Beitrag von komma4 »

Dein ThisComponent.CurrentController.Frame bezeichnet kein Dokument, wenn der Code aus einem Dialog aufgerufen wird.

Untersuche Deine Objekte mit Xray
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)
Schwedenbitter
**
Beiträge: 47
Registriert: So, 25.06.2006 13:03
Wohnort: Finsterwalde, Brandenburg

Re: Textfeld wird nicht erstellt

Beitrag von Schwedenbitter »

Danke für die Antworten,

@turtle47
Warum sollte ich den Auruf Z_Test in den Makros selbst machen? Ich rufe das doch über den Dialog auf. Im Dialog-Editor weise ich dem Ereignis "Beim Auslösen" eines (beliebigen) Button das Makro Z_Test zu. Das reicht! Ich habe ja, um die Ausführung zu testen, in mein Makro Z_Test eine MsgBox() eingebaut, die - wie bereits geschrieben - kommt.
Daran liegt es also nicht!

@komma4
komma4 hat geschrieben:Dein ThisComponent.CurrentController.Frame bezeichnet kein Dokument, wenn der Code aus einem Dialog aufgerufen wird.
Ich glaube, auch das ist es nicht. Denn wenn ich meinen Code um

Code: Alles auswählen

	dim args2(0) as new com.sun.star.beans.PropertyValue
	args2(0).Name = "Text"
	args2(0).Value = "Das ist ein Test-Text!"
	dispatcher.executeDispatch(document, ".uno:InsertText", "", 0, args2())
erweitere, dann schreibt er mir den Text komischer Weise hin. Das dürfte dann ja auch nicht geschehen, oder?

Wie muss die Zeile

Code: Alles auswählen

	document   = ThisComponent.CurrentController.Frame
denn Deiner Meinung nach richtig lauten? Vielleicht klappt es ja dann schon!

Wer oder was ist Xray? Ich bin dem Link gefolgt, konnte aber auf der Seite das Wort Xray und auch sonst nichts für mich hilfreiches finden. Evtl. liegt es auch daran, dass die Seite englisch ist :-)

Gruß, Alex
Benutzeravatar
komma4
********
Beiträge: 5332
Registriert: Mi, 03.05.2006 23:29
Wohnort: Chon Buri Thailand Asia
Kontaktdaten:

Re: Textfeld wird nicht erstellt

Beitrag von komma4 »

Alex,

es kommt darauf an, wann document mit ThisComponent.CurrentController.Frame besetzt wird.

Da ich nicht mit dispatcher-Code programmiere ... kann ich wenig helfen.

XRay
ist eine Basic-Anwendung zum Untersuchen (debuggen) von StarBasic-Code.... ganz unten auf der Seite.
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)
Schwedenbitter
**
Beiträge: 47
Registriert: So, 25.06.2006 13:03
Wohnort: Finsterwalde, Brandenburg

Re: Textfeld wird nicht erstellt

Beitrag von Schwedenbitter »

komma4 hat geschrieben:Da ich nicht mit dispatcher-Code programmiere ... kann ich wenig helfen.
Das ist mir zu hoch. Trotzdem erstmal danke!

Ich habe jetzt eine für mich funktionierende "Lösung" gefunden:

Da ich ohnehin bei einem Klick auf den Button den Dialog schließen lassen wollte, habe ich dem Button jetzt als Eigenschaft Art der Schaltfläche den Wert OK mitgegeben. Der Dialog wird geschlossen und ich frage ab, ob OK gedrückt wurde. Falls ja, erstelle ich erst jetzt den Text mit Textfeldern etc. An dieser Stelle klappt das dann ohne Probleme.
Für mich ist die Sache daher gelöst. Ich bin kein Informatiker. Also entschuldigt, falls ich Euch zu schnell aufgebe. Aber für mich muss es funktionieren und das tut es jetzt. Trotzdem habe ich den Thread nicht als gelöst markiert. Falls ich das machen soll, gebt Bescheid.

Gruß und Dank fürs Mitdenken, Alex
OpenOffice.org 2.0.2 (stable)
OpenOffice.org 2.0.3 (update am 06.07.2006)
...
OpenOffice.org 4.1.1 (seit August 2014)
Antworten