Seite 1 von 1

[gelöst][Makro] Status Radiobuttons

Verfasst: Di, 29.03.2011 21:18
von opiWahn
Hallo,

in folgerderweise versuche ich den jeweilen Status von 4 Gruppen zu 1x4 und 3x2 Options anzeigen zu lassen.
Da funktioniert auch ganz wie gewünscht, wenn es auch bestimmt sinnvoller gecodet sein könnte ;)

Code: Alles auswählen

Sub proofOptions
Dim oForm as Object
Dim aOpt1(), aOpt2(), aOpt3(), aOpt4()
Dim s1$, s2$, s3$, s4$

	oForm = thisComponent.drawpage.forms(0)
	oForm.getGroupByName("optgrp1", aOpt1)
	oForm.getGroupByName("optgrp2", aOpt2)
	oForm.getGroupByName("optgrp3", aOpt3)
	oForm.getGroupByName("optgrp4", aOpt4)
	
	for i=LBound(aOpt1) to UBound(aOpt1)
	   if aOpt1(i).state then
	     s1 = "Gewählte Optionen:" & Chr$(10) &_
	         "Name:  " & aOpt1(i).name & CHR$(10) &_
	         "Status:  " & aOpt1(i).state & CHR$(10) &_
	         "Label:  " & aOpt1(i).Label 
	    end if
	next
		
	for i=LBound(aOpt2) to UBound(aOpt2)
	 	if aOpt2(i).state then
	     s2 = "Gewählte Optionen:" & Chr$(10) &_
	         "Name:  " & aOpt2(i).name & CHR$(10) &_
	         "Status:  " & aOpt2(i).state & CHR$(10) &_
	         "Label:  " & aOpt2(i).Label 
	    end if
	next
		
	for i=LBound(aOpt3) to UBound(aOpt3)
	 	if aOpt3(i).state then
	     s3 = "Gewählte Optionen:" & Chr$(10) &_
	         "Name:  " & aOpt3(i).name & CHR$(10) &_
	         "Status:  " & aOpt3(i).state & CHR$(10) &_
	         "Label:  " & aOpt3(i).Label 
	    end if
	next
	
	for i=LBound(aOpt4) to UBound(aOpt4)
	 	if aOpt4(i).state then
	     s4 = "Gewählte Optionen:" & Chr$(10) &_
	         "Name:  " & aOpt4(i).name & CHR$(10) &_
	         "Status:  " & aOpt4(i).state & CHR$(10) &_
	         "Label:  " & aOpt4(i).Label 
	    end if
	next
	msgbox s1 & Chr$(10) & s2 & Chr$(10) & s3 & Chr$(10) & s4, 0, "Ihre Wahl:"
--->	msgbox s4(4),0,"Label von OptGrp4"
End Sub
Nach der 1. msgbox, die mir ja alles sagt was ich wissen will, versuche ich nun mit der 2. mir zu verdeutlichen wie ich an die Einzelteile komme, z.B. das Label oder den Status der gewählten Option in der jeweiligen Gruppe. Aber da ---> funktioniert was gar nicht. Versuche mit ... aOpt4(4).Label ... u.ä. schlugen auch fehl. Ganz verstanden habe ich auch nicht was in diesem Fall s1$ darstellt (Array?).
Ich habe ein Teil des Codes (urspr. Dim s$ und nur eine Schleife) so übernommen wie ich ihn vorfand und (halbwegs) erfolgreich angepasst.

Grüße
opiWahn

Re: [Makro] Status Radiobuttons

Verfasst: Di, 29.03.2011 22:38
von Stephan
Versuche mit ... aOpt4(4).Label ... u.ä. schlugen auch fehl.
WAS KONKRET schlug fehl? Fehlermeldung? (Sonstige Beobachtung?)

WAS meint "u.ä.", welche anderen Dinge wurden denn KONKRET noch versucht?

Rein mutmaßlich stimmt vielleicht die Angabe des Index mit 4 nicht.
Ganz verstanden habe ich auch nicht was in diesem Fall s1$ darstellt (Array?).
Und ich bin mir etwas im Unklaren ob ich die FRage richtig verstehe - gibt es denn eine Besonderheit, die ich dann bisher übersehe, weswegen Du von "in diesem Fall" sprichst?

Alles was ich aus dem Code ersehe ist das s1 als String-Variable deklariert ist und auch String-Inhalt aufnimmt (und natürlich kein Array ist), also der ganz gewöhnliche Normalfall, aber, wie gesagt, vielleicht übersehe ich was.



Gruß
Stephan

Re: [Makro] Status Radiobuttons

Verfasst: Di, 29.03.2011 23:19
von opiWahn
Hallo Stephan,

