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.