下午参考系统demo程序搞了个Picture Control的程序,看效果图:
代码如下:
TYPE-POOLS:CNDP.
*declarations
DATA:GO_PICTURE TYPE REF TO CL_GUI_PICTURE,
GO_PICTURE_CONTAINER TYPE REF TO CL_GUI_CUSTOM_CONTAINER.
DATA URL TYPE CNDP_URL.
DATA EVENT_TAB_LINE TYPE CNTL_SIMPLE_EVENT.
DATA EVENT_TAB TYPE CNTL_SIMPLE_EVENTS.
SET SCREEN 100.
*
CLASS C_EVENT_RECEIVER 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. "c_event_receiver DEFINITION
DATA EVENT_RECEIVER TYPE REF TO C_EVENT_RECEIVER.
*----------------------------------------------------------------------*
* MODULE statys_0100 OUTPUT
*----------------------------------------------------------------------*
*
*----------------------------------------------------------------------*
MODULE STATUS_0100 OUTPUT.
SET PF-STATUS 'ZTEST4'.
SET TITLEBAR 'ZTEST4'.
IF GO_PICTURE_CONTAINER IS INITIAL .
CREATE OBJECT GO_PICTURE_CONTAINER
EXPORTING
CONTAINER_NAME = 'PICTURE_CONTAINER'.
CREATE OBJECT GO_PICTURE
EXPORTING
PARENT = GO_PICTURE_CONTAINER.
CALL METHOD GO_PICTURE->SET_DISPLAY_MODE
EXPORTING
DISPLAY_MODE = CL_GUI_PICTURE=>DISPLAY_MODE_NORMAL.
*Register the events
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 GO_PICTURE->SET_REGISTERED_EVENTS
EXPORTING
EVENTS = EVENT_TAB.
*Create event receive
CREATE OBJECT EVENT_RECEIVER.
SET HANDLER EVENT_RECEIVER->EVENT_HANDLER_PICTURE_DBLCLICK
FOR GO_PICTURE.
SET HANDLER EVENT_RECEIVER->EVENT_HANDLER_CONTEXT_MENU
FOR GO_PICTURE.
SET HANDLER EVENT_RECEIVER->EVENT_HANDLER_CONTEXT_MENU_SEL
FOR GO_PICTURE.
*CALL METHOD GO_PICTURE->set_display_mode
*EXPORTING
* DISPLAY_MODE = CL_GUI_PICTURE=>
*load picture from url
* CALL METHOD GO_PICTURE->LOAD_PICTURE_FROM_SAP_ICONS
* EXPORTING
* ICON = ICON_DELETE
* EXCEPTIONS
* ERROR = 1.
CALL FUNCTION 'DP_PUBLISH_WWW_URL'
EXPORTING
OBJID = 'HTMLCNTL_TESTHTM2_SAP_AG'
LIFETIME = CNDP_LIFETIME_TRANSACTION
IMPORTING
URL = URL
EXCEPTIONS
OTHERS = 1.
IF SY-SUBRC = 0.
CALL METHOD GO_PICTURE->LOAD_PICTURE_FROM_URL_ASYNC
EXPORTING
URL = URL.
ENDIF.
ENDIF.
ENDMODULE. "statys_0100 OUTPUT
*----------------------------------------------------------------------*
* MODULE exit INPUT
*----------------------------------------------------------------------*
*
*----------------------------------------------------------------------*
MODULE USER_COMMAND_0100 INPUT .
CASE SY-UCOMM.
WHEN 'EXIT'.
FREE GO_PICTURE_CONTAINER.
FREE GO_PICTURE.
LEAVE PROGRAM.
SET SCREEN 0.
WHEN 'NORMAL'.
CALL METHOD GO_PICTURE->SET_DISPLAY_MODE
EXPORTING
DISPLAY_MODE = CL_GUI_PICTURE=>DISPLAY_MODE_NORMAL.
WHEN 'STRETCH'.
CALL METHOD GO_PICTURE->SET_DISPLAY_MODE
EXPORTING
DISPLAY_MODE = CL_GUI_PICTURE=>DISPLAY_MODE_STRETCH.
WHEN 'FIT'.
CALL METHOD GO_PICTURE->SET_DISPLAY_MODE
EXPORTING
DISPLAY_MODE = CL_GUI_PICTURE=>DISPLAY_MODE_FIT.
WHEN 'NORMAL_CTR'.
CALL METHOD GO_PICTURE->SET_DISPLAY_MODE
EXPORTING
DISPLAY_MODE = CL_GUI_PICTURE=>DISPLAY_MODE_NORMAL_CENTER.
WHEN 'FIT_CTR'.
CALL METHOD GO_PICTURE->SET_DISPLAY_MODE
EXPORTING
DISPLAY_MODE = CL_GUI_PICTURE=>DISPLAY_MODE_FIT_CENTER.
WHEN 'CLEAR'.
CALL METHOD GO_PICTURE->CLEAR_PICTURE.
WHEN OTHERS.
ENDCASE.
ENDMODULE. "EXIT INPUT
*----------------------------------------------------------------------*
* CLASS C_event_receiver IMPLEMENTATION
*----------------------------------------------------------------------*
*
*----------------------------------------------------------------------*
CLASS C_EVENT_RECEIVER IMPLEMENTATION.
METHOD EVENT_HANDLER_PICTURE_DBLCLICK.
DATA:POS_X(5) TYPE C,
POS_Y(5) TYPE C.
POS_X = MOUSE_POS_X.
POS_Y = MOUSE_POS_Y.
IF SENDER = GO_PICTURE.
MESSAGE S000(OK) WITH 'Double Click Events' POS_X POS_Y .
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 = 'Noral'
TEXT = 'NORMAL'.
CALL METHOD MENU->ADD_FUNCTION
EXPORTING
FCODE = 'Stretch'
TEXT = 'Stretch'.
CALL METHOD MENU->ADD_FUNCTION
EXPORTING
FCODE = 'Fit'
TEXT = 'Fit'.
CALL METHOD MENU->ADD_FUNCTION
EXPORTING
FCODE = 'Normal/centered'
TEXT = 'Normal/centered'.
CALL METHOD MENU->ADD_FUNCTION
EXPORTING
FCODE = 'Fit and center'
TEXT = 'Fit and center'.
CALL METHOD SENDER->DISPLAY_CONTEXT_MENU
EXPORTING
CONTEXT_MENU = MENU.
ENDMETHOD. "EVENT_HANDLER_CONTEXT_MENU
METHOD EVENT_HANDLER_CONTEXT_MENU_SEL.
DATA DISPLAY_MODE TYPE I.
IF FCODE = 'Noral'.
DISPLAY_MODE = CL_GUI_PICTURE=>DISPLAY_MODE_NORMAL.
ELSEIF FCODE = 'Stretch'.
DISPLAY_MODE = CL_GUI_PICTURE=>DISPLAY_MODE_STRETCH.
ELSEIF FCODE = 'Fit'.
DISPLAY_MODE = CL_GUI_PICTURE=>DISPLAY_MODE_FIT.
ELSEIF FCODE = 'Normal/centered'.
DISPLAY_MODE = CL_GUI_PICTURE=>DISPLAY_MODE_NORMAL_CENTER.
ELSEIF FCODE = 'Fit and center'.
DISPLAY_MODE = CL_GUI_PICTURE=>DISPLAY_MODE_FIT_CENTER.
ENDIF.
CALL METHOD SENDER->SET_DISPLAY_MODE
EXPORTING
DISPLAY_MODE = DISPLAY_MODE.
ENDMETHOD. "EVENT_HANDLER_CONTEXT_MENU_SEL
ENDCLASS. "C_event_receiver IMPLEMENTATION