Seite 1 von 1

Zei unabhänige Button-Reihen

Verfasst: 24.08.2006 19:59
von Eckhard.S
Ich könnte gut zwei unabhängige Buttonreihen gebrauchen. Habe folgenden Codearchiv-Code mit Button 1 bis 3 um die Buttons 11 - 13 erweitert.

Kann man daraus zwei Sets machen, also Button 1 2 3 sind umschaltbar und unabhängig davon Button 11, 12 und 13 ?

Code: Alles auswählen

; English forum: http://purebasic.myforums.net/viewtopic.php?t=8586&highlight=
; Author: ebs
; Date: 03. December 2003

If OpenWindow(0,0,0,222,200,"ButtonGadgets",#PB_Window_SystemMenu|#PB_Window_ScreenCentered) And CreateGadgetList(WindowID(0)) 
  ButtonGadget(1, 10, 10, 60, 20, "Button1", #PB_Button_Toggle) 
  ButtonGadget(2, 10, 40, 60, 20, "Button2", #PB_Button_Toggle) 
  ButtonGadget(3, 10, 70, 60, 20, "Button3", #PB_Button_Toggle) 
   
  ButtonGadget(11, 100, 10, 60, 20, "Button11", #PB_Button_Toggle) 
  ButtonGadget(12, 100, 40, 60, 20, "Button12", #PB_Button_Toggle) 
  ButtonGadget(13, 100, 70, 60, 20, "Button13", #PB_Button_Toggle)  
   
   
  SetGadgetState(1,#True) ; Push first button in. 
  cur=1 ; Remember which gadget is currently pushed in. 
  Repeat 
    ev=WaitWindowEvent() 
    If ev=#PB_Event_Gadget 
      id = EventGadget() 
      If id <> cur  ; <-- CHANGED IF STATEMENT HERE 
        SetGadgetState(cur,#False) ; Push old button "out". 
        ; REMOVED STATEMENT HERE 
        cur=id ; Remember new button. 
    ;    Debug cur
      EndIf 
    EndIf 
  Until ev=#PB_Event_CloseWindow 
EndIf
; ExecutableFormat=Windows
; FirstLine=1
; EnableXP
; EOF

Verfasst: 24.08.2006 20:12
von ts-soft
Du solltest Deine Gadgets durchgehend von 0 nummerieren (Konstanten sind zu empfehlen) ansonsten wird hier Speicher verschwendet.

Deine eigentliche Frage erfordert min. logisches Denken, ich denke das
solltest Du selber lösen können. Am einfachsten die Gruppe enttoggeln und
den gerade gedrückten toggeln. Select Case wäre hier eine gute Wahl!

Verfasst: 24.08.2006 20:18
von edel

Code: Alles auswählen

  Enumeration
    #Window
  EndEnumeration
  
  Enumeration
    #btn_1
    #btn_2
    #btn_3
    #btn_4
    #btn_5
    #btn_6
  EndEnumeration
  
  hwnd = OpenWindow(#Window,0,0,222,200,"") 
  
  CreateGadgetList(hwnd)
  
  ButtonGadget(#btn_1, 10, 10, 60, 20, "Button1", #PB_Button_Toggle)
  ButtonGadget(#btn_2, 10, 40, 60, 20, "Button2", #PB_Button_Toggle)
  ButtonGadget(#btn_3, 10, 70, 60, 20, "Button3", #PB_Button_Toggle)
  
  ButtonGadget(#btn_4, 100, 10, 60, 20, "Button4", #PB_Button_Toggle)
  ButtonGadget(#btn_5, 100, 40, 60, 20, "Button5", #PB_Button_Toggle)
  ButtonGadget(#btn_6, 100, 70, 60, 20, "Button6", #PB_Button_Toggle) 
  
  set1 = 0
  set2 = 3
  
  SetGadgetState(set1,#True)
  SetGadgetState(set2,#True)
  
  Repeat
    ev=WaitWindowEvent()
    If ev=#PB_Event_Gadget
      id = EventGadget()
      
      Select id
        Case #btn_1,#btn_2,#btn_3 : 
          SetGadgetState(set1,#False)
          set1 = id
        Case #btn_4,#btn_5,#btn_6 : 
          SetGadgetState(set2,#False)
          set2 = id
      EndSelect 
      
    EndIf
    
  Until ev = #WM_CLOSE

Verfasst: 24.08.2006 20:36
von Eckhard.S
Hei-der-dei! Danke Edel! Ohne deinen Beispielcode, wäre ich hier aufgeschmissen gewesen. :allright:

@ts-soft
Danke für das Zutrauen an den Anfänger. :shock: Hätte ich aber alleine noch nicht geschafft, da ich die Logik noch nicht kannte. Ich denke, jetzt habe ichs kapiert, wie man mit Case die Buttens zusammenpackt.
8)

Verfasst: 24.08.2006 21:25
von Eckhard.S
Designfragen:

1. Die Hintergrundfarbe das aktiven Buttons ist so komisch gerastert. Kann man da ein anderes Grau wählen?

2. Der zuletzt angeklickte Button hat innen noch einen grauen zusätzlichen Rand. Kann man den abschalten?

3. Wenn man zweimal denselben Button drückt, entaktiviert sich das Bild wieder.

----
Nicht, dass ich nicht gesucht hätte. Ich habe sogar einen Code von 3.94 auf 4.00 umgewandelt (SouceConverter :-))) )

Bunte Buttons sind auch nicht schlecht, lässt sich hier beim aktivierten Button denn der graue Rand abschalten und dafür die Farbe ändern?

Code: Alles auswählen

; transformed to PB 4.0 by ECS

; English forum: http://purebasic.myforums.net/viewtopic.php?t=2369
; Author: MikeB
; Date: 05. September 2003

Procedure.l MyImage(ImageNumber.l, Width.l, Height.l, Color.l,a$,x,y)
  ImageID.l = CreateImage(ImageNumber, Width, Height)
  StartDrawing(ImageOutput(ImageNumber))
  DrawingMode(1)
  Box(0, 0, Width, Height, Color)
  FrontColor(RGB(0,0,0))
  DrawText(x,y,a$)
  StopDrawing()
  ProcedureReturn ImageID
EndProcedure


mywin=OpenWindow(0,0,0,218,68,"Coloured buttons",#PB_Window_SystemMenu|#PB_Window_ScreenCentered)
If mywin
  wbrush=CreateSolidBrush_(RGB(0,0,255))
  SetClassLong_(mywin, #GCL_HBRBACKGROUND, wbrush)
  If CreateGadgetList(mywin)
    hGadget=ContainerGadget (0,10,10,198,48,#PB_Container_Raised)
    hBrush = CreateSolidBrush_(RGB(255,255,0))
    SetClassLong_(hGadget, #GCL_HBRBACKGROUND, hBrush)
    ;
    ButtonImageGadget(1, 10, 8, 80, 24,MyImage(1,80,24,RGB(255,155,0),"Button 1",13,4))
    ;
    ButtonImageGadget(2, 100, 8, 80, 24,MyImage(2,80,24,RGB(255,155,0),"Button 2",13,4))
    CloseGadgetList()
  EndIf
  Repeat : Until WaitWindowEvent()=#PB_Event_CloseWindow
EndIf

; ExecutableFormat=
; FirstLine=1
; EOF