hatte mal so ein ähnliches Projekt, wo ich viele Gadgets mit Hilfe eines Arrays erstellt habe und über den Array-Index auf die Gadgets zugreifen konnte und gleichzeitig das selbe Array für die Inhalte nutzen wollte. Hab mal das nötigste zusammenkopiert und mit paar Prozeduren zum Testen veranschaulicht. Hier komme ich mit einen einzigen Array aus. Du kannst die Gruppen natürlich auch splitten. Ist sofort lauffähig:
Code: Alles auswählen
;-deklarationen
Global Dim SensorF.s(92) ;15 + 28 + 50 = 93 Gadgets (0-92)
;-procs
Procedure test_neue_werte()
Protected.i l
;ich beleg das Array hier mit irgendwelchen werten, um die neubefüllung zu demonstrieren
For l = 0 To 14 ;erste gruppe // werte starten immer wieder bei 1
SensorF(l) = Str(l+1)
Next l
For l = 15 To 42 ;zweite gruppe
SensorF(l) = Str(l-14)
Next l
For l = 43 To 92 ;dritte gruppe
SensorF(l) = Str(l-42)
Next l
EndProcedure
Procedure akt_txt()
;ändert einen wert im zielgadget oder alle werte
Protected.i l
If GetGadgetText(100) = "#" ;wenn alle werte gemäß akt. inhalt von SensorF() neu gesetzt werden sollen
For l = 0 To 92 ;alle 93 texte neu belegen
SetGadgetText(l,SensorF(l))
Next l
Else ;wenn gezielt ein text geändert werden soll
SetGadgetText(Val(GetGadgetText(100)),GetGadgetText(101)) ;stringadgets auslesen und in textgadget eintragen
EndIf
EndProcedure
Procedure bau_textgadgets()
Protected.i x,y,l,f
For l = 0 To 92 ;der index des arrayelements entspricht der gadged-nr.
Select l ;gadget-nr. überprüfen, und die startpositionen festlegen
Case 0 ;spalte 1 //15 texte
x=5
y=5
f=$09D6DF ;gelb
Case 15 ;spalte 2 //28 texte
x=60
Y=5
f= $ffffff ;weiß
Case 43 ;spalte 3 //25 texte
x=115
y=5
f=$15DF09 ;grün
Case 68 ;spalte 4 //25 texte
x=170
y=5
f=$15DF09 ;grün
EndSelect
SensorF(l)="00" ;inhalt im array gleich mit belegen // l ist arrayindex und #gadgetnummer
TextGadget(l, x,y ,50,25, SensorF(l))
SetGadgetColor(l, #PB_Gadget_BackColor, $EC090C) ;hintergrund blau
SetGadgetColor(l, #PB_Gadget_FrontColor, f) ;schrift gemäß gruppe in selectauswahl
Y+30 ;startposition für nächste zeile
Next l
EndProcedure
Procedure bau_fensterlemente()
;menü-shurtcuts
AddKeyboardShortcut(0,#PB_Shortcut_Return,13) ;entertaste aktivieren und eventmenu 13 zuweisen
;nur zum testen und probieren:
;texteingaben #100, #101
StringGadget(100, 300,5, 40,25,"") ;eingabe für zielgadget-nr., die geändert werden soll
StringGadget(101, 345,5, 40,25,"") ;eingabe neuer Wert für zielgadget
GadgetToolTip(100,"Ziel-Textfeld, das geändert werden soll, mit '#' werden alle geändert")
GadgetToolTip(101,"Neuer Wert für das Zielgadget")
EndProcedure
;-hauptprog
OpenWindow(0, 0,0, 500, 850, "Gadget", #PB_Window_MinimizeGadget)
StickyWindow(0,#True) ;fenster fest im vordergrund
bau_textgadgets() ;gadgets #0 - #92 anlegen
bau_fensterlemente() ;zum testen
test_neue_werte() ;array zum testen neu belegen
;- ereignisschleife
Repeat
Select WaitWindowEvent() ;fensterereignis auswählen
Case #PB_Event_CloseWindow ;wenn x
Select EventWindow() ;im welchen fenster wurde x gedrückt?
Case 0 ;hauptfenster #0
Break ;aus schleife hüpfen und komplett beenden
Case 1 ;falls weiteres fenster
EndSelect ;welches fenster ge-ixt wurde
Case #PB_Event_Menu ;wenn menü
Select EventMenu() ;auswahl, welches item
Case 13 ;wenn ***ENTER*** gedrückt
akt_txt() ;textgadget aktualiseren
EndSelect
EndSelect ;welches ereignis
ForEver ;
End