123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105 |
- uses
- ncurses,menu;
- const
- choices : array[0..5] of pchar = (
- 'Choice 1',
- 'Choice 2',
- 'Choice 3',
- 'Choice 4',
- 'Exit',
- nil
- );
- procedure print_in_middle(win : PWINDOW;starty,startx,width : longint;_string : pchar;color : chtype);
- var
- length,x,y : longint;
- temp : single;
- begin
- if win=nil then
- win:=stdscr;
- getyx(win, y, x);
- if startx <> 0 then
- x := startx;
- if starty <> 0 then
- y := starty;
- if width=0 then
- width := 80;
- length := strlen(_string);
- temp := (width - length)/ 2;
- x := startx + round(temp);
- wattron(win, color);
- mvwprintw(win, y, x, '%s', [_string]);
- wattroff(win, color);
- refresh;
- end;
- var
- my_items : ppitem;
- c : longint;
- my_menu : pmenu;
- my_menu_win : pwindow;
- i,n_choices : longint;
- begin
- { Initialize curses }
- initscr;
- start_color;
- cbreak;
- noecho;
- keypad(stdscr, 1);
- init_pair(1, COLOR_RED, COLOR_BLACK);
- { Create items }
- n_choices := high(choices);
- getmem(my_items,n_choices*sizeof(pitem));
- for i:=0 to n_choices-1 do
- my_items[i] := new_item(choices[i], choices[i]);
- { Create menu }
- my_menu := new_menu(ppitem(my_items));
- { Create the window to be associated with the menu }
- my_menu_win := newwin(10, 40, 4, 4);
- keypad(my_menu_win, 1);
- { Set main window and sub window }
- set_menu_win(my_menu, my_menu_win);
- set_menu_sub(my_menu, derwin(my_menu_win, 6, 38, 3, 1));
- { Set menu mark to the string ' * ' }
- set_menu_mark(my_menu, ' * ');
- { Print a border around the main window and print a title }
- box(my_menu_win, 0, 0);
- print_in_middle(my_menu_win, 1, 0, 40, 'My Menu', COLOR_PAIR(1));
- mvwaddch(my_menu_win, 2, 0, ACS_LTEE);
- mvwhline(my_menu_win, 2, 1, ACS_HLINE, 38);
- mvwaddch(my_menu_win, 2, 39, ACS_RTEE);
- mvprintw(LINES - 2, 0, 'F1 to exit',[]);
- refresh();
- { Post the menu }
- post_menu(my_menu);
- wrefresh(my_menu_win);
- c:=wgetch(my_menu_win);
- while(c<> KEY_F(1)) do
- begin
- case c of
- KEY_DOWN:
- menu_driver(my_menu, REQ_DOWN_ITEM);
- KEY_UP:
- menu_driver(my_menu, REQ_UP_ITEM);
- end;
- wrefresh(my_menu_win);
- c:=wgetch(my_menu_win);
- end;
- { Unpost and free all the memory taken up }
- unpost_menu(my_menu);
- free_menu(my_menu);
- for i:=0 to n_choices-1 do
- free_item(my_items[i]);
- endwin();
- end.
|