Dialog, Textbox befüllen

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

Moderator: Moderatoren

rbanerjee
Beiträge: 3
Registriert: Di, 13.12.2005 11:20

Dialog, Textbox befüllen

Beitrag von rbanerjee »

Hallo,

ich habe folgendes Problem:

in einem Dialog befinden sich eine Textbox und eine Befehlsschaltfläche.
Ein Klick auf die Befehlsschaltfläche startet einen Verzeichnisauswahl-Dialog. Nach Auswahl des Pfades soll das Ergebnis in der Textbox dargestellt werden.

Folgende Prozedur ist an das Auslöse-Ereignis der Befehlsschaltfläche gebunden:


[code]Sub DiaTemplatePath
Dim sTemplatePath As String
Dim oDialog As Object
Dim oTemplateControl As Object
Dim oFolderPicker As Object

DialogLibraries.LoadLibrary("Standard")
oDialog = CreateUnoDialog(DialogLibraries.Standard.diaSettings)
oTemplateControl = oDialog.GetControl("txtTemplate")

oFolderPicker = createUnoService("com.sun.star.ui.dialogs.FolderPicker")
oFolderPicker.execute
sTemplatePath = ConvertFromUrl(oFolderPicker.directory)

msgbox(sTemplatePath) 'Pfad ist vorhanden und wird ausgegeben

'1.Versuch:
oTemplateControl.Model.Text = sTemplatePath
msgbox(oTemplateControl.text) 'Pfad wird ausgegeben, in der Textbox ist nichts zu sehen

'2.Versuch:
oTemplateControl.text = sTemplatePath
msgbox(oTemplateControl.text) 'Pfad wird ausgegeben, in der Textbox ist nichts zu sehen

'3.Versuch
oTemplateControl.SetText(sTemplatePath)
msgbox(oTemplateControl.text) 'Pfad wird ausgegeben, in der Textbox ist nichts zu sehen
End Sub
[/code]

Nun das Problem:

Der Text wird nicht in der Textbox dargestellt, kann aber wie gezeigt abgefragt werden. Nur zu Sehen ist nichts.
Raindancer
**
Beiträge: 37
Registriert: Mo, 13.02.2006 23:55
Wohnort: Deutschland

Beitrag von Raindancer »

Hallöle,

ich habe mal den wesentlichen Teil Deines Codes in meinen Bastel-Dialog eingefügt, den ich immer benutze um Sachen zu versuchen, spielen sozusagen.
Ich habe ein einfaches Textfeld (Text1) im Dialog. (oDlg ist mein Dialog)
Die eingefügten Zeilen:


dim oFolderPicker as object
dim sTemplatePath as string

oFolderPicker = createUnoService("com.sun.star.ui.dialogs.FolderPicker")
oFolderPicker.execute
sTemplatePath = ConvertFromUrl(oFolderPicker.directory)

oDlg.getControl("Text1").model.text = sTemplatePath


Läuft absolut prima! Da ich "createUnoService("com.sun.star.ui.dialogs.FolderPicker")" bisher noch nicht kannte, habe ich gleich noch was gelernt - Danke
:D

So - und nun eine Frage, aber bitte nicht falsch verstehen, ich möchte Dich keinesfalls ärgern, auch wenn es fast so klingt, aber:
Hast Du im Eigenschaftendialog zum Textfeld unter Schrift/Schrifteffekt evtl. versehentlich die Textfarbe auf Weiß gestellt?
Habe ich nämlich auch schon mal gemacht, sollte eigentlich rötlich sein, einfach daneben geklickt und jede Menge graue Haare bekommen.

Gruß
Ralf

[edit]Ach ja, bei mir läuft OOo auf XP. Könnte das bei Linux anders sein?[/edit]
Toxitom
********
Beiträge: 3769
Registriert: Di, 12.08.2003 18:07
Wohnort: Wiesbaden
Kontaktdaten:

Beitrag von Toxitom »

Hey rbanerjee,

also, dein Code ist korrekt und sollte in allen Fällen funktionieren :-)

Warum bei dir nichts zu sehen ist - keine Ahnung. Vielleicht stimmt der Tipp von Ralf, vielleicht ist der Text zu lang und umgebrochen, vielleicht, vielleicht....

Gib uns noch mal deine Systemumgebugsvariablen an: Betriebssystem, OOo Version, und was dir sonst noch so einfällt.

Notfalls musst du uns deine Datei mal zur Verfügung stellen - vielleicht finden wir dann den Fehler?

Gruss
Thomas
Unterstützer LibreOffice, zertifizierter Trainer und Berater
Bücher: LibreOffice 6- Einstieg und Umstieg
Makros Grundlagen - LibreOffice / OpenOffice Basic
ykcim
*****
Beiträge: 324
Registriert: Di, 29.07.2003 15:22
Wohnort: Neu-Isenburg
Kontaktdaten:

Beitrag von ykcim »

Der Code ist nicht OK.
Das Makro ist an einen Button des Dialoges verknüpft, in dem Makro erzeugt er aber ein neues Objekt für einen Dialog. In diesem setzt er den Text.
Er muß das Dialogobjekt von außerhalb des Makros verwenden.

