二维码

Dialog中创建Context Menu上下文菜单

Twilight发表于 2014-12-23 17:15Twilight 最后回复于 2014-12-23 17:15 [复制链接] 3093 0

Dialog屏幕中,增加鼠标右击弹出的上下文菜单

1、se38 创建一个可执行程序
  1. DATA text1(10) TYPE c.
  2. DATA text2(10) TYPE c.
  3. DATA text_cut(10) TYPE c.
  4. DATA right_clk TYPE REF TO cl_ctmenu.
  5. DATA ok_code TYPE sy-ucomm.
  6. DATA:prog TYPE sy-repid,
  7.      flag(1) TYPE c VALUE 'X',
  8.      fld(20) TYPE c,
  9.      off     TYPE i,
  10.      val(20) TYPE c.

  11. START-OF-SELECTION.
  12.   CALL SCREEN 9000.
  13. *&---------------------------------------------------------------------*
  14. *&      Module  STATUS_9000  OUTPUT
  15. *&---------------------------------------------------------------------*
  16. *       text
  17. *----------------------------------------------------------------------*
  18. MODULE status_9000 OUTPUT.
  19.   prog = sy-repid.
  20. * SET PF-STATUS 'ZGUI_9000'.
  21.   SET TITLEBAR 'TITLE'.
  22. ENDMODULE.                 " STATUS_9000  OUTPUT
  23. *&---------------------------------------------------------------------*
  24. *&      Module  USER_COMMAND_9000  INPUT
  25. *&---------------------------------------------------------------------*
  26. *       text
  27. *----------------------------------------------------------------------*
  28. MODULE user_command_9000 INPUT.
  29.   CLEAR ok_code.
  30.   ok_code = sy-ucomm.
  31.   CASE ok_code.
  32.     WHEN 'OPEN'.
  33.       MESSAGE 'OPEN IS CLICKED' TYPE 'I'.
  34.     WHEN 'CUT'.
  35.       text_cut = text1. "storing in some temp variable
  36.       CLEAR text1.
  37.     WHEN 'PASTE'.
  38.       GET CURSOR FIELD fld VALUE val."to find out in which i/o field the cursor is in
  39.       IF fld = 'TEXT2'.
  40.         text2 = text_cut.
  41.       ELSEIF fld = 'TEXT1'.
  42.         text1 = text_cut.
  43.       ENDIF.
  44.     WHEN 'CLEAR'.
  45.       CLEAR : text1 ,text2,text_cut.
  46.   ENDCASE.
  47. ENDMODULE.                 " USER_COMMAND_9000  INPUT
  48. "RIGHT CLICK on text 1 input/ouput field
  49. *&---------------------------------------------------------------------*
  50. *&      Form  on_ctmenu_text1
  51. *&---------------------------------------------------------------------*
  52. *       text
  53. *----------------------------------------------------------------------*
  54. *      -->L_MENU     text
  55. *----------------------------------------------------------------------*
  56. FORM on_ctmenu_text1 USING l_menu TYPE REF TO cl_ctmenu.
  57.   CREATE OBJECT right_clk.
  58.   CALL METHOD: right_clk->add_function
  59.                       EXPORTING fcode = 'OPEN'
  60.                                 text  = 'Open',
  61.                right_clk->add_function
  62.                        EXPORTING fcode = 'CUT'
  63.                                  text  = 'Cut',
  64.                right_clk->add_function
  65.                        EXPORTING fcode = 'PASTE'
  66.                                  text  = 'Paste',
  67.               right_clk->add_function
  68.                        EXPORTING fcode = 'MOVE'
  69.                                  text  = 'Move',
  70.                l_menu->add_submenu
  71.                        EXPORTING menu = right_clk
  72.                                  text = 'OPTIONS'.
  73. ENDFORM.                    "on_ctmenu_text1
  74. "RIGHT CLICK on text 2 input/ouput field
  75. *&---------------------------------------------------------------------*
  76. *&      Form  on_ctmenu_text2
  77. *&---------------------------------------------------------------------*
  78. *       text
  79. *----------------------------------------------------------------------*
  80. *      -->L_MENU     text
  81. *----------------------------------------------------------------------*
  82. FORM on_ctmenu_text2 USING l_menu TYPE REF TO cl_ctmenu.
  83.   CREATE OBJECT right_clk.
  84.   CALL METHOD: right_clk->add_function
  85.                       EXPORTING fcode = 'OPEN'
  86.                                 text  = 'Open',
  87.                right_clk->add_function
  88.                        EXPORTING fcode = 'CUT'
  89.                                  text  = 'Cut',
  90.                right_clk->add_function
  91.                        EXPORTING fcode = 'PASTE'
  92.                                  text  = 'Paste',
  93.               right_clk->add_function
  94.                        EXPORTING fcode = 'MOVE'
  95.                                  text  = 'Move',
  96.                l_menu->add_submenu
  97.                        EXPORTING menu = right_clk
  98.                                  text = 'OPTIONS'.
  99. ENDFORM.                    "on_ctmenu_text2
复制代码

PS:这里的FORM on_ctmenu_text1、FORM on_ctmenu_text2回调到Screen painter的屏幕中,其中form的“on_ctmenu_”是固定的,text1/text2在屏幕中自己定义

2、创建9000 标准屏幕
Context Menu 3.jpg
点击“格式”按钮,绘制如下屏幕元素


这里的context menu form 就是回调程序中的form代码的
定义ok_code、逻辑流
  1. PROCESS BEFORE OUTPUT.
  2. MODULE STATUS_9000.
  3. *
  4. PROCESS AFTER INPUT.
  5. MODULE USER_COMMAND_9000.
复制代码


3、测试程序,效果如下
Context Menu 4.jpg
回复

使用道具 举报

快速回帖

本版积分规则
您需要登录后才可以回帖 登录 | 注册有礼

快速回复 返回顶部 返回列表