Verfasst: 11.09.2006 02:28
Das Auge nimmt ja eh nicht alle Änderungen sofort wahr ...
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
^^hoffe das ist verständlich für dich
... musste ja auch nicht genau so
machen, wir haben ja im prinzip überhaupt keine Ahnung, was das fertige
Programm machen soll.
MFG PMV
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