*&---------------------------------------------------------------------* *& Report ZTEST_CWBK *& *&---------------------------------------------------------------------* *& *& *&---------------------------------------------------------------------* REPORT ztest_cwbk. CONSTANTS: line_length TYPE i VALUE 100. DATA: ok_code LIKE sy-ucomm. DATA: * Create reference to the custom container custom_container TYPE REF TO cl_gui_custom_container, * Create reference to the TextEdit control editor TYPE REF TO cl_gui_textedit, repid LIKE sy-repid. * Utillity table to load texts ********************************************************************** TYPES: BEGIN OF t_texttable, line(line_length) TYPE c, END OF t_texttable. DATA: i_texttable TYPE TABLE OF t_texttable, g_loaded(1) TYPE c. ********************************************************************** * Impmenting events ********************************************************************** DATA: event_type(20) TYPE c, * Internal table for events that should be registred i_events TYPE cntl_simple_events, * Structure for oneline of the table wa_events TYPE cntl_simple_event. *---------------------------------------------------------------------* * CLASS lcl_event_handler DEFINITION *---------------------------------------------------------------------* CLASS lcl_event_handler DEFINITION. PUBLIC SECTION. CLASS-METHODS: catch_dblclick FOR EVENT dblclick OF cl_gui_textedit IMPORTING sender. ENDCLASS. CLASS lcl_event_handler IMPLEMENTATION. METHOD catch_dblclick. DATA: from_line TYPE i, from_pos TYPE i, to_line TYPE i, to_pos TYPE i, wa_texttable TYPE t_texttable. * event_type = 'Event DBLCLICK raised'. * Reacting to the system event call method cl_gui_cfw=>set_new_ok_code exporting new_code = 'SHOW'. * Read the position of the double click CALL METHOD sender->get_selection_pos IMPORTING from_line = from_line from_pos = from_pos to_line = to_line to_pos = to_pos. * table that contains text IF NOT g_loaded IS INITIAL. CALL METHOD sender->get_text_as_r3table IMPORTING table = i_texttable. * Read the line of the internal table that was clicked READ TABLE i_texttable INDEX from_line INTO wa_texttable. IF sy-subrc <> 0. EXIT. ENDIF. IF wa_texttable+0(1) CS '*'. SHIFT wa_texttable. ELSEIF wa_texttable+0(1) NS '*'. SHIFT wa_texttable RIGHT. wa_texttable+0(1) = '*'. ENDIF. modify i_texttable from wa_texttable index from_line. * Reload texts from h einternal table perform load_texts. ENDIF. ENDMETHOD. ENDCLASS. START-OF-SELECTION. SET SCREEN '100'. *&---------------------------------------------------------------------* *& Module USER_COMMAND_0100 INPUT *&---------------------------------------------------------------------* * text *----------------------------------------------------------------------* MODULE user_command_0100 INPUT. DATA str TYPE c. DATA sline TYPE i. CASE ok_code. WHEN 'EXIT'. LEAVE TO SCREEN 0. WHEN 'IMP'. * event_type = 'System dblclick'. * perform load_texts. PERFORM get_texts. "读取文本框到内表 ENDCASE. * Call the Dispacth method to initiate application event handling * call method cl_gui_cfw=>Dispatch. ENDMODULE. " USER_COMMAND_0100 INPUT *&---------------------------------------------------------------------* *& Module STATUS_0100 OUTPUT *&---------------------------------------------------------------------* * text *----------------------------------------------------------------------* MODULE status_0100 OUTPUT. SET PF-STATUS 'MAIN100'. IF editor IS INITIAL. repid = sy-repid. * Create obejct for custom container CREATE OBJECT custom_container EXPORTING container_name = 'MYCONTAINER1' EXCEPTIONS cntl_error = 1 cntl_system_error = 2 create_error = 3 lifetime_error = 4 lifetime_dynpro_dynpro_link = 5 OTHERS = 6. IF sy-subrc <> 0. MESSAGE ID sy-msgid TYPE 'I' NUMBER sy-msgno WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4. ENDIF. * Create obejct for the TextEditor control CREATE OBJECT editor EXPORTING wordwrap_mode = cl_gui_textedit=>wordwrap_at_fixed_position wordwrap_position = line_length wordwrap_to_linebreak_mode = cl_gui_textedit=>true parent = custom_container EXCEPTIONS error_cntl_create = 1 error_cntl_init = 2 error_cntl_link = 3 error_dp_create = 4 gui_type_not_supported = 5 OTHERS = 6. IF sy-subrc <> 0. MESSAGE ID sy-msgid TYPE 'I' NUMBER sy-msgno WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4. ENDIF. * Link the event handler method to the event and the * TextEdit control SET HANDLER lcl_event_handler=>catch_dblclick FOR editor. * Register the event in the internal table i_events wa_events-eventid = cl_gui_textedit=>event_double_click. * wa_events-appl_event = 'X'. "This is an application event wa_events-appl_event = space. "This is a system event append wa_events to i_events. * Pass the table to the TextEdit control using method * set_registred_events call method editor->set_registered_events exporting events = i_events. ENDIF. ENDMODULE. " STATUS_0100 OUTPUT *&---------------------------------------------------------------------* *& Form LOAD_TEXTS *&---------------------------------------------------------------------* * text *----------------------------------------------------------------------* * --> p1 text * <-- p2 text *----------------------------------------------------------------------* form LOAD_TEXTS . TYPES: BEGIN OF t_texttable, line(line_length) TYPE c, END OF t_texttable. DATA i_texttable TYPE TABLE OF t_texttable. * Create internal table with texts APPEND 'This a method that fills the TextEdit control' TO i_texttable. APPEND 'with a text.' TO i_texttable. DO 10 TIMES. APPEND 'hallo world !' TO i_texttable. ENDDO. * Load TextEdit control with texts CALL METHOD editor->set_text_as_r3table EXPORTING table = i_texttable. IF sy-subrc > 0. * Display an error message EXIT. ENDIF. * All methods that operates on controls are transferred to the frontend * by a RFC calls. the method FLUSH is used to determine when this is done. CALL METHOD cl_gui_cfw=>flush. IF sy-subrc > 0. * Display an error message ENDIF. endform. " LOAD_TEXTS *&---------------------------------------------------------------------* *& Form GET_TEXTS *&---------------------------------------------------------------------* form GET_TEXTS . TYPES: BEGIN OF t_texttable, line(line_length) TYPE c, END OF t_texttable. DATA i_texttable TYPE TABLE OF t_texttable. *该方法可以读取编辑文本框输入的内容 CALL METHOD editor->get_text_as_r3table IMPORTING table = i_texttable. endform. " GET_TEXTS