Spingadget mit reellen Zahlen

Für allgemeine Fragen zur Programmierung mit PureBasic.
Benutzeravatar
Chimorin
Beiträge: 451
Registriert: 30.01.2013 16:11
Computerausstattung: MSI GTX 660 OC mit TwinFrozr III
6Gb DDR 3 RAM
AMD Phenom II X4 B55 @ 3,6GHz
Windows 7 Home Premium 64-bit

Spingadget mit reellen Zahlen

Beitrag 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
Bild

- formerly known as Bananenfreak -
Benutzeravatar
STARGÅTE
Kommando SG1
Beiträge: 7039
Registriert: 01.11.2005 13:34
Wohnort: Glienicke
Kontaktdaten:

Re: Spingadget mit reellen Zahlen

Beitrag 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
PB 6.01 ― Win 10, 21H2 ― Ryzen 9 3900X, 32 GB ― NVIDIA GeForce RTX 3080 ― Vivaldi 6.0 ― www.unionbytes.de
Aktuelles Projekt: Lizard - Skriptsprache für symbolische Berechnungen und mehr
Benutzeravatar
Chimorin
Beiträge: 451
Registriert: 30.01.2013 16:11
Computerausstattung: MSI GTX 660 OC mit TwinFrozr III
6Gb DDR 3 RAM
AMD Phenom II X4 B55 @ 3,6GHz
Windows 7 Home Premium 64-bit

Re: Spingadget mit reellen Zahlen

Beitrag 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.
Bild

- formerly known as Bananenfreak -
Benutzeravatar
NicTheQuick
Ein Admin
Beiträge: 8837
Registriert: 29.08.2004 20:20
Computerausstattung: Ryzen 7 5800X, 64 GB DDR4-3200
Ubuntu 24.04.2 LTS
GeForce RTX 3080 Ti
Wohnort: Saarbrücken

Re: Spingadget mit reellen Zahlen

Beitrag 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.
Benutzeravatar
Chimorin
Beiträge: 451
Registriert: 30.01.2013 16:11
Computerausstattung: MSI GTX 660 OC mit TwinFrozr III
6Gb DDR 3 RAM
AMD Phenom II X4 B55 @ 3,6GHz
Windows 7 Home Premium 64-bit

Re: Spingadget mit reellen Zahlen

Beitrag von Chimorin »

Auch eine gute Methode, danke für die Hilfe :)
Bild

- formerly known as Bananenfreak -
Lord
Beiträge: 325
Registriert: 21.01.2008 19:11

Re: Spingadget mit reellen Zahlen

Beitrag 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"?
Bild
Benutzeravatar
Chimorin
Beiträge: 451
Registriert: 30.01.2013 16:11
Computerausstattung: MSI GTX 660 OC mit TwinFrozr III
6Gb DDR 3 RAM
AMD Phenom II X4 B55 @ 3,6GHz
Windows 7 Home Premium 64-bit

Re: Spingadget mit reellen Zahlen

Beitrag von Chimorin »

Das gibt es nicht und wird auch nicht benötigt.
Bild

- formerly known as Bananenfreak -
Antworten