

Almost every application needs to communicate with the user in some way.
Therefore, a substantial part of the code deals with the interaction
of program logic with GUI components.

Typically, the following is needed:

 put values into input fields under program control
 read and check input from the user
 pop up dialogs to query the user for further information


Task

For a minimal "application", write a program that presents a form with three components to the user:

 a numeric input field ("Value") 
 a button ("increment")
 a button ("random")


The field is initialized to zero.

The user may manually enter a new value into the field,
or increment its value with the "increment" button.

Entering a non-numeric value should be either impossible,
or issue an error message.

Pressing the "random" button presents a confirmation dialog,
and resets the field's value to a random value if the answer is "Yes".

(This task may be regarded as an extension of the task Simple windowed application).



      INSTALL @lib$+"WINLIB2"
      INSTALL @lib$+"WINLIB5"
 
      IDYES = 6
      ES_NUMBER = 8192
      MB_YESNO = 4
 
      form% = FN_newdialog("Rosetta Code", 100, 100, 100, 52, 8, 1000)
      PROC_static(form%, "Value:", 100, 10, 10, 24, 14, 0)
      PROC_editbox(form%, "0", 101, 40, 8, 52, 14, ES_NUMBER)
      PROC_pushbutton(form%, "Increment", FN_setproc(PROCinc), 7, 30, 40, 16, 0)
      PROC_pushbutton(form%, "Random", FN_setproc(PROCrandom), 52, 30, 40, 16, 0)
      PROC_showdialog(form%)
 
      REPEAT
        WAIT 1
      UNTIL !form% = 0
      QUIT
 
      DEF PROCinc
      LOCAL number%
      SYS "GetDlgItemInt", !form%, 101, 0, 1 TO number%
      SYS "SetDlgItemInt", !form%, 101, number% + 1, 1
      ENDPROC
 
      DEF PROCrandom
      LOCAL reply%
      SYS "MessageBox", !form%, "Set to a random value?", "Confirm", MB_YESNO TO reply%
      IF reply% = IDYES THEN SYS "SetDlgItemInt", !form%, 101, RND(10000), 1
      ENDPROC