Also ist es blödsinn, bei jedem Durchlauf die Gadgets neu zu füllen.
Und PB bietet ja einen hübschen Timer ... also kann man es auch damit
lösen *gg*
Und für deine Tastatur gibs auch was in PB

Also das wäre mein Vorschlag

Code: Alles auswählen
; Konstanten definieren
#AnzahlRechnungen = 3
Enumeration
#Summand0Down
#Summand0Up
#Summand1Down
#Summand1Up
#Summand2Down
#Summand2Up
EndEnumeration
; ---------------------------
; Variablen definieren
Global Dim Zahl.d(#AnzahlRechnungen - 1) ;die gespeicherten Zahlen
Zahl(0) = 0
Zahl(1) = 0
Zahl(2) = 0
Global Dim Summand.d(#AnzahlRechnungen - 1) ;die zu addierende Zahl
Summand(0) = 10 ;Angaben in Zehntel!
Summand(1) = -1
Summand(2) = 8
;Gadgets des Fensters
Global Dim ZahlGadget(#AnzahlRechnungen - 1) ;StringGadget mit der Zahl
Global Dim SummandGadget(#AnzahlRechnungen - 1) ;SpinGadget mit dem Summanden
; ---------------------------
; Prozeduren
;aktualisiert die StringGadgets alle 100 ms
Procedure Ausgabe()
Protected i.l
Static Timer.l
If Timer = #False : Timer = ElapsedMilliseconds() - 100 : EndIf
If Timer + 100 <= ElapsedMilliseconds()
For i = 0 To #AnzahlRechnungen - 1
SetGadgetText(ZahlGadget(i) ,Str(Zahl(i)))
Next
Timer + 100 ; -> Timer = Timer + 100
;Hinweiß: in PB kann man in solchen Fällen das Gleichzeichen
;weg lassen. Somit sparrt man sich einwenig Schreibarbeit
EndIf
EndProcedure
; Addiert nach 75 ms zu jeder Zahl den Summanden
Procedure Berechnung()
Protected i.l
Static Timer.l
If Timer = #False : Timer = ElapsedMilliseconds() - 100 : EndIf
If Timer + 75 <= ElapsedMilliseconds()
For i = 0 To #AnzahlRechnungen - 1
Zahl(i) + Summand(i)
Next
Timer + 75
EndIf
EndProcedure
; ---------------------------
; Fenster Öffnen;
OpenWindow(0,350,150,200,200,"Zahlen")
CreateGadgetList(WindowID(0))
For i = 0 To #AnzahlRechnungen - 1
;erstellt zu jeder Zahl ein StringGadget
ZahlGadget(i) = StringGadget(#PB_Any, 10, 10 + i * 30, 50, 20, Str(Zahl(i)))
;und zu jedem Summanden ein SpinGadget
SummandGadget(i) = SpinGadget(#PB_Any, 60, 10 + i * 30, 50, 20, -1000, 10000)
;SpinGadgets müssen selber aktualisiert werden (siehe Hilfe)
;da die Summanden Zehntel anzeigen, muss eine Stelle nach dem
;komma angezeigt werden
SetGadgetState(SummandGadget(i), Summand(i))
SetGadgetText(SummandGadget(i), StrD(Summand(i)/10, 1))
Next
; ---------------------------
; hiermit kann man sich zu jeder Taste ein entsprechendes
; Menüereignis definieren (weiteres siehe Hilfe)
AddKeyboardShortcut(0, #PB_Shortcut_A, #Summand0Down)
AddKeyboardShortcut(0, #PB_Shortcut_S, #Summand0Up)
AddKeyboardShortcut(0, #PB_Shortcut_Left, #Summand1Down)
AddKeyboardShortcut(0, #PB_Shortcut_Right, #Summand1Up)
AddKeyboardShortcut(0, #PB_Shortcut_D, #Summand2Down)
AddKeyboardShortcut(0, #PB_Shortcut_F, #Summand2Up)
; ---------------------------
; Hauptschleife
Repeat
Select WaitWindowEvent(50) ;wartet maximal 50 ms auf ein Event
Case #PB_Event_CloseWindow
End
;wenn ein SpinGadget gedrückt wird, den Summanden aktualisieren
Case #PB_Event_Gadget
For i = 0 To #AnzahlRechnungen - 1
;vergleicht das Gadget, welches das Event ausgelöst hat
;mit allen vorhandenen SpinGadgets
If EventGadget() = SummandGadget(i)
;die Word-Variable ist nötig, da sonnst keine
;negativen Werte übermittelt werden können
;der Rückgabewert ist 'unsignet' (ohne Vorzeichen)
;wir wollen aber 'signet' (mit Vorzeichen), Variablen
;in PureBasic sind bis heute immer mit Vorzeichen, so
;wandelt PureBasic für uns den Rückgabewert richtig um.
State.w = GetGadgetState(SummandGadget(i))
Summand(i) = State
SetGadgetText(SummandGadget(i), StrD(Summand(i)/10, 1))
Break
EndIf
Next
;für die Tasten ist das Event-Handling von Menüs zu benutzten
;siehe Hilfe zu den KeyboardShortcuts
Case #PB_Event_Menu
EventMenu = EventMenu()
For i = 0 To #AnzahlRechnungen - 1
; ein bischen Logick, ich hoffe du kommst damit klar :-)
If Int(EventMenu / 2) = i
; % bedeutet Modulo (Rest), EventMenu wird also durch 2
;geteilt und dann der Rest zurück gegeben. Kann also
;nur 0 bei geraden und 1 bei ungeraden Zahlen sein.
If EventMenu % 2 = #False
Summand(i) - 1
Else
Summand(i) + 1
EndIf
SetGadgetState(SummandGadget(i), Summand(i))
SetGadgetText(SummandGadget(i), StrD(Summand(i)/10, 1))
Break
EndIf
Next
EndSelect
; Proceduren aufrufen
Berechnung()
Ausgabe()
ForEver

machen, wir haben ja im prinzip überhaupt keine Ahnung, was das fertige
Programm machen soll.
MFG PMV