Seite 1 von 2

Mehrere '#Gadget' Parameter in Schleife änderbar?

Verfasst: 16.06.2009 21:21
von AddMe
Hallo Zusammen,

leider kann ich nichts in der Hilfe oder hier im Board zu folgender Frage finden:

Wie kann ich, für mehrere TextGadgets bzw. StringGadgets, die Hintergrundfarbe ändern?

Folgenden Code benutze ich für das Ändern:

Code: Alles auswählen

SetGadgetColor(#TxtGad07, #PB_Gadget_BackColor, RGB($99,$33,$33))
Nun habe ich mehrere TextGadgets.
Wie kann ich die in einer Schleife hintereinander ändern, ohne, dass
ich den Befehl x- mal schreiben muss.

Ich weis nicht wie ich den '#Gadget' Parameter in einer Schleife ersetzen kann für das nächste Gadget.

Kann man auch herausbekommen, welche TextGadgets man in einem Fenster hat, wenn man mehrere Fenster benutzt?

Ich hoffe ich konnte es verständlich erklären, was ich meine.

Wäre toll, wenn mir jemand helfen könnte.

Vielen Dank.

Verfasst: 16.06.2009 21:55
von jojo1541
Mit konstanten dürfte es eher schwer gehen.
Ein vorschlag wäre, die Textgadgets in der Enumeration alle hintereinander zu setzen und dann via

Code: Alles auswählen

For x = (Dein erstes Textgadget) to (dein letztes Textgadget)
  SetGadgetColor(x, #PB_Gadget_BackColor, RGB($99,$33,$33))
Next
zu ändern. (Eine Enumeration ist eine Aufzählung der Konstanten, die bei Null beginnt.)

Code: Alles auswählen

Enumeration
  #tach   ; ist 0
  #hallo  ; ist 1
  #hi     ; ist 2
  #servus ; ist 3
EndEnumeration
Ich hoffe ich konnte dir helfen. :wink:

Edit: Achso zu deiner zweite Frage: Nativ gibt es in PB keinen Befehl dafür, aber eventuell einen API-Befehl.(Da musst du aber leider jemand anders fragen, damit kenn ich mich nich so aus.) Aber durch den Quellcode weißt du doch eigentlich sowieso, wie viele Textgadgets du auf ein Window pflanzt.

Verfasst: 16.06.2009 22:01
von AddMe
Hallo volti,
volti hat geschrieben:Ich hoffe ich konnte dir helfen. :wink:
vielen Dank für Deine Antwort.

Hat auf Anhieb geklappt. :allright:

Echt klasse. Danke Dir.

Gruß
Michael

Verfasst: 16.06.2009 22:11
von KeyKon
Eine ähnliche Möglichkeit, die ich gerne Verwende ist folgende:

Code: Alles auswählen

Enumeration
  #GadMin
  
  #Gad1
  #Gad2
  #Gad3
  
  #GadMax
EndEnumeration

For x = #GadMin+1 to #GadMax-1
  ;kot
Next
Der Vorteil is das man noch Gadgets logisch geordnet hinzufügen kann ohne an den Schleifen rumzuschrauben, der kleine Nachteil is das man je zwei "GadgetSlots" verschwendet (was wohl nich so ins Gewicht fallen dürfte)

Verfasst: 16.06.2009 22:38
von Kaeru Gaman
noch eine möglichkeit wäre, die Gadgets Dynamisch zu erzeugen...

Code: Alles auswählen

Dim ButtonRow.i(Anz)
For n=0 to Anz
  ButtonRow(n) = ButtonGadget( #PB_Any, 16, 16 + 32 * n, 120, 24, "Button Nr. " + Str(n) )
Next

Verfasst: 17.06.2009 07:43
von AddMe
Hallo KeyKon,
hallo Kaeru Gaman,

vielen Dank für Eure Antworten. :allright:

Werde auch eure Möglichkeiten ausprobieren.

Gruß
Michael

Verfasst: 17.06.2009 08:51
von Shardik
KeyKon hat geschrieben:Enumeration
#GadMin

#Gad1
#Gad2
#Gad3

#GadMax
EndEnumeration

For x = #GadMin+1 to #GadMax-1
;kot
Next
KeyKon hat geschrieben:..., der kleine Nachteil is das man je zwei "GadgetSlots" verschwendet...
#GadMin und #GadMax lassen sich auch ganz einsparen, wenn man hinter EndNumeration die Anzahl Einträge über die PB-Konstante #PB_Compiler_EnumerationValue ermittelt: :wink:

Code: Alles auswählen

Enumeration
  #Gad1
  #Gad2
  #Gad3
EndEnumeration

#NumTextGadgets = #PB_Compiler_EnumerationValue

For x = 0 to #NumTextGadgets - 1
  ; Code
Next x

Verfasst: 17.06.2009 09:38
von NicTheQuick
Ist das dann nicht das selbe wie das folgende?

Code: Alles auswählen

Enumeration
  #Gad1
  #Gad2
  #Gad3
  #NumTextGadgets
EndEnumeration

For x = 0 to #NumTextGadgets - 1
  ; Code
Next x 

Verfasst: 17.06.2009 10:20
von Shardik
NicTheQuick hat geschrieben:Ist das dann nicht das selbe wie das folgende?
So könnte man es natürlich auch machen. Ich finde meine Methode allerdings insofern besser, daß man später nachträglich Elemente der Enumeration hinzufügen kann, ohne daran zu denken, daß #NumTextGadgets am Ende stehen muß. Außerdem ist #NumTextGadgets entweder keine ID für ein reales TextGadget innerhalb der Enumeration oder ein unlogischer Name für ein vorhandenes TextGadget...
Bei meiner Methode muß man allerdings beachten, daß die Zuweisung für #NumTextGadgets immer hinter EndEnumeration stehen bleibt und nicht noch zusätzliche Enumerationen dazwischen eingefügt werden dürfen.

Verfasst: 17.06.2009 13:38
von hjbremer
Vielleicht hilft dir das ! Diese Version setzt voraus das alle Windows und Gadgets eine Nummer via Enumeration erhalten haben.

GetParent ermittelt die WindowID, zu dem ein Gadget gehört. Der Rest steht in der PB Hilfe.

Code: Alles auswählen

Enumeration
 #win1: #win2
 #but1: #but2: #but3: #but4
 #txt1: #txt2: #txt3: #txt4
 #txt5: #txt6: #txt7: #txt8
EndEnumeration

Procedure SetGadgetBackColor(window, gadgettyp, backcolor)
hwnd = WindowID(window)

For j = 0 To #PB_Compiler_EnumerationValue 
    If IsGadget(j)
       If GetParent_(GadgetID(j)) = hwnd  ;GetParent ermittelt Fenster
          If GadgetType(j) = gadgettyp
             SetGadgetColor(j, #PB_Gadget_BackColor, backcolor)
          EndIf
       EndIf
    EndIf
Next

EndProcedure

flag = #PB_Window_SystemMenu
OpenWindow(#win1,10,200,400,200,"Fenster 1",flag) 
       
       ButtonGadget(#but1,5, 5,199,24,"Fenster 1 auf rot")
       ButtonGadget(#but2,5,35,199,24,"Fenster 1 auf blau")
       ButtonGadget(#but3,5,65,199,24,"Fenster 2 auf grau")
       ButtonGadget(#but4,5,95,199,24,"Fenster 2 auf grün")

       TextGadget(#txt1,  5,165,44,24,"Text")
       TextGadget(#txt4, 55,165,44,24,"Murks")
       TextGadget(#txt6,105,165,44,24,"Murks")
       TextGadget(#txt7,155,165,44,24,"Murks")

flag = #PB_Window_SystemMenu
OpenWindow(#win2,450,200,400,200,"Fenster 2",flag) 
       
       TextGadget(#txt2,5,165,44,24,"Text")
       TextGadget(#txt3,55,165,44,24,"Murks")
       TextGadget(#txt5,105,165,44,24,"Murks")
       TextGadget(#txt8,155,165,44,24,"Murks")
       
Repeat: event = WaitWindowEvent() : ;Debug event
                
     If Event = #PB_Event_Gadget Or Event = #PB_Event_Menu 
              
        welcherButton = EventGadget()  
                      
        Select welcherButton
          Case #but1: SetGadgetBackColor(#win1,#PB_GadgetType_Text,#Red)
          Case #but2: SetGadgetBackColor(#win1,#PB_GadgetType_Text,#Blue)
          Case #but3: SetGadgetBackColor(#win2,#PB_GadgetType_Text,#Gray)
          Case #but4: SetGadgetBackColor(#win2,#PB_GadgetType_Text,#Green)
        EndSelect
                
     EndIf

Until event = #PB_Event_CloseWindow 
End