GUI_PICTURE以及context_menu学习笔记
???? ci_gui_picture實現起來很簡單,具體為:創建一個cl_gui_picture的實例,然后調用LOAD_PICTURE方法用來顯示圖片。具體來說又三個load_picture的方法,第一個是LOAD_PICTURE_FROM_SAP_ICONS,第二個是LOAD_PICTURE_FROM_URL以及第三個LOAD_PICTURE_FROM_URL_ASYNC。
???? 在Picture中添加Context_menu實現起來也比較簡單。首先定義一個cl_gui_picture的context_menu,在該事件中創建一個cl_ctmenu的實例,然后調用?cl_ctmenu的ADD_FUNCTION方法來添加需要顯示的menu。再定義一個context_menu_selected事件,該時間用來實現選擇menu之后的后續動作。
???? 接下來將以一個實例來說明實現上述操作。在該實例中首先顯示一種圖片,然后再該圖片上添加context menu,選擇context menu可以對該圖片進行拉伸處理,此外還實現了圖片的double click事件。具體步驟如下:
?????一,創建一個屏幕號為100的screen,在該screen中添加一個名稱為"PIC_CON"的custom container.
???? 二,定義cl_gui_custom_container對象container_1 以及cl_gui_picture對象PIC_CON。代碼如下:
?????????data?PIC_CON?type?ref?to?cl_gui_picture.
????? data?container_1?type?ref?to?cl_gui_custom_container.??????
???? 三,定義一個名為event_receiver1的class,該class中包括了三個方法event_handler_context_menu以及event_handler_context_menu_sel和event_handler_picture_dblclick。具體代碼為:
????? ???class?event_receiver1?definition.
???????????? public?section.
????????????????methods?event_handler_picture_dblclick
????????????????????????? ??for?event?picture_dblclick?of?cl_gui_picture
????????????????????????? ??importing?mouse_pos_x?mouse_pos_y?sender.
??????????????? methods?event_handler_context_menu
???????????????????? ??????for?event?context_menu?of?cl_gui_picture
??????????????????????? ???importing?sender.
????????????? ??methods?event_handler_context_menu_sel
?????????????????????????? for?event?context_menu_selected?of?cl_gui_picture
?????????????????????????? importing?fcode?sender.
??????????endclass.????????????????????"event_receiver?DEFINITION???
???? 四,實現class中定義的方法。在方法event_handler_context_menu中首先創建一個cl_ctmenu的實例menu,然后調用menu的ADD_FUNCTION方法添加menu,最后調用DISPLAY_CONTEXT_MENU方法顯示context menu?。在方法event_handler_context_menu_sel中首先獲取選中menu的function code,然后調用picture的SET_DISPLAY_MODE方法來對圖片進行拉伸或者正常顯示處理。在方法event_handler_picture_dblclick方法中將獲取鼠標雙擊的問題,然后以message的方式顯示位置。具體代碼如下:
?class?event_receiver1?IMPLEMENTATION.
??METHOD?event_handler_picture_dblclick.
*????????for?event?picture_dblclick?of?c_picture_control
*????????importing?mouse_pos_x?mouse_pos_y.
????DATA?pos_x(5)?type?c.
????DATA?pos_y(5)?type?c.
????pos_x?=?mouse_pos_x.
????pos_y?=?mouse_pos_y.
????IF?SENDER?=?PIC_CON.
??????MESSAGE?I000(0K)?WITH
????????'DoubleClick'?'Upper?Picture'?POS_X?POS_Y.??????????"#EC?NOTEXT
????endif.
??endmethod.????????????????????"event_handler_picture_dblclick
??method?event_handler_context_menu.
????DATA?menu?type?REF?TO?cl_ctmenu.
????CREATE?OBJECT?menu.
????CALL?METHOD?menu->ADD_FUNCTION
??????EXPORTING
????????FCODE???????=?'NORMAL'
????????TEXT????????=?'NORMAL'
*????????ICON????????=
*????????FTYPE???????=
*????????DISABLED????=
*????????HIDDEN??????=
*????????CHECKED?????=
*????????ACCELERATOR?=
????????.
????CALL?METHOD?menu->ADD_FUNCTION
??????EXPORTING
????????FCODE???????=?'STRETCH'
????????TEXT????????=?'STRETCH'
*????????ICON????????=
*????????FTYPE???????=
*????????DISABLED????=
*????????HIDDEN??????=
*????????CHECKED?????=
*????????ACCELERATOR?=
????????.
????CALL?METHOD?sender->DISPLAY_CONTEXT_MENU
??????EXPORTING
????????CONTEXT_MENU?=?menu
*??????EXCEPTIONS
*????????ERROR????????=?1
*????????others???????=?2
????????????.
??endmethod.?????????????????????"event_handler_picture_dblclick
??method?event_handler_context_menu_sel.
????if?fcode?=?'STRETCH'.
??????CALL?METHOD?PIC_CON->SET_DISPLAY_MODE
????????EXPORTING
??????????DISPLAY_MODE?=?CL_GUI_PICTURE=>DISPLAY_MODE_STRETCH.
????endif.
????if?fcode?=?'NORMAL'.
??????CALL?METHOD?PIC_CON->SET_DISPLAY_MODE
????????EXPORTING
??????????DISPLAY_MODE?=?CL_GUI_PICTURE=>DISPLAY_MODE_NORMAL.
????endif.
??endmethod.????????????????????"event_handler_context_menu_sel
ENDCLASS.????????????????????"event_receiver?IMPLEMENTATION??????
????? 五,定義event_receiver1對象,以及cntl_simple_events和cntl_simple_event對象。主要用于事件注冊時候使用。為什么是這么使用我還沒有弄清楚。
????? ?data?url??type?cndp_url.
???? data?event_receiver?TYPE?REF?TO?event_receiver1.
?????data?event_tab?type?cntl_simple_events.
???? data?event_tab_line?type?cntl_simple_event.??????
????? 六,在PBO的module中創建custom container以及cl_gui_custom_container的實例,然后調用LOAD_PICTURE_FROM_URL_ASYNC方法顯示圖片,并進行事件注冊。具體代碼為:
?MODULE?STATUS_0100?OUTPUT.
??SET?PF-STATUS?'MAIN0001'.
*??SET?TITLEBAR?'xxx'.
??IF?PIC_CON?IS?INITIAL.
????CREATE?OBJECT?container_1
??????????????exporting?container_name?=?'PIC_CON'.
????CREATE?OBJECT?PIC_CON?exporting?parent?=?container_1.
????CALL?FUNCTION?'DP_PUBLISH_WWW_URL'
??????EXPORTING
????????OBJID????=?'HTMLCNTL_TESTHTM2_SAP_AG'
????????LIFETIME?=?cndp_lifetime_transaction
??????IMPORTING
????????URL??????=?url
??????EXCEPTIONS
????????OTHERS???=?1.
*?Load?the?picture?by?using?the?url?generated?by?the?data?provider.
????if?sy-subrc?=?0.
??????CALL?METHOD?PIC_CON->LOAD_PICTURE_FROM_URL_ASYNC
????????EXPORTING
??????????url?=?url.
????endif.
????EVENT_TAB_LINE-EVENTID?=?CL_GUI_PICTURE=>EVENTID_PICTURE_DBLCLICK.
????append?EVENT_TAB_LINE?to?EVENT_TAB.
????EVENT_TAB_LINE-EVENTID?=?CL_GUI_PICTURE=>EVENTID_CONTEXT_MENU.
????append?EVENT_TAB_LINE?to?EVENT_TAB.
????EVENT_TAB_LINE-EVENTID?=?CL_GUI_PICTURE=>EVENTID_CONTEXT_MENU_SELECTED.
????append?EVENT_TAB_LINE?to?EVENT_TAB.
????CALL?METHOD?PIC_CON->SET_REGISTERED_EVENTS
??????EXPORTING
????????EVENTS?=?event_tab.
????create?object?event_receiver.
????set?handler?event_receiver->event_handler_picture_dblclick
????????????????FOR?PIC_CON.
????set?handler?event_receiver->event_handler_context_menu
????????????????FOR?PIC_CON.
????set?handler?event_receiver->event_handler_context_menu_sel
????????????????FOR?PIC_CON.
??EndIF.
ENDMODULE.?????????????????"?STATUS_0100??OUTPUT
????? ok.大功告成,可以F8了!
總結
以上是生活随笔為你收集整理的GUI_PICTURE以及context_menu学习笔记的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: SAP固定资产相关的一些表
- 下一篇: CL_GUI_PICTURE