OptionGadget - Ganze Gruppe deaktivieren ?

Anfängerfragen zum Programmieren mit PureBasic.
Peter aus der Nordheide
Beiträge: 34
Registriert: 18.05.2005 14:59

OptionGadget - Ganze Gruppe deaktivieren ?

Beitrag von Peter aus der Nordheide »

Hallo zusammen,

ich habe wieder einmal ein kleines Problemchen.

Ich habe eine Gruppe OptionGadgets, die nach Anwahl eines Gadget, als ganze Gruppe für weitere Auswahl gesperrt, also deaktiviert werden soll.

Code: Alles auswählen


Repeat

    EventID = WaitWindowEvent()
     
    Select EventID
     
        Case #PB_Event_Gadget
        
        Select EventGadgetID()
         
           Case 2 : K = 2 : Debug "Option 2   K = 2   ausgewählt" :           
           DisableGadget(3,1): 
           DisableGadget(4,1): 
           DisableGadget(5,1): 
           DisableGadget(6,1)

           Case 3 : K = 3 : Debug "Option 3   K = 3   ausgewählt" : 
           DisableGadget(2,1): 
           DisableGadget(4,1): 
           DisableGadget(5,1): 
           DisableGadget(6,1)

           Case 4 : K = 4 : Debug "Option 4   K = 4   ausgewählt"   : 
           DisableGadget(2,1): 
           DisableGadget(3,1): 
           DisableGadget(5,1): 
           DisableGadget(6,1)

           Case 5 : K = 5 : Debug "Option 5   K = 5   ausgewählt"   : 
           DisableGadget(2,1): 
           DisableGadget(3,1): 
           DisableGadget(4,1): 
           DisableGadget(6,1)

           Case 6 : K = 6 : Debug "Option 6   K = 6   ausgewählt"   : 
           DisableGadget(2,1): 
           DisableGadget(3,1): 
           DisableGadget(4,1): 
           DisableGadget(5,1)
                   
        EndSelect
                  
    EndSelect

Until EventID=#PB_Event_CloseWindow

Nun ist es ja ziehmlich mühsam, alle Gadgets wie oben einzeln anzusprechen.

Gibt es also einen "Sammelbefehl", der bis auf den angewählten, alle anderen in dieser Gruppe deaktiviert ?

Für Eure Hilfe schon mal Danke in voraus

Gruß Peter
Benutzeravatar
FGK
Beiträge: 249
Registriert: 09.01.2005 14:02
Computerausstattung: i5-4430 CPU / 8GB RAM
GeForce GT630
Windows 10 Home / 64-bit
Wohnort: Augsburg

Beitrag von FGK »

Hallo Peter,

hast du dir das so vorgestellt?

Code: Alles auswählen


