Zei unabhänige Button-Reihen

Anfängerfragen zum Programmieren mit PureBasic.
Benutzeravatar
Eckhard.S
Beiträge: 136
Registriert: 22.07.2006 17:19
Wohnort: Meschede/Sauerland

Zei unabhänige Button-Reihen

Beitrag 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
Viele Grüße aus dem Sauerland
Eckhard

PureBasic 4.0 Vollversion, WinXP
Make a better world :D
Benutzeravatar
ts-soft
Beiträge: 22292
Registriert: 08.09.2004 00:57
Computerausstattung: Mainboard: MSI 970A-G43
CPU: AMD FX-6300 Six-Core Processor
GraKa: GeForce GTX 750 Ti, 2 GB
Memory: 16 GB DDR3-1600 - Dual Channel
Wohnort: Berlin

Beitrag 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!
PureBasic 5.73 LTS | SpiderBasic 2.30 | Windows 10 Pro (x64) | Linux Mint 20.1 (x64)
Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.
Bild
Benutzeravatar
edel
Beiträge: 3667
Registriert: 28.07.2005 12:39
Computerausstattung: GameBoy
Kontaktdaten:

Beitrag 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
Benutzeravatar
Eckhard.S
Beiträge: 136
Registriert: 22.07.2006 17:19
Wohnort: Meschede/Sauerland

Beitrag 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)
Viele Grüße aus dem Sauerland
Eckhard

PureBasic 4.0 Vollversion, WinXP
Make a better world :D
Benutzeravatar
Eckhard.S
Beiträge: 136
Registriert: 22.07.2006 17:19
Wohnort: Meschede/Sauerland

Beitrag 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
Viele Grüße aus dem Sauerland
Eckhard

PureBasic 4.0 Vollversion, WinXP
Make a better world :D
Antworten