t1form.pp 1.8 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980
  1. program form_basic;
  2. {
  3. Example 25. Forms Basics
  4. from ncurses howto
  5. }
  6. {$MODE OBJFPC}
  7. uses
  8. ncurses, form;
  9. var
  10. field: array[0..2] of PFIELD;
  11. my_form: PFORM;
  12. ch: Longint;
  13. begin
  14. try
  15. (* Initialize curses *)
  16. initscr();
  17. cbreak();
  18. noecho();
  19. keypad(stdscr, TRUE);
  20. (* Initialize the fields *)
  21. field[0] := new_field(1, 10, 4, 18, 0, 0);
  22. field[1] := new_field(1, 10, 6, 18, 0, 0);
  23. field[2] := nil;
  24. (* Set field options *)
  25. set_field_back(field[0], A_UNDERLINE); { Print a line for the option }
  26. field_opts_off(field[0], O_AUTOSKIP); { Don't go to next field when this }
  27. { Field is filled up }
  28. set_field_back(field[1], A_UNDERLINE);
  29. field_opts_off(field[1], O_AUTOSKIP);
  30. (* Create the form and post it *)
  31. my_form := new_form(field);
  32. post_form(my_form);
  33. refresh();
  34. mvprintw(4, 10, 'Value 1:');
  35. mvprintw(6, 10, 'Value 2:');
  36. refresh();
  37. (* Loop through to get user requests *)
  38. ch := getch();
  39. while ch <> KEY_F(1) do
  40. begin
  41. case ch of
  42. KEY_DOWN:
  43. (* Go to next field *)
  44. begin
  45. form_driver(my_form, REQ_NEXT_FIELD);
  46. { Go to the end of the present buffer
  47. Leaves nicely at the last character }
  48. form_driver(my_form, REQ_END_LINE);
  49. end;
  50. KEY_UP:
  51. (* Go to previous field *)
  52. begin
  53. form_driver(my_form, REQ_PREV_FIELD);
  54. form_driver(my_form, REQ_END_LINE);
  55. end;
  56. else
  57. { If this is a normal character, it gets
  58. Printed }
  59. form_driver(my_form, ch);
  60. end;
  61. ch := getch();
  62. end
  63. finally
  64. (* Un post form and free the memory *)
  65. unpost_form(my_form);
  66. free_form(my_form);
  67. free_field(field[0]);
  68. free_field(field[1]);
  69. endwin();
  70. end;
  71. end.