If OpenWindow(0, 100, 200, 300,250,#PB_Window_SystemMenu|#PB_Window_MinimizeGadget|#PB_Window_MaximizeGadget|#PB_Window_WindowCentered , "PureBasic Window")
  
  If CreateGadgetList(WindowID())
    ButtonGadget(1, 200,180 ,50,20,"Reset")
    OptionGadget(2, 55, 40, 50, 25, "2")
    OptionGadget(3, 55, 70, 50, 25, "3")
    OptionGadget(4, 55, 100, 50, 25, "4")
    OptionGadget(5, 55, 130, 50, 25, "5")
    OptionGadget(6, 55, 160, 50, 25, "6")
    Frame3DGadget(99,20,20,260,200,"Options")
  EndIf
  
  Repeat 
  
  EventID = WaitWindowEvent() 
  
  Select EventID 
    
    Case #PB_Event_Gadget 
      
      EventID=EventGadgetID()
      If EventID>1 And EventID<7
        K=EventID
        Debug "Option " +Str(K)+ " ausgewählt"
        For I = 2 To 6        ;Deine GadgetId's
          If I<>K 
            DisableGadget(I,1)
          EndIf
        Next I  
      EndIf
      Select EventID  
        Case 1
          For I= 2 To 6
            DisableGadget(I,0) 
          Next I
      EndSelect 
      
  EndSelect 
  
Until EventID=#PB_Event_CloseWindow 

EndIf 

Gruß

FGK
Peter aus der Nordheide
Beiträge: 34
Registriert: 18.05.2005 14:59

Beitrag von Peter aus der Nordheide »

Hallo FGK,

ja genau, so elegant sollte es sein.

Zumal die zweite Gruppe 43 Optiongadgets enthält !

Insgeheim hatte ich natürlich gehofft, daß es einen "Gruppenbefehl" gibt, mit dem man Gruppe 1, Gruppe 2 usw. ansprechen kann.

Habe jetzt halt die zweite Gruppe mit ElseIf abgearbeitet, um die beiden Gruppen getrennt rücksetzen zu können.

Vielen Dank für Deine Hilfe.

Und einen schönen Sonntagabend

Gruß Peter
Benutzeravatar
NicTheQuick
Ein Admin
Beiträge: 8809
Registriert: 29.08.2004 20:20
Computerausstattung: Ryzen 7 5800X, 64 GB DDR4-3200
Ubuntu 24.04.2 LTS
GeForce RTX 3080 Ti
Wohnort: Saarbrücken

Beitrag von NicTheQuick »

Guck dir mal das ContainerGadget an.
Peter aus der Nordheide
Beiträge: 34
Registriert: 18.05.2005 14:59

Beitrag von Peter aus der Nordheide »

Hallo NicTheQuick,

ohne Codebeispiel war das natürlich didaktisch top, wurde ich doch so gezwungen, daß ContainerGadget selbst zu erforschen. :roll:

In der Tat läßt sich damit in manchen Situationen einiges vereinfachen.

Als Mangel in dieser Aufgabenstellung sehe ich allerdings an, daß die im Container zusammengefaßten Optiongadgets zwar mit einem Befehl deaktiviert werden aber hell bleiben.

Der visuelle Hinweis für den Benutzer auf die Eingabesperre durch die Grauschaltung in der Lösung von FGK, war allerdings erwünscht.

Vielen Dank jedenfalls für Deinen Hinweis auf den Container, habe ich doch so wieder ein Stückchen von PureBasic erforscht.

Gruß Peter
Benutzeravatar
FGK
Beiträge: 249
Registriert: 09.01.2005 14:02
Computerausstattung: i5-4430 CPU / 8GB RAM
GeForce GT630
Windows 10 Home / 64-bit
Wohnort: Augsburg

Beitrag von FGK »

Hallo Peter,

ich hab mir gerade noch mal deine Antwort auf mein Posting durchgelesen. Nun ich will dir ja nicht zu nahe treten - immerhin ist es ja dein SoftwareProjekt - aber 43! :o Optionsgadget die alle ausgeblendet werden wenn eines davon ausgewählt wird? Solltest dir noch andere Möglichkeiten durch den Kopf gehen lassen. Wenn du etwas mehr darüber erzählst könnte dir hier aus dem Board einer ne "elegantere" Lösung vorschlagen. Aber ist nur ein Vorschlag <)


Gruß

FGK
Peter aus der Nordheide
Beiträge: 34
Registriert: 18.05.2005 14:59

Beitrag von Peter aus der Nordheide »

Hallo FGK,

schmeichelt mir unwahrscheinlich, daß Du meine Programmierversuche und das Erlernen von PureBasic als - SoftwareProjekt - bezeichnest.

Nun, es soll eine Erweiterung der bekannten "Vollsystemgeneratoren 6 aus 49" werden, zu einem allgemeinen k aus n Permutationsgenerator.

k habe ich erstmal auf 2 bis 12 begrenzt, n ergibt sich aus 7 bis 49.

Und da ich den Wechsel Maus/Tastatur zu Eingaben über die Tastatur gräßlich finde, habe ich mich für die zwei Gruppen (k und n) als Optiongadgets entschieden :

Zwei Klicks und ich habe mein gewünschtes System, z.B. 8 aus 24 ausgewählt.

Soweit wie ich es bis jetzt sehe, gäbe es noch die Auswahl über SpinGadget oder ein ComboBoxGadget, aber da habe ich immer zwei Aktivitäten - Auswählen und Klicken - und die Fummelei mit den Auf/Ab-Pfeilen.

Nach meinem Schönheitsempfinden, die zweitbeste Lösung.

