Seite 1 von 1
Spingadget mit reellen Zahlen
Verfasst: 09.12.2014 13:36
von Chimorin
Heyho,
Ich würde gerne das Spingadget benutzen, benötige aber eine Eingabemöglichkeit fuer reelle Zahlen. Das Spingadget kann standardmäßig aber nur mit natürlichen Zahlen umgehen.
Das Programm "Labview" kann allerdings mit reellen Zahlen im Spingadget umgehen (wobei das vllt ne Eigenkreation ist).
Kann man sowas über WinAPI lösen oder muss ich mir da was selber zusammenbasteln?
Gruß,
Chimorin
Re: Spingadget mit reellen Zahlen
Verfasst: 09.12.2014 14:27
von STARGÅTE
Nun ja, das Spin-Gadget von PB nutzt das Gadget von Windows, welches 16-Bit also 65536 Zustände haben kann.
Wie du nun die Zustände verteilst bleibt dir ja überlassen.
Die 1:1 Umrechung in Integer-Zahlen ist ja nur eine Möglichkeit.
Genauso kannst du einfach Floatzahlen in das Gadget schreiben oder Strings.
Hier ein Beispiel:
Code: Alles auswählen
OpenWindow(0, 200, 200, 400, 300, "")
SpinGadget(0, 10, 10, 100, 20, 0, $FFFF)
SetGadgetText(0, "3.14")
SetGadgetState(0, 314)
Repeat
Select WaitWindowEvent()
Case #PB_Event_Gadget
Select EventGadget()
Case 0
Select EventType()
Case #PB_EventType_Change
SetGadgetState(0, ValF(GetGadgetText(0))*100)
Case 1, -1
SetGadgetText(0, StrF(GetGadgetState(0)/100.0, 2))
EndSelect
EndSelect
Case #PB_Event_CloseWindow
End
EndSelect
ForEver
Re: Spingadget mit reellen Zahlen
Verfasst: 09.12.2014 18:40
von Chimorin
Nur 16bit? Dann ist das eh nichts für mich. Danke für die Antwort, dann werde ich mir wohl oder übel was eigenes basteln müssen.
Re: Spingadget mit reellen Zahlen
Verfasst: 09.12.2014 18:54
von NicTheQuick
Du kannst das SpinGadget aber auch "verarschen" und einfach den eigentlichen State ignorieren und nur mit dem Text darin arbeiten.
Hier mal der abgeänderte Code. Nicht gerade vorbildlich, aber funktional:
Code: Alles auswählen
OpenWindow(0, 220, 200, 400, 300, "")
SpinGadget(0, 10, 10, 200, 24, 0, 2)
SetGadgetText(0, "3.14")
SetGadgetState(0, 1)
Repeat
Select WaitWindowEvent()
Case #PB_Event_Gadget
Select EventGadget()
Case 0
Select EventType()
Case #PB_EventType_Change
SetGadgetState(0, ValF(GetGadgetText(0))*100)
Case #PB_EventType_Up
SetGadgetText(0, StrD(ValD(GetGadgetText(0)) + 0.01))
SetGadgetState(0, 1)
Case #PB_EventType_Down
SetGadgetText(0, StrD(ValD(GetGadgetText(0)) - 0.01))
SetGadgetState(0, 1)
Case #PB_EventType_LostFocus
SetGadgetText(0, StrD(ValD(GetGadgetText(0))))
EndSelect
EndSelect
Case #PB_Event_CloseWindow
End
EndSelect
ForEver
Wichtig ist unter anderen, dass man immer wieder 'SetGadgetState(0, 1)' nutzt um den State auf 1 zu setzen. Sonst würde man nämlich nach einem Klick auf den Pfeil nach unten nicht mehr weiter kommen, weil der State dann 0 ist und nicht mehr tiefer geht.
Re: Spingadget mit reellen Zahlen
Verfasst: 10.12.2014 08:55
von Chimorin
Auch eine gute Methode, danke für die Hilfe

Re: Spingadget mit reellen Zahlen
Verfasst: 10.12.2014 10:44
von Lord
Hallo!
Wie verträgt sich
NicTheQuick hat geschrieben:...
Code: Alles auswählen
...
Case #PB_EventType_LostFocus
SetGadgetText(0, StrD(ValD(GetGadgetText(0))))
...
...
mit
PureBasic Hilfe hat geschrieben:Die folgenden Ereignisse werden durch EventType() unterstützt:
#PB_EventType_Change: Der Text im Eingabebereich wurde durch den Anwender geändert.
#PB_EventType_Up : Die 'Nach oben'-Taste wurde gedrückt.
#PB_EventType_Down : Die 'Nach unten'-Taste wurde gedrückt.
?
Unterstützt das SpinGadget neuerdings den EventType "LostFocus"?
Re: Spingadget mit reellen Zahlen
Verfasst: 10.12.2014 20:47
von Chimorin
Das gibt es nicht und wird auch nicht benötigt.