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.
durch
ersetze. Grund: LBound(aOpt1) ist 0
Wenn Du dann im folgenden
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:
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
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

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
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!
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