Mit den OptionGadgets sehe ich zusätzlich auch auf den ersten Blick, in welchen Grenzen ich Systeme generieren kann.

OK, wenn ich dann an eine Erweiterung für die neue Lotterie KENO denke, wird es mit 70 Zahlen schon ein wenig eng. :roll:

Aber für andere Ideen und Tricks bin ich natürlich immer offen.

Zur Zeit muß ich aber erstmal einen Fehler finden. Bei der Ereignisabfrage des n-Feldes springt er bei n=12 (ID 16) mit Break immer raus, obwohl das nur bei "Fertig" (ID 99) stattfinden soll.

Wenn ich damit nicht weiterkomme, bin ich wieder hier. :allright:

Gruß Peter
Benutzeravatar
Spirit
Beiträge: 174
Registriert: 13.04.2005 19:09

Beitrag von Spirit »

Peter aus der Nordheide hat geschrieben:... gäbe es noch die Auswahl über SpinGadget oder ein ComboBoxGadget, aber da habe ich immer zwei Aktivitäten - Auswählen und Klicken - und die Fummelei mit den Auf/Ab-Pfeilen.
Du könntest auch ein ListViewGadget benutzen. Wenn es groß genug ist, musst du nicht scrollen und es ist außerdem (meiner Meinung nach) leichter zu handhaben als 43 OptionGadgets.
Benutzeravatar
NicTheQuick
Ein Admin
Beiträge: 8809
Registriert: 29.08.2004 20:20
Computerausstattung: Ryzen 7 5800X, 64 GB DDR4-3200
Ubuntu 24.04.2 LTS
GeForce RTX 3080 Ti
Wohnort: Saarbrücken

Beitrag von NicTheQuick »

Nimm doch ein ListViewGadget() dafür. Da kannst du auch direkt mit Tab wechseln.

Code: Alles auswählen

#Height = 565
#Width = 50

OpenWindow(0, 0, 0, #Width + 100, #Height, #PB_Window_ScreenCentered | #PB_Window_SystemMenu, "ComboBoxGadget()")
CreateGadgetList(WindowID(0))

ListViewGadget(1,   0, 0, #Width / 2, #Height)
For k.l = 2 To 12
  AddGadgetItem(1, -1, Str(k))
Next
ListViewGadget(2, #Width / 2, 0, #Width / 2, #Height)
For n.l = 7 To 49
  AddGadgetItem(2, -1, Str(n))
Next

TextGadget(3, #Width + 5, 5, 90, 18, "k = ")
TextGadget(4, #Width + 5, 28, 90, 18, "n = ")

ActivateGadget(1)

Repeat
  Select WaitWindowEvent()
    Case #PB_EventCloseWindow
      Break
    
    Case #PB_EventGadget
      Select EventGadgetID()
        Case 1 : SetGadgetText(3, "k = " + GetGadgetText(1))
          
        Case 2 : SetGadgetText(4, "n = " + GetGadgetText(2))
      EndSelect
  EndSelect
ForEver
CloseWindow(0)
Ich verstehe aber sowieso nicht so ganz genau wie du das designen willst.
Peter aus der Nordheide
Beiträge: 34
Registriert: 18.05.2005 14:59

Beitrag von Peter aus der Nordheide »

Hallo Spirit,

danke für Deinen Tip mit dem ListViewGadget.


Hallo NicTheQuick,

auch Dir Danke für den Hinweis mit dem ListViewGadget.

Und durch den mitgelieferten Code konnte ich auch gleich die Wirkung ausprobieren.

Das Du allerdings einen alten Mann auf den falschen Acker schickst, indem Du in der Fensterüberschrift ComboBoxGadget schreibst, find ich toll.

Auf diese Weise hast Du es wieder geschafft, daß ich mich mit beiden Befehlen beschäftigt habe.

Wieder ein Stück von PureBasic gelernt (und verinnerlicht ?).

Das ListViewGadget hat auch was für sich. Ich kann sowohl mit der Maus, als auch mit der Tastatur (TAB und PFEILE) auswählen.

Na, mal sehen, was ich dann letzendlich nehme.
Ich verstehe aber sowieso nicht so ganz genau wie du das designen willst.
Meinst Du das Programmdesign oder das Fensterdesign ?

Gruß Peter
Antworten