Hello everyone,
In my programs, I'm currently trying to work only with the PB window routines (no sequences with an open console...).
I see the editor gadget for entering text.
But what do you do to enter a floating-point number (Float...) in a window?
Is there anything possible with the Editor gadget, or has anyone found another solution?
Best regards,
Rudy M
Input of floating point numeric number in a window
Re: Input of floating point numeric number in a window
Code: Select all
input.s = InputRequester("Enter a float number", "Float:", "")
If input
float.f = ValF(input)
Debug "Float is " + StrF(float)
Else
Debug "Canceled"
EndIf
Re: Input of floating point numeric number in a window
If you are on windows and not afraid of using API maybe this can be a start
BTW: There is a modern way of doing subclass, but you need to import some api functions, and that makes this example a little to heavy.
Code: Select all
EnableExplicit
Global g_bNumericOnly = #False
CompilerIf Not (#PB_Compiler_OS = #PB_OS_Windows)
MessageRequester("Sorry ....", "This works for windows, only.", #PB_MessageRequester_Error)
End
CompilerEndIf
Procedure EditorSubClassProc(hWnd, uMsg, wParam, lParam)
Static s_prevFunc = 0
Select uMsg
Case -1 ; <== Not recommended, but working -- So we call it for advanced users only :)
s_prevFunc = SetWindowLongPtr_(hWnd, #GWL_WNDPROC, @EditorSubClassProc())
Case #WM_CHAR
If g_bNumericOnly
If (wParam >= #VK_0 And wParam <= #VK_9) Or wParam = ','
; forward to default procedure
ElseIf wParam = '.'
; okay, because we changed the char and forward to default procedure
wParam = ','
Else
; all other chars are not allowed, no call of the default procedure
ProcedureReturn 0
EndIf
EndIf
EndSelect
ProcedureReturn CallWindowProc_(s_prevFunc, hWnd, uMsg, wParam, lParam)
EndProcedure
Procedure Main()
Protected temp$
If OpenWindow(0, 0, 0, 322, 190, "EditorGadget", #PB_Window_SystemMenu | #PB_Window_ScreenCentered)
EditorGadget(0, 8, 8, 306, 133)
CheckBoxGadget(1, 8, 168, 120, 24, "Numeric Only")
EditorSubClassProc(GadgetID(0), -1, 0, 0)
Repeat
Select WaitWindowEvent()
Case #PB_Event_CloseWindow
Break
Case #WM_CHAR
Debug "MainLoop: CHAR " + EventwParam() ; you cannot change the value of the virtual key here.
Case #PB_Event_Gadget
Select EventGadget()
Case 1
g_bNumericOnly = GetGadgetState(1) :Debug "g_bNumericOnly = " + g_bNumericOnly
SetActiveGadget(0)
EndSelect
EndSelect
ForEver
EndIf
EndProcedure
End Main()
BTW: There is a modern way of doing subclass, but you need to import some api functions, and that makes this example a little to heavy.
Just because it worked doesn't mean it works.
PureBasic 6.04 (x86) and <latest stable version and current alpha/beta> (x64) on Windows 11 Home. Now started with Linux (VM: Ubuntu 22.04).
PureBasic 6.04 (x86) and <latest stable version and current alpha/beta> (x64) on Windows 11 Home. Now started with Linux (VM: Ubuntu 22.04).
Re: Input of floating point numeric number in a window
Hi
Without posting a workable snippet can't guess your requirement
But you can use Str,StrD,StrF
Without posting a workable snippet can't guess your requirement
But you can use Str,StrD,StrF
Code: Select all
If OpenWindow(0, 0, 0, 322, 150, "EditorGadget", #PB_Window_SystemMenu | #PB_Window_ScreenCentered)
EditorGadget(0, 8, 8, 306, 133)
For a = 0 To 5
AddGadgetItem(0, a, "Line "+Str(a)+" " +StrF(14678.2345))
Next
Repeat : Until WaitWindowEvent() = #PB_Event_CloseWindow
EndIf
Egypt my love
Re: Input of floating point numeric number in a window
You might want to have a look at Numeric Entry into a EditBox.
Re: Input of floating point numeric number in a window
Thank You all for the programming-hints and for the link.
Now I have some work to do to test it out
Rudy M
Now I have some work to do to test it out

Rudy M