Seite 1 von 2
Radio Buttons "getrennt"
Verfasst: 30.04.2007 10:05
von gekkonier
Hi, ich möchte gerne, dass bei untenstehendem Code die Buttons A und die Buttons B "getrennt" sind. D.H. dass ich entweder A1 oder A2 UND B1 oder B2 auswählen kann.
Wie geht denn das?
Code: Alles auswählen
Enumeration
#Window_0
EndEnumeration
Enumeration
#Radio_0
#Radio_1
#Radio_2
#Radio_3
EndEnumeration
Procedure Open_Window_0()
If OpenWindow(#Window_0, 88, 182, 314, 56, "Radiobuttons", #PB_Window_SystemMenu | #PB_Window_SizeGadget | #PB_Window_TitleBar )
If CreateGadgetList(WindowID(#Window_0))
OptionGadget(#Radio_0, 10, 10, 150, 20, "Radio A 1")
OptionGadget(#Radio_1, 10, 30, 150, 20, "Radio A 2")
OptionGadget(#Radio_2, 160, 10, 150, 20, "Radio B 1")
OptionGadget(#Radio_3, 160, 30, 150, 20, "Radio B 2")
EndIf
EndIf
EndProcedure
Open_Window_0()
Repeat
Event = WaitWindowEvent()
WindowID = EventWindow()
GadgetID = EventGadget()
EventType = EventType()
If Event = #PB_Event_Gadget
If GadgetID = #Radio_0
ElseIf GadgetID = #Radio_1
ElseIf GadgetID = #Radio_2
ElseIf GadgetID = #Radio_3
EndIf
EndIf
Until Event = #PB_Event_CloseWindow
End
Verfasst: 30.04.2007 10:11
von jear
PB Hilfe hat geschrieben:Beim ersten Aufruf dieser Funktion wird eine Gruppe erstellt und alle folgenden Aufrufe von OptionGadget() fügen dieser Gruppe ein Gadget hinzu. Um die Gruppe abzuschließen, rufen Sie einfach einen anderen Gadgettyp auf. Diese Art von Gadgets sind sehr nützlich, da zur gleichen Zeit immer nur ein Gadget der Gruppe selektiert sein kann.
Verfasst: 30.04.2007 13:18
von gekkonier
Danke
Verfasst: 03.05.2007 18:13
von marco2007
...das funkt auch:
Code: Alles auswählen
Procedure Open_Window_0()
If OpenWindow(#Window_0, 88, 182, 314, 56, "Radiobuttons", #PB_Window_SystemMenu | #PB_Window_SizeGadget | #PB_Window_TitleBar )
If CreateGadgetList(WindowID(#Window_0))
OptionGadget(#Radio_0, 10, 10, 150, 20, "Radio A 1")
OptionGadget(#Radio_1, 10, 30, 150, 20, "Radio A 2")
EndIf
If CreateGadgetList(WindowID(#Window_0))
OptionGadget(#Radio_2, 160, 10, 150, 20, "Radio B 1")
OptionGadget(#Radio_3, 160, 30, 150, 20, "Radio B 2")
EndIf
EndIf
EndProcedure
Verfasst: 06.10.2008 18:30
von Regenduft
Hi zusammen,
Vorwort: Ich weiß, dass seit der Eröffnung dieses Threads schon über ein Jahr vergangen ist. Ich wollte aber keinen neuen Thread aufmachen, wenn es schon einen zum Thema gibt.
Problem: Ich habe ein Fenster das NUR OptionGadgets enthält. Diese sollen in 2 Gruppen unterteilt werden (wie im obrigen Beispielcode). Inzwischen gibt es allerdings in PureBasic 4.30 (Beta 3) kein CreateGadgetList() mehr, was die Lösung von marco2006 unbrauchbar macht. Jemand eine Idee?
Verfasst: 06.10.2008 18:36
von marco2007
2 Containergadgets()?
schnell mal mit dem VD gemacht....
Code: Alles auswählen
ContainerGadget(#Container_0, 40, 50, 90, 60)
OptionGadget(#Radio_0, 19, 9, 60, 20, "")
OptionGadget(#Radio_1, 19, 39, 60, 10, "")
CloseGadgetList()
;-
ContainerGadget(#Container_1, 170, 50, 110, 60)
OptionGadget(#Radio_2, 19, 9, 60, 20, "")
OptionGadget(#Radio_3, 19, 39, 70, 10, "")
CloseGadgetList()
Regenduft
hat geschrieben:Ich wollte aber keinen neuen Thread aufmachen,

Verfasst: 06.10.2008 21:36
von HeX0R
Du kannst auch ein nicht sichtbares Textgadget zwischendrin erstellen:
Verfasst: 06.10.2008 22:36
von Regenduft
@ marco2006 & HeXOR: Danke für die 2 Lösungsideen!
Von der Funktion her sind beide einwandfrei brauchbar! ... Allerdings zwickt es mich immernoch ein wenig im Kleinhirn

... Es gibt doch sicher auch einen direkteren Weg einen "Absatz" zwischen die 2 OptionGadgets zu setzen.
PureBasic ist eine so gut durchdachte Programmiersprache (schwärm und schleim)!!! Das ist doch sicher nur (mal wieder) ein Problem der nicht 100%ig genauen Dokumentation! Da muss es doch eine einfache native Lösung ohne "rumtricksen" geben!
Soviel zum Thema deutsche Gründlichkeit und Ordnungswahn.
Also: Wenn jemand eine
noch bessere Idee hat, wäre ich erfreut!
Verfasst: 06.10.2008 23:10
von Fluid Byte
Regenduft hat geschrieben:Es gibt doch sicher auch einen direkteren Weg einen "Absatz" zwischen die 2 OptionGadgets zu setzen.
Nein. Kürzer als eine Zeile wird es nicht. Ist auch Unfug denn normalerweise werden RadioButton-Gruppen sowieso mit einem Frame3DGadet entsprechend gekennzeichnet (siehe Post von HeXOR).
Verfasst: 06.10.2008 23:13
von Ligatur
Wenn man bereit ist die Plattformunabhängigkeit aufzugeben und für Windows programmiert funktioniert auch
Code: Alles auswählen
SetWindowLong(GadgetID(Nr), #GWL_STYLE, GetWindowLong(GadgetID(NR), #GWL_STYLE) | #WS_GROUP)
bei den ersten Gadget das eine neue Gruppe beginnt.
Beispiel:
Code: Alles auswählen
OpenWindow(0, 0, 0, 640, 480, "OptionGroup", #PB_Window_SystemMenu)
OptionGadget(0, 5, 5, 80, 20, "Gruppe A 1")
OptionGadget(1, 5, 30, 80, 20, "Gruppe A 2")
OptionGadget(2, 5, 55, 80, 20, "Gruppe B 1")
SetWindowLong_(GadgetID(2), #GWL_STYLE, GetWindowLong_(GadgetID(2), #GWL_STYLE) | #WS_GROUP)
OptionGadget(3, 5, 80, 80, 20, "Gruppe B 2")
Repeat
Event = WaitWindowEvent()
Until Event = #PB_Event_CloseWindow