schön, daß ich jetzt auch weiß, daß "DIM s1 as String" auch mit s1$ abgekürzt werden kann :)
Somit ist das schon mal klar!
Wie schon beschrieben geht es mir darum heraus zu finden ob in einer Optiongruppe etwas ausgewählt wurde und wenn ja was.
Wurde etwas ausgewählt benötige ich sowohl die Gruppe als auch den zugeordneten Wert (z.B. aus optgrp3 [JA=1, NEIN=2]).
Wurde nicht ausgewält muß ich eine Fehlermeldung ausgeben und z.B. das Speichern darf nicht möglich sein.

Gruß
opiWahn

Re: [Makro] Status Radiobuttons

Verfasst: Di, 29.03.2011 23:24
von F3K Total
Hi,
bei mir klappts, wenn ich z.B.

Code: Alles auswählen

for i=LBound(aOpt1) to UBound(aOpt1)
durch

Code: Alles auswählen

for i=1 to UBound(aOpt1)
ersetze. Grund: LBound(aOpt1) ist 0
Wenn Du dann im folgenden

Code: Alles auswählen

if aOpt1(i).state then
abfragst, gibt es einen Fehler, denn aOpt1(0) ist der Gruppierungsrahmen selbst, und der hat kein .state
Wenn Du allerdings bei 1 beginnst, läßt Du den Rahmen selber weg und guckst nur auf die Optionsfelder. Und da funktionieren dann, zumindest bei mir:

Code: Alles auswählen

aOpt1(i).name
aOpt1(i).state
aOpt1(i).Label
Es gibt auch die Möglichkeit vorher abzufragen, ob es sich bei dem untersuchten Objekt um einen Optionsbutton handelt, dann geht es auch ohne die 1:

Code: Alles auswählen

   oForm.getGroupByName("optgrp1", aOpt1)
   for i=LBound(aOpt1) to UBound(aOpt1)
   if aOpt1(i).supportsservice("com.sun.star.awt.UnoControlRadioButtonModel") then
      if aOpt1(i).state then
        s1 = "Gewählte Optionen:" & Chr$(10) &_
            "Name:  " & aOpt1(i).name & CHR$(10) &_
            "Status:  " & aOpt1(i).state & CHR$(10) &_
            "Label:  " & aOpt1(i).Label
       end if
    end if
   next
Gruß R

Re: [Makro] Status Radiobuttons

Verfasst: Di, 29.03.2011 23:56
von opiWahn
Hallo F3K,

vielen Dank für deine Mühe und Erklärungen.
Die Version 1 führte leider nicht zum Erfolg und die Version 2 macht (zu mindest nach außen hin) das gleiche.
Bisher bin ich davon ausgegangen, daß aOpt1() ein Array ist und ich mit aOpt1(3) den 3. Wert auslesen bzw. zuweisen kann - oder?
Wäre super wenn das so funktionieren würde wie: Wert3opt1=aOpt1(3) ... dann könnte ich damit weiterarbeiten und einige Probleme wären bald vom Tisch.

Gruß
opiWahn

Re: [Makro] Status Radiobuttons

Verfasst: Mi, 30.03.2011 00:50
von Stephan
opiWahn hat geschrieben:Hallo Stephan,

schön, daß ich jetzt auch weiß, daß "DIM s1 as String" auch mit s1$ abgekürzt werden kann :)
Somit ist das schon mal klar!
Wie schon beschrieben geht es mir darum heraus zu finden ob in einer Optiongruppe etwas ausgewählt wurde und wenn ja was.
Wurde etwas ausgewählt benötige ich sowohl die Gruppe als auch den zugeordneten Wert (z.B. aus optgrp3 [JA=1, NEIN=2]).
Wurde nicht ausgewält muß ich eine Fehlermeldung ausgeben und z.B. das Speichern darf nicht möglich sein.

Gruß
opiWahn
Schade das Du nicht auf meine Fragen antwortest.


Gruß
Stephan

Re: [Makro] Status Radiobuttons

