1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283 |
- program form_basic;
- {
- Example 25. Forms Basics
- from ncurses howto
- Possible bug: moving cursors before first char doesn't seem to work.
- }
- {$MODE OBJFPC}
- uses
- ncurses, form;
- var
- field: array[0..2] of PFIELD;
- my_form: PFORM;
- ch: Longint;
- begin
- try
- (* Initialize curses *)
- initscr();
- cbreak();
- noecho();
- keypad(stdscr, TRUE);
- (* Initialize the fields *)
- field[0] := new_field(1, 10, 4, 18, 0, 0);
- field[1] := new_field(1, 10, 6, 18, 0, 0);
- field[2] := nil;
- (* Set field options *)
- set_field_back(field[0], A_UNDERLINE); { Print a line for the option }
- field_opts_off(field[0], O_AUTOSKIP); { Don't go to next field when this }
- { Field is filled up }
- set_field_back(field[1], A_UNDERLINE);
- field_opts_off(field[1], O_AUTOSKIP);
- (* Create the form and post it *)
- my_form := new_form(field);
- post_form(my_form);
- refresh();
- mvprintw(2, 10, 'Cursor up/down to move, F1 to Exit');
- mvprintw(4, 10, 'Value 1:');
- mvprintw(6, 10, 'Value 2:');
- refresh();
- (* Loop through to get user requests *)
- ch := getch();
- while ch <> KEY_F(1) do
- begin
- case ch of
- KEY_DOWN:
- (* Go to next field *)
- begin
- form_driver(my_form, REQ_NEXT_FIELD);
- { Go to the end of the present buffer
- Leaves nicely at the last character }
- form_driver(my_form, REQ_END_LINE);
- end;
- KEY_UP:
- (* Go to previous field *)
- begin
- form_driver(my_form, REQ_PREV_FIELD);
- form_driver(my_form, REQ_END_LINE);
- end;
- else
- { If this is a normal character, it gets
- Printed }
- form_driver(my_form, ch);
- end;
- ch := getch();
- end
- finally
- (* Un post form and free the memory *)
- unpost_form(my_form);
- free_form(my_form);
- free_field(field[0]);
- free_field(field[1]);
- endwin();
- end;
- end.
|