menu.pp 3.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121
  1. { This demo shows the use of menu's.
  2. * The first two are PUSH_MENUs (pop-up).
  3. * The third one is PULLDOWN_MENU
  4. * and the last one is TOUCH_MENU
  5. *
  6. * a confusing demo, but a good testing program ..
  7. }
  8. program menudemo;
  9. uses xforms;
  10. Var menu,abox : array[0..3] of PFL_OBJECT;
  11. isset : array[0..3] of longint;
  12. form : PFL_FORM;
  13. i, j : longint;
  14. procedure menu_cb(ob : PFL_OBJECT; m : longint);cdecl;
  15. var i,item : longint;
  16. begin
  17. item := fl_get_menu(ob);
  18. if (item <= 0) or (isset[m] = item) then
  19. exit;
  20. for i := 0 to 3 do
  21. if ( i <> m) then
  22. begin
  23. { enable the old selected color for other menus}
  24. fl_set_menu_item_mode(menu[i], isset[m], Cardinal(FL_PUP_RADIO));
  25. { disable the currently selected color for other menus }
  26. fl_set_menu_item_mode(menu[i], item, Cardinal(FL_PUP_GRAY or FL_PUP_RADIO));
  27. end;
  28. isset[m] := item;
  29. fl_set_object_color(abox[m], FL_BLACK+item, FL_BLACK);
  30. end;
  31. procedure done_cb(ob : PFL_OBJECT; data : longint) ; cdecl;
  32. begin
  33. halt;
  34. end;
  35. Function create_form : PFL_Form;
  36. var form : PFL_FORM;
  37. obj : PFL_OBJECT;
  38. begin
  39. form := fl_bgn_form(FL_NO_BOX,440,380);
  40. obj := fl_add_box(FL_BORDER_BOX,0,0,440,380,'');
  41. fl_set_object_color(obj,FL_SLATEBLUE,FL_COL1);
  42. obj := fl_add_menu(FL_PUSH_MENU,0,0,110,30,'Color 1');
  43. menu[0] := obj;
  44. fl_set_object_shortcut(obj, '1#1', 1);
  45. fl_set_object_boxtype(obj, FL_UP_BOX);
  46. fl_set_object_callback(obj, PFL_CALLBACKPTR(@menu_cb), 0);
  47. obj := fl_add_menu(FL_PUSH_MENU,110,0,110,30,'Color 2');
  48. menu[1] := obj;
  49. fl_set_object_shortcut(obj, '2#2', 1);
  50. fl_set_object_callback(obj, PFL_CALLBACKPTR(@menu_cb), 1);
  51. obj := fl_add_menu(FL_PULLDOWN_MENU,220,0,110,30,'Color 3');
  52. menu[2] := obj;
  53. fl_set_object_shortcut(obj, '3#3', 1);
  54. fl_set_object_callback(obj, PFL_CALLBACKPTR(@menu_cb), 2);
  55. obj := fl_add_menu(FL_TOUCH_MENU,330,0,110,30,'Color 4');
  56. menu[3] := obj;
  57. fl_set_object_shortcut(obj, '4#4', 1);
  58. fl_set_object_callback(obj, PFL_CALLBACKPTR(@menu_cb), 3);
  59. abox[0] := fl_add_box(FL_SHADOW_BOX,20,80,70,230,'');
  60. abox[1] := fl_add_box(FL_SHADOW_BOX,130,80,70,230,'');
  61. abox[2] := fl_add_box(FL_SHADOW_BOX,240,80,70,230,'');
  62. abox[3] := fl_add_box(FL_SHADOW_BOX,350,80,70,230,'');
  63. obj := fl_add_button(FL_NORMAL_BUTTON,310,330,110,30,'Exit');
  64. fl_set_object_callback(obj, PFL_CALLBACKPTR(@done_cb), 0);
  65. fl_end_form();
  66. {fl_scale_form(form, 0.9, 0.9);}
  67. create_form:=form;
  68. end;
  69. begin
  70. fl_initialize(@argc, argv, 'FormDemo', nil, 0);
  71. form := create_form();
  72. {fl_setpup_color(FL_SLATEBLUE, FL_BLACK); }
  73. for i:=0 to 3 do
  74. begin
  75. fl_show_menu_symbol(menu[i], 1);
  76. fl_set_menu(menu[i],
  77. 'Red%r1|Green%r1|Yellow%r1|Blue%r1|Purple%r1|Cyran%r1|White%r1');
  78. fl_set_menu_item_shortcut(menu[i], 1, 'Rr#R#r');
  79. fl_set_menu_item_shortcut(menu[i], 2, 'Gg#G#g');
  80. fl_set_menu_item_shortcut(menu[i], 3, 'Yy#Y#y');
  81. fl_set_menu_item_shortcut(menu[i], 4, 'Bb#B#b');
  82. fl_set_menu_item_shortcut(menu[i], 5, 'Pp#P#p');
  83. fl_set_menu_item_shortcut(menu[i], 6, 'Cc#C#c');
  84. fl_set_menu_item_shortcut(menu[i], 7, 'Ww#W#w');
  85. { initially the last three entries are enabled }
  86. for j:=5 to 7 do
  87. fl_set_menu_item_mode(menu[i], j, Cardinal(FL_PUP_RADIO));
  88. { the first four are disabled except the item (i+1) }
  89. for j:=1 to 4 do
  90. fl_set_menu_item_mode(menu[i], j, Cardinal(FL_PUP_GREY or FL_PUP_RADIO));
  91. isset[i] := i + 1;
  92. fl_set_object_color(abox[i], FL_BLACK+isset[i], FL_BLACK);
  93. fl_set_menu_item_mode(menu[i], isset[i], Cardinal(FL_PUP_CHECK or FL_PUP_RADIO));
  94. end;
  95. fl_show_form(form,FL_PLACE_CENTER,FL_NOBORDER,Nil);
  96. fl_do_forms();
  97. fl_hide_form(form);
  98. end.