Verfasst: Mi, 30.03.2011 07:30
von F3K Total
Hi OpiWahn
ja aOpt1() ist ein Array von Objekten:
aOpt1(0) ist ein Objekt vom Typ "com.sun.star.comp.forms.OGroupBoxModel"
aOpt1(1) ist ein Objekt vom Typ "com.sun.star.comp.forms.ORadioButtonModel"
aOpt1(2) ist ein Objekt vom Typ "com.sun.star.comp.forms.ORadioButtonModel"
aOpt1(3) ist ein Objekt vom Typ "com.sun.star.comp.forms.ORadioButtonModel"
aOpt1(4) ist ein Objekt vom Typ "com.sun.star.comp.forms.ORadioButtonModel"
F3K Total hat geschrieben:bei mir klappts ...
Ich habe es also selbst ausprobiert.
Was Du natürlich nicht vergessen darfst ist es, wenistens einen Optionsknopf auszuwählen.
Vielleicht hat auch dein Formular einen Fehler?
Oder schlicht der Msgbox-Befehl?
Ich empfehle Dir das "Xray Tool" http://bernard.marcelly.perso.sfr.fr/index2.html, damit kann man seine Formulare analysieren und gucken welche Kontrollfelder welche Eigenschaften haben.
Unten der Code, der bei mir läuft.(Wenn du kein Xray hast, musst du die Zeile rausnehmen)

Code: Alles auswählen

Sub proofOptions
Dim oForm as Object
Dim aOpt1(), aOpt2(), aOpt3(), aOpt4()
Dim s1$, s2$, s3$, s4$

   oForm = thisComponent.drawpage.forms(0)
   oForm.getGroupByName("optgrp1", aOpt1)
   for i=LBound(aOpt1) to UBound(aOpt1)
   xray aOpt1(i)
   if aOpt1(i).supportsservice("com.sun.star.awt.UnoControlRadioButtonModel") then
      if aOpt1(i).state then
        s1 = "Gewählte Optionen:" & Chr$(10) &_
            "Name:  " & aOpt1(i).name & CHR$(10) &_
            "Status:  " & aOpt1(i).state & CHR$(10) &_
            "Label:  " & aOpt1(i).Label
       end if
    end if
   next
   msgbox s1 , 0, "Ihre Wahl:"
End Sub
Gruß R

Re: [Makro] Status Radiobuttons

Verfasst: Mi, 30.03.2011 11:37
von opiWahn
Hallo F3K Total,

ich hab das ganze etwas reduziert um die Werte die ich benötige:

Code: Alles auswählen

   	for i=LBound(aOpt3) to UBound(aOpt3)
   	if aOpt3(i).supportsservice("com.sun.star.awt.UnoControlRadioButtonModel") then
	 	if aOpt3(i).state then
	     s3 = "Grp:  " & aOpt3(i).name & CHR$(10) &_
	         "Wahl:  " & aOpt3(i).Label
	    end if
	end if
	next
	if s3 = "" then
   		msgbox "Sie habe keine Option in Grp3 gewählt!"
	else
  		msgbox s3, 0, ""
   	end if
	
	for i=LBound(aOpt4) to UBound(aOpt4)
	if aOpt4(i).supportsservice("com.sun.star.awt.UnoControlRadioButtonModel") then
	 	if aOpt4(i).state then
	     s4 = "Grp:  " & aOpt4(i).name & CHR$(10) &_
	         "Wahl:  " & aOpt4(i).Label
	    end if
	end if
	next
	if s4 = "" then
   		msgbox "Sie habe keine Option in Grp4 gewählt!"
	else
  		msgbox s4, 0, ""
   	end if
Wie schon zuvor: die Msgbox(en) funktionieren ja (fast), d.h. wurde etwas gewählt zeigt er die entsprechenden Daten an. Um auszugeben, daß nichts gewählt wurde frage ich danach ob s(n) leer ist. Wenn ja dann soll er mir das auch sagen. Die funktioniert aber nur bei der letzten (s4=""), bei allen anderen kommt nur eine gänzlich leere msgbox :o
Die andere Frage bleibt nach wie vor: Wie komme ich im jeweiligen Array an die Einzelwerte? Alternativ (fällt mir gerade beim Schreiben ein) könnte ich jeden einzelnen Wert der gefunden wird gleich einem eigenen String übergeben. Z.b.

Code: Alles auswählen

if aOpt4(i).state then
   s4_1 = aOpt4(i).name
   s4_2 = aOpt4(i).Label
end if
Es geht (wenn überhaupt) bestimmt auch anders - aber der große Coder bin ich halt nicht.
Ansonsten würde ich hier bestimmt mehr Antworten als Fragen posten :)

grüße
opiWahn

Re: [Makro] Status Radiobuttons

Verfasst: Mi, 30.03.2011 11:42
von opiWahn
boah äh, dess duht :D
zumindest was die Zuordnung der Werte in einzelne Strings angeht

Wenn aber nicht ausgewählt wurde sehe ich erst 3 leere msgboxen und dann erst die korrekte 4. ?

Code: Alles auswählen