Code: Alles auswählen

Public odialog as object
 

Sub StartDialog
	DialogLibraries.LoadLibrary("Standard")
	oDialog = CreateUnoDialog(DialogLibraries.Standard.diaSettings)
    odialog.execute
end sub    
 
Sub DiaTemplatePath
	Dim sTemplatePath As String
	Dim oTemplateControl As Object
	Dim oFolderPicker As Object
 
	oTemplateControl = oDialog.GetControl("txtTemplate")
 
	oFolderPicker = createUnoService("com.sun.star.ui.dialogs.FolderPicker")
	oFolderPicker.execute
	sTemplatePath = ConvertFromUrl(oFolderPicker.directory)
 
	msgbox(sTemplatePath) 'Pfad ist vorhanden und wird ausgegeben
 
	'1.Versuch:
	oTemplateControl.Model.Text = sTemplatePath
 
End Sub

mfg
Michael
__
FAQ zu Starbasic -> http://www.starbasicfaq.de
Raindancer
**
Beiträge: 37
Registriert: Mo, 13.02.2006 23:55
Wohnort: Deutschland

Beitrag von Raindancer »

ykcim hat geschrieben:Der Code ist nicht OK.
Das Makro ist an einen Button des Dialoges verknüpft, in dem Makro erzeugt er aber ein neues Objekt für einen Dialog. In diesem setzt er den Text.
Er muß das Dialogobjekt von außerhalb des Makros verwenden.
...
:D *verneyg*

Du hast Recht. Ich hatte den Code (ohne Button !) nur in meiner 'Sub Main' versucht und da war's OK.
rbanerjee erzeugt in der "Button-Sub" offenkundig einen neuen Dialog ...

Das hab ich mal versucht nachzubauen. Ist sicher nicht das, was rbanerjee wollte und ist vermutlich auch Quatsch. Aber es verleitet mich doch zu der Frage: "Warum geht das eigentlich nicht?"

Code: Alles auswählen

dim oDlg as object
'dim oDlgBeschreibung as object

sub Main
dim oFolderPicker as object
dim sTemplatePath as string

'oDlgBeschreibung = DialogLibraries.RNI_TEST.Dialog1
'oDlg = CreateUnoDialog(oDlgBeschreibung)
oDlg = CreateUnoDialog(DialogLibraries.Test.Dialog_Test)

oFolderPicker = createUnoService("com.sun.star.ui.dialogs.FolderPicker")
oFolderPicker.execute
sTemplatePath = ConvertFromUrl(oFolderPicker.directory)

oDlg.getControl("Text1").model.text = sTemplatePath
'oDlg.getControl("Box1").AddItem(sTemplatePath, 0)

oDlg.execute()

End Sub 

sub cmd1
Dim sTemplatePath As String
Dim oDialog As Object
Dim oTemplateControl As Object
Dim oFolderPicker As Object

DialogLibraries.LoadLibrary("Standard")
oDialog = CreateUnoDialog(DialogLibraries.Standard.diaSettings)
oTemplateControl = oDialog.GetControl("txtTemplate")

oFolderPicker = createUnoService("com.sun.star.ui.dialogs.FolderPicker")
oFolderPicker.execute
sTemplatePath = ConvertFromUrl(oFolderPicker.directory)

oTemplateControl.model.text = sTemplatePath
msgbox(sTemplatePath) 'Pfad ist vorhanden und wird ausgegeben

oDialog.execute()

end sub

In der 'Sub Main' werden die erforderlichen Objekte erzeugt (instanziert?)
und der 'folderpicker' gestartet und das Ergebnis in die Vari sTemplatePath verfrachtet; dann in das Textfeld "Text1" des Dialogs geschoben.
Nun Dialog anzeigen und das Textfeld ist gefüllt. Pima. :D

Der im Dialog 'oDlg' enthaltene Button 'cmd1' startet nun bei Betätigung die 'Sub cmd1' .
Hier passiert eigentlich absolut genau das Gleiche, 2. Dialog erschaffen ....
Das in diesem 2. Dialog enthaltene Textfeld 'txtTemplate' ist nachdem dieser 2. Dialog angezeigt wird (oDialog.execute()) absolut LEER !

2 x der gleiche Code - einmal in der Sub Main für den Dialog oDlg
und ein weiteres Mal in der Sub cmd1 für den weiteren Dialog oDialog.
Im 2. Dialog funzt der Code nicht. Und Warum?
Liegt das evtl. daran, dass OOo nicht 2 Dialoge gleichzeitig verwalten kann? Oder weil Dialoge in OOo 'modal' sind?
Eine Fehlermeldung gibt es jedenfalls nicht.

Gruß
Ralf
ykcim
*****
Beiträge: 324
Registriert: Di, 29.07.2003 15:22
Wohnort: Neu-Isenburg
Kontaktdaten:

Beitrag von ykcim »

Kann ich nicht nachvollziehen. Bei mir tritt mit Deinem Code kein Fehler auf.
OO 2.0.3

mfg
Michael
__
FAQ zu Starbasic -> http://www.starbasicfaq.de
Antworten