[gelöst] OptionBtn mit Checkbox im Dokumen verknüpft

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

Moderator: Moderatoren

Ibanez
**
Beiträge: 40
Registriert: Fr, 25.07.2008 09:50

[gelöst] OptionBtn mit Checkbox im Dokumen verknüpft

Beitrag von Ibanez »

BEITRAGS ÄNDERUNG: 16.09.08
Hallo Forum,

ich habe es jetzt dank Jürgens hilfe geschafft eine Checkbox mit Hilfe eines Dialogs und den darin enthaltenen OptionsButton anzusprechen.

Damit alle was davon haben hier die Lösung für das Beispiel (siehe Abbildungen)

Code: Alles auswählen

rem Beginn
Dim myDialog as Object
Dim Opt_Btn_1_State as String
Dim Opt_Btn_2_State as String
Dim String_Name as String

Dim oDoc as Object
Dim Opt_Btn_1 as Object
Dim Opt_Btn_2 as Object
Dim TxtName as String

Sub Dlg_1
	DialogLibraries.loadLibrary("Standard") 
	oForm = DialogLibraries.Standard.Dialog1
	myDialog = CreateUnoDialog(oForm)
	myDialog.title = "Options Button"
	Opt_Btn_1 = myDialog.getControl("OptionButton1")
	Opt_Btn_1.model.Label = "Auswahl1"
	Opt_Btn_2 = myDialog.getControl("OptionButton2")
	Opt_Btn_2.model.Label = "Auswahl2"

	Read_Settings1
	
	Ctl_Name1 = myDialog.GetControl("TextField_Name")
	Ctl_Name1.Model.Text = String_Name
	Ctl_Name1.setfocus()

	myDialog.execute()	
	myDialog.Dispose()
End Sub

Sub Read_Settings1
	oDoc = thisComponent
	strUserfield_Name1 = "Name"
	On Error Resume Next
	oTextFieldMasters = oDoc.TextFieldMasters
	TxtUserfield_Name = "com.sun.star.text.FieldMaster.User." + StrUserfield_Name1
	String_Name = oTextFieldMasters.getByName(TxtUserfield_Name).content
	oDoc = thisComponent
	oController = oDoc.getCurrentController()
	oform = odoc.drawpage.forms.getbyindex(0)	
	CtrlCheckBox1 = oForm.getByName("CheckBox1")
	CheckBox1_State=CtrlCheckBox1.state
	CtrlCheckBox2 = oForm.getByName("CheckBox2")
	CheckBox2_State=CtrlCheckBox2.state
	if CheckBox1_State = 1 and CheckBox2_State = 1 Then
	msgbox "Es sind zwei Auswahlmöglichkeiten markiert"& CHR(13)& "Bitte entscheiden sie sich nur für EINE AUSWAHL" ,48, "Grober Fehler!"
	Exit sub
	end if
	if CheckBox1_State = 1 Then
	Opt_Btn_1.State = 1
	end if
	if CheckBox2_State = 1 Then
	Opt_Btn_2.State = 1
	end if
End Sub

Sub Formularfelder_ansprechen1
	oDoc = thisComponent
	oController = oDoc.getCurrentController()
	oform = odoc.drawpage.forms.getbyindex(0)	
	CtrlCheckBox1 = oForm.getByName("CheckBox1")
	CheckBox1_State=CtrlCheckBox1.state
	oKView = oController.getControl(CtrlCheckBox1)
	CtrlCheckBox2 = oForm.getByName("CheckBox2")
	oKView = oController.getControl(CtrlCheckBox2)
	Opt_Btn_1 = myDialog.getControl("OptionButton1")
	Opt_Btn_1.State=Opt_Btn_1.state
	Opt_Btn_2 = myDialog.getControl("OptionButton2")
	Opt_Btn_2.State=Opt_Btn_2.state	
	if Opt_Btn_1.State = "True" then
	CtrlCheckBox1.State= 1
	CtrlCheckBox2.State= 0
	else
	CtrlCheckBox1.State= 0
	CtrlCheckBox2.State= 1
	end if
	if Opt_Btn_1.State = "False" and Opt_Btn_2_State = "False" then
	CtrlCheckBox1.State= 0
	CtrlCheckBox2.State= 0
	end if
	myDialog.endexecute()	
End Sub

Sub Felbefehl_schreiben1
	oDoc = thisComponent
	strUserfield_Name1 = "Name"    
	Ctl_Name1 = myDialog.GetControl("TextField_Name")
	String_Name = Ctl_Name1.Model.Text		
	strContent_Name = String_Name
		
	On Error Resume Next
	oTextFieldMasters = oDoc.TextFieldMasters
	
	TxtUserfield_Name="com.sun.star.text.FieldMaster.User." + StrUserfield_Name1
	oTextFieldMasters.getByName(TxtUserfield_Name).content = StrContent_Name
		
	oDoc.getTextFields().refresh()
	myDialog.endexecute()
