REPORT DEMO_CUSTOM_CONTROL .
* Declarations *****************************************************
*注意程序是参照标准DEMO:DEMO_CUSTOM_CONTORL创建的,屏幕跟标准的基本一直,出去新增加了一个更改按钮外!
CLASS EVENT_HANDLER DEFINITION.
PUBLIC SECTION.
METHODS: HANDLE_F1 FOR EVENT F1 OF CL_GUI_TEXTEDIT
IMPORTING SENDER,
HANDLE_F4 FOR EVENT F4 OF CL_GUI_TEXTEDIT
IMPORTING SENDER.
ENDCLASS.
DATA: OK_CODE LIKE SY-UCOMM,
SAVE_OK LIKE SY-UCOMM.
DATA: INIT,
CONTAINER TYPE REF TO CL_GUI_CUSTOM_CONTAINER,
EDITOR TYPE REF TO CL_GUI_TEXTEDIT.
DATA: EVENT_TAB TYPE CNTL_SIMPLE_EVENTS,
EVENT TYPE CNTL_SIMPLE_EVENT.
DATA: LINE(256) TYPE C,
TEXT_TAB LIKE STANDARD TABLE OF LINE,
FIELD LIKE LINE.
DATA HANDLE TYPE REF TO EVENT_HANDLER.
* Reporting Events ***************************************************
START-OF-SELECTION.
LINE = 'First line in TextEditControl'.
APPEND LINE TO TEXT_TAB.
LINE = '--------------------------------------------------'.
APPEND LINE TO TEXT_TAB.
LINE = '...'.
APPEND LINE TO TEXT_TAB.
CALL SCREEN 100.
* Dialog Modules *****************************************************
MODULE STATUS_0100 OUTPUT.
SET PF-STATUS 'SCREEN_100'.
IF INIT IS INITIAL.
INIT = 'X'.
CREATE OBJECT: CONTAINER EXPORTING CONTAINER_NAME = 'TEXTEDIT',
EDITOR EXPORTING PARENT = CONTAINER,
HANDLE.
EVENT-EVENTID = CL_GUI_TEXTEDIT=>EVENT_F1.
EVENT-APPL_EVENT = ' '. "system event
APPEND EVENT TO EVENT_TAB.
EVENT-EVENTID = CL_GUI_TEXTEDIT=>EVENT_F4.
EVENT-APPL_EVENT = 'X'. "application event
APPEND EVENT TO EVENT_TAB.
CALL METHOD: EDITOR->SET_REGISTERED_EVENTS
EXPORTING EVENTS = EVENT_TAB.
SET HANDLER HANDLE->HANDLE_F1
HANDLE->HANDLE_F4 FOR EDITOR.
ENDIF.
**---将初始化的值显示到text中-----
CALL METHOD EDITOR->SET_TEXT_AS_STREAM EXPORTING TEXT = TEXT_TAB.
ENDMODULE.
*---------------------------------------------------------------------*
* MODULE cancel INPUT *
*---------------------------------------------------------------------*
* ........ *
*---------------------------------------------------------------------*
MODULE CANCEL INPUT.
LEAVE PROGRAM.
ENDMODULE.
*---------------------------------------------------------------------*
* MODULE user_command_0100 INPUT *
*---------------------------------------------------------------------*
* ........ *
*---------------------------------------------------------------------*
MODULE USER_COMMAND_0100 INPUT.
DATA: FLAG TYPE C VALUE 'X'.
SAVE_OK = OK_CODE.
CLEAR OK_CODE.
CASE SAVE_OK.
WHEN 'INSERT'.
CALL METHOD EDITOR->GET_TEXT_AS_STREAM IMPORTING TEXT = TEXT_TAB.
WHEN 'F1'.
MESSAGE I888(SABAPDOCU) WITH TEXT-001.
WHEN 'CHANGE'.
*---调用事件-----
IF FLAG = 'X'."状态判断如果是X则为显示状态
CALL METHOD EDITOR->SET_READONLY_MODE EXPORTING
READONLY_MODE = '1'.
FLAG = ''.
ELSE."状态判断如果是空则为编辑状态
CALL METHOD EDITOR->SET_READONLY_MODE EXPORTING
READONLY_MODE = '0'.
FLAG = 'X'.
ENDIF.
WHEN OTHERS.
MESSAGE I888(SABAPDOCU) WITH TEXT-002.
CALL METHOD CL_GUI_CFW=>DISPATCH. "for application events
MESSAGE I888(SABAPDOCU) WITH TEXT-003.
ENDCASE.
SET SCREEN 100.
ENDMODULE.
* Class Implementations **********************************************
CLASS EVENT_HANDLER IMPLEMENTATION.
METHOD HANDLE_F1.
DATA ROW TYPE I.
MESSAGE I888(SABAPDOCU) WITH TEXT-004.
CALL METHOD SENDER->GET_SELECTION_POS
IMPORTING FROM_LINE = ROW.
CALL METHOD SENDER->GET_LINE_TEXT
EXPORTING LINE_NUMBER = ROW
IMPORTING TEXT = FIELD.
CALL METHOD CL_GUI_CFW=>SET_NEW_OK_CODE "raise PAI for
EXPORTING NEW_CODE = 'F1'. "system events
CALL METHOD CL_GUI_CFW=>FLUSH.
ENDMETHOD.
METHOD HANDLE_F4.
DATA ROW TYPE I.
MESSAGE I888(SABAPDOCU) WITH TEXT-005.
CALL METHOD SENDER->GET_SELECTION_POS
IMPORTING FROM_LINE = ROW.
CALL METHOD SENDER->GET_LINE_TEXT
EXPORTING LINE_NUMBER = ROW
IMPORTING TEXT = FIELD.
CALL METHOD CL_GUI_CFW=>FLUSH.
ENDMETHOD.
ENDCLASS.