7.Picture
使用cl_gui_picture类显示图片。
示例:
"event handler类 CLASS c_event_handler DEFINITION. PUBLIC SECTION. "picture event "图片点击 CLASS-METHODS:event_picture_click FOR EVENT picture_click OF cl_gui_picture IMPORTING mouse_pos_x mouse_pos_y sender. "图片双击 CLASS-METHODS:event_picture_dblclick FOR EVENT picture_dblclick OF cl_gui_picture IMPORTING mouse_pos_x mouse_pos_y sender. "图片右键菜单 CLASS-METHODS:event_context_menu FOR EVENT context_menu OF cl_gui_picture IMPORTING sender. "图片右键菜单功能 CLASS-METHODS:event_context_menu_sel FOR EVENT context_menu_selected OF cl_gui_picture IMPORTING fcode sender. ENDCLASS. CLASS c_event_handler IMPLEMENTATION. METHOD:event_picture_click. DATA:lv_msg TYPE C LENGTH 20. lv_msg = 'click,X:' && mouse_pos_x && ';Y:' && mouse_pos_y. MESSAGE lv_msg TYPE 'I'. ENDMETHOD. METHOD:event_picture_dblclick. DATA:lv_msg TYPE C LENGTH 20. lv_msg = 'double click,X:' && mouse_pos_x && ';Y:' && mouse_pos_y. MESSAGE lv_msg TYPE 'I'. ENDMETHOD. METHOD:event_context_menu. DATA:lv_menu TYPE REF TO cl_ctmenu. "创建右键菜单对象 CREATE OBJECT lv_menu. "添加菜单项 CALL METHOD lv_menu->add_function EXPORTING fcode = 'NORMAL' TEXT = '正常'. CALL METHOD lv_menu->add_function EXPORTING FCODE = 'STRETCH' TEXT = '伸展'. CALL METHOD lv_menu->add_function EXPORTING FCODE = 'FIT' TEXT = '适应'. CALL METHOD lv_menu->add_function EXPORTING FCODE = 'NORMAL_CENTER' TEXT = '正常居中'. CALL METHOD lv_menu->add_function EXPORTING FCODE = 'FIT_CENTER' TEXT = '适应居中'. "设置右键menu sender->display_context_menu( lv_menu ). ENDMETHOD. METHOD:event_context_menu_sel. DATA:lv_display_mode TYPE I. IF fcode = 'NORMAL'. lv_display_mode = CL_GUI_PICTURE=>DISPLAY_MODE_NORMAL. ENDIF. IF fcode = 'STRETCH'. lv_display_mode = CL_GUI_PICTURE=>DISPLAY_MODE_STRETCH. ENDIF. IF fcode = 'FIT'. lv_display_mode = CL_GUI_PICTURE=>DISPLAY_MODE_FIT. ENDIF. IF fcode = 'NORMAL_CENTER'. lv_display_mode = CL_GUI_PICTURE=>DISPLAY_MODE_NORMAL_CENTER. ENDIF. IF fcode = 'FIT_CENTER'. lv_display_mode = CL_GUI_PICTURE=>DISPLAY_MODE_FIT_CENTER. ENDIF. "设置picture显示模式 sender->set_display_mode( lv_display_mode ). ENDMETHOD. ENDCLASS. CLASS c6 DEFINITION. PUBLIC SECTION. "图片对象 DATA:lo_picture TYPE REF TO cl_gui_picture. METHODS:m_init_picture. ENDCLASS. CLASS c6 IMPLEMENTATION. METHOD:m_init_picture. DATA:lo_mime_api TYPE REF TO if_mr_api. DATA:lv_xstring TYPE xstring. DATA:lv_url TYPE C LENGTH 256. DATA:lv_x1024 TYPE x LENGTH 1024. DATA:lt_x1024 LIKE TABLE OF lv_x1024. DATA:lt_event TYPE cntl_simple_events. DATA:ls_event LIKE LINE OF lt_event. IF lo_picture IS INITIAL. CREATE OBJECT lo_picture EXPORTING parent = cl_gui_container=>default_screen. ENDIF. "方式1:mime repository api对象 * lo_mime_api = cl_mime_repository_api=>get_api( ). * "mime中图片 * lo_mime_api->get( * EXPORTING * i_url = '/SAP/PUBLIC/TOM_TEST/pic1.jpg' * IMPORTING * e_content = lv_xstring * ). * DO. * IF xstrlen( lv_xstring ) > 1024. * lv_x1024 = lv_xstring(1024). * APPEND lv_x1024 TO lt_x1024. * SHIFT lv_xstring BY 1024 PLACES LEFT IN BYTE MODE. * ELSE. * APPEND lv_xstring TO lt_x1024. * EXIT. * ENDIF. * ENDDO. * "获取url * CALL FUNCTION 'DP_CREATE_URL' * EXPORTING * type = 'IMAGE' * subtype = 'GIF' * TABLES * data = lt_x1024 * CHANGING * url = lv_url. "方式2:使用smw0图片ZTOM_TEST * CALL FUNCTION 'DP_PUBLISH_WWW_URL' * EXPORTING * OBJID = 'ZTOM_TEST' * LIFETIME = cndp_lifetime_transaction * IMPORTING * URL = lv_url * EXCEPTIONS * OTHERS = 1. "加载picture "lo_picture->load_picture_from_url( lv_url ). "方式3:网络url lv_url = 'https://scpic.chinaz.net/files/pic/pic9/202007/apic26572.jpg'. "异步加载 lo_picture->load_picture_from_url_async( lv_url ). "设置样式 lo_picture->set_display_mode( cl_gui_picture=>display_mode_stretch ). "注册事件 ls_event-eventid = cl_gui_picture=>eventid_picture_click. APPEND ls_event TO lt_event. ls_event-eventid = cl_gui_picture=>eventid_picture_dblclick. APPEND ls_event TO lt_event. ls_event-eventid = cl_gui_picture=>eventid_context_menu. APPEND ls_event TO lt_event. ls_event-eventid = cl_gui_picture=>eventid_context_menu_selected. APPEND ls_event TO lt_event. lo_picture->set_registered_events( lt_event ). "设置事件处理handler SET HANDLER c_event_handler=>event_picture_click FOR lo_picture. SET HANDLER c_event_handler=>event_picture_dblclick FOR lo_picture. SET HANDLER c_event_handler=>event_context_menu FOR lo_picture. SET HANDLER c_event_handler=>event_context_menu_sel FOR lo_picture. ENDMETHOD. ENDCLASS. START-OF-SELECTION. PERFORM f_show_picture. FORM f_show_picture. DATA:lo_c6 TYPE REF TO c6. CREATE OBJECT lo_c6. WRITE:/ '1'. "显示picture lo_c6->m_init_picture( ). ENDFORM.