|
@@ -0,0 +1,105 @@
|
|
|
+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.
|