Page 1 of 1

Input of floating point numeric number in a window

Posted: Mon Aug 25, 2025 10:09 am
by Rudy M
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

Re: Input of floating point numeric number in a window

Posted: Mon Aug 25, 2025 11:15 am
by Sergey

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
Without checking of introduced characters

Re: Input of floating point numeric number in a window

Posted: Mon Aug 25, 2025 12:42 pm
by Axolotl
If you are on windows and not afraid of using API maybe this can be a start

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.

Re: Input of floating point numeric number in a window

Posted: Mon Aug 25, 2025 1:01 pm
by RASHAD
Hi
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

Re: Input of floating point numeric number in a window

Posted: Mon Aug 25, 2025 1:33 pm
by spikey
You might want to have a look at Numeric Entry into a EditBox.

Re: Input of floating point numeric number in a window

Posted: Mon Aug 25, 2025 2:59 pm
by Rudy M
Thank You all for the programming-hints and for the link.
Now I have some work to do to test it out :D

Rudy M