End Sub
rem Ende
Bild
Zuletzt geändert von Ibanez am Di, 16.09.2008 15:26, insgesamt 2-mal geändert.
turtle47
*******
Beiträge: 1849
Registriert: Mi, 04.01.2006 20:10
Wohnort: Rheinbach

Re: Verknüpfung Checkbox im Dialog mit Checkbox im Dokument

Beitrag von turtle47 »

Hi Ibanez,
Ibanez hat geschrieben:Zudem wollte ich über OptionsButtons gewisse Auswahlmöglichkeiten zulassen. Man soll also im Dialog zwischen 2 Optionen wählen. Diese Auswahl wird dann auf das Dokument übertragen
Das ist kein Problem.
Ibanez hat geschrieben:wo sich zwei CheckBoxen befinden
Das ist für mich unlogisch > CheckBox versus Optionsbutton :(
Ibanez hat geschrieben:dann sollte der Haken im Dialog erscheinen, d.h. an der Stelle an der er sich auf dem Dokument befindet
Das ist möglich mit CheckBoxen, bei OptionsButtons aber nur wenn in dem Dokument eine CheckBox ausgewählt ist!

Schau mal folgendes Beispiel und bau Dir was schönes zusammen. :lol:
Optionsbutton_ansprechen.odt
(10.98 KiB) 64-mal heruntergeladen
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
Ibanez
**
Beiträge: 40
Registriert: Fr, 25.07.2008 09:50

Re: Verknüpfung Checkbox im Dialog mit Checkbox im Dokument

Beitrag von Ibanez »

Geil :-)

Genau das suche ich. Ich bastel mal und stelle die Lösung dann hier rein. Ich muss nämlich das ganze noch mit einen Textfeld kombinieren...

Yeeeeeeeeeeaaaaaahhhhhhh
Ibanez
Ibanez
**
Beiträge: 40
Registriert: Fr, 25.07.2008 09:50

Re: Verknüpfung Checkbox im Dialog mit Checkbox im Dokument

Beitrag von Ibanez »

Ich habe es fast :?

Ich habe noch ein Textfeld eingefügt, dass man bei Auswahl 2 ausfüllen soll. Problem ist, dieses Textfeld wird beim Start des Dialogs nicht ausgelesen. Schreibe ich was hinein wird es sobald ich auch den "Zurück" button klicke und wieder auf den "Weiter" klicke sowohl auf dem Dokument, als auch im Dialog angezeigt. Speichere ich das Dokument, öffne es erneut und klicke weiter bis zu dem Dialog mit der besagten Abfrage, dann steht im Textfeld nichts mehr, wobei es auf dem Dokument noch zu sehen ist. Ich verstehe es nicht und sehe auch keinen Fehler.

Jemand eine Ahnung warum?