Sub proofOptions
Dim oForm as Object
Dim aOpt1(), aOpt2(), aOpt3(), aOpt4()
Dim s1_1, s1_2, s2_1, s2_2, s3_1, s3_2, s4_1, s4_2 as String

	oForm = thisComponent.drawpage.forms(0)
	oForm.getGroupByName("optgrp1", aOpt1)
	oForm.getGroupByName("optgrp2", aOpt2)
	oForm.getGroupByName("optgrp3", aOpt3)
	oForm.getGroupByName("optgrp4", aOpt4)
	
   for i=LBound(aOpt1) to UBound(aOpt1)
   if aOpt1(i).supportsservice("com.sun.star.awt.UnoControlRadioButtonModel") then
      if aOpt1(i).state then
	     s1_1 = aOpt1(i).name
	     s1_2 = aOpt1(i).Label
      end if
   end if
   next
   if s1_2 = "" then
   msgbox "Keine Auswahl in Grupe 1", 0, ""
   else
   msgbox s1_1 & CHR$(10) & s1_2, 0, ""
   end if

	for i=LBound(aOpt2) to UBound(aOpt2)
	if aOpt2(i).supportsservice("com.sun.star.awt.UnoControlRadioButtonModel") then
	 	if aOpt2(i).state then
	     s2_1 = aOpt2(i).name
	     s2_2 = aOpt2(i).Label
      end if
   end if
   next
   if s2_2 = "" then
   msgbox "Keine Auswahl in Grupe 2", 0, ""
   else
   msgbox s2_1 & CHR$(10) & s2_2, 0, ""
   end if

   	for i=LBound(aOpt3) to UBound(aOpt3)
   	if aOpt3(i).supportsservice("com.sun.star.awt.UnoControlRadioButtonModel") then
	 	if aOpt3(i).state then
	     s3_1 = aOpt3(i).name
	     s3_2 = aOpt3(i).Label
      end if
   end if
   next
   if s3_2 = "" then
   msgbox "Keine Auswahl in Grupe 3", 0, ""
   else
   msgbox s3_1 & CHR$(10) & s3_2, 0, ""
   end if
	
	for i=LBound(aOpt4) to UBound(aOpt4)
	if aOpt4(i).supportsservice("com.sun.star.awt.UnoControlRadioButtonModel") then
	 	if aOpt4(i).state then
	     s4_1 = aOpt4(i).name
	     s4_2 = aOpt4(i).Label
      end if
   end if
   next
   if s4_2 = "" then
   msgbox "Keine Auswahl in Grupe 4", 0, ""
   else
   msgbox s4_1 & CHR$(10) & s4_2, 0, ""
   end if
   
End Sub

Re: [Makro] Status Radiobuttons

Verfasst: Mi, 30.03.2011 12:50
von F3K Total
Opiwahn,
mit der Abfrage

Code: Alles auswählen

if aOpt1(i).state then...
endif
Schließt Du alle aus, die nicht gewählt wurden.

Gruß R

Re: [Makro] Status Radiobuttons

Verfasst: Mi, 30.03.2011 13:21
von opiWahn
ah jetzt ja - zwar keine Insel, aber doch wenigstens die Hoffnung von Land in Sicht.
Aber ich will doch ... sie einschließen.
Mir war zwar klar, daß ich abprüfe ob die Gruppe "Aktiv" ist, also state=true zurück liefert, hab mir wohl aber keine weiteren Gedanken dazu gemacht.
Ich muß aber auch wissen, und das ist min. genauso wichtig ob state=false ist. Ich hoffe ich vergaloppiere mich nicht schon wieder.

Is da was gesetzt sach was, is nix gesetzt red erst recht mit mir! "Du Hammel hasch a Duppe in de erscht (zwett) Grupp vergess :)

Re: [Makro] Status Radiobuttons

Verfasst: Mi, 30.03.2011 22:15
von DPunch
Aloha

Ein Code der Art

Code: Alles auswählen

	Dim aGroup()
	oForm.getgroupbyname("X",aGroup)
	bSelected = False
	For i = LBound(aGroup) to UBound(aGroup)
		thisElement = aGroup(i)
		If thisElement.ServiceName = "stardiv.one.form.component.RadioButton" Then
			If thisElement.State Then
				bSelected = True
				sInfo = thisElement.Name & Chr(13) & thisElement.Label
				Exit For
			End If
		End If
	Next i
	If bSelected Then
		MsgBox sInfo
	Else
		MsgBox "Nichts ausgewählt"
	End If
sollte Dein Problem wohl lösen.

Re: [Makro] Status Radiobuttons

Verfasst: Mi, 30.03.2011 23:12
von opiWahn
Hallo DPunch,

habs getestet, funktioniert super! :D
Würds ein Danke Button geben, würd ich den jetzt bestimmt mehr als einaml drücken.
Deshalb auf diesem Weg - Danke!

Grüße
opiWahn