Radio Buttons "getrennt"

Anfängerfragen zum Programmieren mit PureBasic.
Benutzeravatar
gekkonier
Beiträge: 314
Registriert: 20.04.2007 09:06
Wohnort: Wien

Radio Buttons "getrennt"

Beitrag 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
Benutzeravatar
jear
Beiträge: 288
Registriert: 17.10.2004 01:59
Wohnort: Ammerland

Beitrag 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.
Man ist nie zu alt zum lernen, auch wenn man dabei manchmal alt aussieht!
Benutzeravatar
gekkonier
Beiträge: 314
Registriert: 20.04.2007 09:06
Wohnort: Wien

Beitrag von gekkonier »

Danke
marco2007
Beiträge: 906
Registriert: 26.10.2006 13:19
Kontaktdaten:

Beitrag 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 
Windows 11 - PB 6.03 x64
_________________________________
Benutzeravatar
Regenduft
Beiträge: 574
Registriert: 25.03.2008 15:07
Wohnort: THE LÄÄÄND!

Beitrag 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?
PureBasic 5.73 LTE x86/x64 | Windows 7 (x64)
marco2007
Beiträge: 906
Registriert: 26.10.2006 13:19
Kontaktdaten:

Beitrag 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,
:allright:
Windows 11 - PB 6.03 x64
_________________________________
Benutzeravatar
HeX0R
Beiträge: 3040
Registriert: 10.09.2004 09:59
Computerausstattung: AMD Ryzen 7 5800X
96Gig Ram
NVIDIA GEFORCE RTX 3060TI/8Gig
Win11 64Bit
G19 Tastatur
2x 24" + 1x27" Monitore
Glorious O Wireless Maus
PB 3.x-PB 6.x
Oculus Quest 2 + 3
Kontaktdaten:

Beitrag von HeX0R »

Du kannst auch ein nicht sichtbares Textgadget zwischendrin erstellen:

Code: Alles auswählen

TextGadget(#PB_Any, 0, 0, 0, 0, "")
Benutzeravatar
Regenduft
Beiträge: 574
Registriert: 25.03.2008 15:07
Wohnort: THE LÄÄÄND!

Beitrag 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 :wink: ... 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. :lol:

Also: Wenn jemand eine noch bessere Idee hat, wäre ich erfreut!
PureBasic 5.73 LTE x86/x64 | Windows 7 (x64)
Benutzeravatar
Fluid Byte
Beiträge: 3110
Registriert: 27.09.2006 22:06
Wohnort: Berlin, Mitte

Beitrag 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).
Windows 10 Pro, 64-Bit / Outtakes | Derek
Benutzeravatar
Ligatur
Beiträge: 196
Registriert: 09.07.2006 00:41

Beitrag 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
Antworten