Ich benutze 2 Dialoge. Dlg_FB besteht nur aus Textfeldern, die vorher abgefragt werden. Dlg_P1 besteht aus den OptionsButton und einem Textfeld ("TextField_Name). Die Buttons "Zurück", "Weiter" und "Fertig" sind mit den Makros "cbBackP1", "cbForeP1" und "cmd_OKP1" belegt.

Code: Alles auswählen

Dim myDialog as Object
Dim Opt_Btn_1_State as String
Dim Opt_Btn_2_State as String
Dim String_Name as String

Dim Opt_Btn_1 as Object
Dim Opt_Btn_2 as Object
Dim TxtName as String

Sub Dlg_P1
	DialogLibraries.loadLibrary("Standard") 
	oForm = DialogLibraries.Standard.Dlg_P1
	myDialog = CreateUnoDialog(oForm)
	myDialog.title = "Options Button"
	Opt_Btn_1 = myDialog.getControl("OptionButton1")
	Opt_Btn_1.model.Label = "Auswahl1"
	Opt_Btn_2 = myDialog.getControl("OptionButton2")
	Opt_Btn_2.model.Label = "Auswahl2"

	Ctl_Name = myDialog.GetControl("TextField_Name")
	Ctl_Name.Model.Text = String_Name
	Ctl_Name.setfocus()

	Read_SettingsP1
	myDialog.execute()	
	myDialog.Dispose()
End Sub

Sub Read_SettingsP1
	oDoc = thisComponent
	strUserfield_Mit = "Name"
	On Error Resume Next
	oTextFieldMasters = oDoc.TextFieldMasters
	TxtUserfield_Name = "com.sun.star.text.FieldMaster.User." + StrUserfield_Name
	String_NameMit = oTextFieldMasters.getByName(TxtUserfield_Name).content
	oDoc = thisComponent
	oController = oDoc.getCurrentController()
	oform = odoc.drawpage.forms.getbyindex(0)	
	CtrlCheckBox1 = oForm.getByName("CheckBox1")'Achtung: Namen anpassen
	CheckBox1_State=CtrlCheckBox1.state
	CtrlCheckBox2 = oForm.getByName("CheckBox2")'Achtung: Namen anpassen
	CheckBox2_State=CtrlCheckBox2.state
	if CheckBox1_State = 1 and CheckBox2_State = 1 Then
	msgbox "Es sind zwei Checkboxen angewählt"& CHR(13)& "Welcher Optionsbutton soll denn jetzt angewählt werden?" ,48, "Grober Fehler!"
	Exit sub
	end if
	if CheckBox1_State = 1 Then
	Opt_Btn_1.State = 1
	end if
	if CheckBox2_State = 1 Then
	Opt_Btn_2.State = 1
	end if
End Sub

Sub Formularfelder_ansprechenP1
	oDoc = thisComponent
	oController = oDoc.getCurrentController()
	oform = odoc.drawpage.forms.getbyindex(0)	
	CtrlCheckBox1 = oForm.getByName("CheckBox1")'Achtung: Namen anpassen
	CheckBox1_State=CtrlCheckBox1.state
	oKView = oController.getControl(CtrlCheckBox1)
	CtrlCheckBox2 = oForm.getByName("CheckBox2")'Achtung: Namen anpassen
	oKView = oController.getControl(CtrlCheckBox2)
	Opt_Btn_1 = myDialog.getControl("OptionButton1")
	Opt_Btn_1_State=Opt_Btn_1.state
	Opt_Btn_2 = myDialog.getControl("OptionButton2")
	Opt_Btn_2_State=Opt_Btn_2.state	
	if Opt_Btn_1_State = "True" then
	CtrlCheckBox1.State= 1
	CtrlCheckBox2.State= 0
	else
	CtrlCheckBox1.State= 0
	CtrlCheckBox2.State= 1
	end if
	if Opt_Btn_1_State = "False" and Opt_Btn_2_State = "False" then
	CtrlCheckBox1.State= 0
	CtrlCheckBox2.State= 0
	end if
	myDialog.endexecute()	
End Sub

Sub Felbefehl_schreibenP1
	oDoc = thisComponent
	strUserfield_Name = "Name"    
	Ctl_Name = myDialog.GetControl("TextField_Name")
	String_Name = Ctl_Name.Model.Text		
	strContent_Name = String_Name
		
	On Error Resume Next
	oTextFieldMasters = oDoc.TextFieldMasters
	
	TxtUserfield_Name="com.sun.star.text.FieldMaster.User." + StrUserfield_Name
	oTextFieldMasters.getByName(TxtUserfield_Name).content = StrContent_Name
		
	oDoc.getTextFields().refresh()
	myDialog.endexecute()
End Sub 

sub schflaeche_cbBackP1
	Felbefehl_schreibenP1
	Dlg_FB4
End sub

Sub schflaeche_cbForeP1
	Felbefehl_schreibenP1
	Dlg_P1
	Felbefehl_lesenP1
End sub

Sub schflaeche_cmd_okP1
	Felbefehl_schreibenP1
	Formularfelder_ansprechenP1
End Sub
Bild
Ibanez
**
Beiträge: 40
Registriert: Fr, 25.07.2008 09:50

Re: Verknüpfung Checkbox im Dialog mit Checkbox im Dokument

Beitrag von Ibanez »

Ha ! Habe den Fehler gefunden.

Für alle die es interessiert:

Flasch
Sub Dlg_P1
DialogLibraries.loadLibrary("Standard")
oForm = DialogLibraries.Standard.Dlg_P1
myDialog = CreateUnoDialog(oForm)
myDialog.title = "Options Button"
Opt_Btn_1 = myDialog.getControl("OptionButton1")
Opt_Btn_1.model.Label = "Auswahl1"
Opt_Btn_2 = myDialog.getControl("OptionButton2")
Opt_Btn_2.model.Label = "Auswahl2"

Ctl_Name = myDialog.GetControl("TextField_Name")
Ctl_Name.Model.Text = String_Name
Ctl_Name.setfocus()

Read_SettingsP1
myDialog.execute()
myDialog.Dispose()
End Sub

RISCHTISCH
Sub Dlg_P1
DialogLibraries.loadLibrary("Standard")
oForm = DialogLibraries.Standard.Dlg_P1
myDialog = CreateUnoDialog(oForm)
myDialog.title = "Options Button"
Opt_Btn_1 = myDialog.getControl("OptionButton1")
Opt_Btn_1.model.Label = "Auswahl1"
Opt_Btn_2 = myDialog.getControl("OptionButton2")
Opt_Btn_2.model.Label = "Auswahl2"

Read_SettingsP1
Ctl_Name = myDialog.GetControl("TextField_Name")
Ctl_Name.Model.Text = String_Name
Ctl_Name.setfocus()

myDialog.execute()
myDialog.Dispose()
End Sub
Antworten