Создал класс оболочку для ActiveX (Forms.TextBox.1) контрола ZCL_EDITBOX (унаследовал от CL_GUI_CONTROL)
мне нужно ловить событие OnChange этого контрола в ABAP. Определяю событие OnChange = 2.
Code:
METHOD constructor.
DATA prog_id(80).
IF parent IS INITIAL.
RAISE create_error..
ENDIF.
CLASS cl_gui_cfw DEFINITION LOAD.
IF NOT activex IS INITIAL.
prog_id = 'Forms.TextBox.1'.
ELSEIF NOT javabean IS INITIAL.
prog_id = ''.
RAISE create_error.
ENDIF.
CALL METHOD super->constructor
EXPORTING
clsid = prog_id
shellstyle = shellstyle
parent = parent
lifetime = lifetime
name = name
EXCEPTIONS
OTHERS = 1.
IF sy-subrc 0.
RAISE create_error.
ENDIF.
DATA: my_simple_event TYPE cntl_simple_event,
my_simple_events TYPE cntl_simple_events.
my_simple_event-eventid = 2. "OnChange
my_simple_event-appl_event = space.
APPEND my_simple_event TO my_simple_events.
CALL METHOD me->set_registered_events
EXPORTING
events = my_simple_events.
ENDMETHOD.
METHOD set_registered_events.
IF h_control IS INITIAL.
RAISE cntl_error.
ENDIF.
DATA:
simple_event TYPE cntl_simple_event,
ex_event TYPE cntl_event,
events_ex TYPE cntl_events.
LOOP AT events INTO simple_event.
ex_event-eventid = simple_event-eventid.
ex_event-is_shellevent = space.
IF simple_event-appl_event IS INITIAL.
ex_event-is_systemevent = 'X'.
ENDIF.
APPEND ex_event TO events_ex.
CLEAR simple_event.
CLEAR ex_event.
ENDLOOP.
CALL METHOD me->set_registered_events_ex
EXPORTING
eventtab = events_ex
EXCEPTIONS
OTHERS = 1.
IF sy-subrc 0.
RAISE cntl_error.
ENDIF.
registered_simple_events[] = events[].
ENDMETHOD.
METHOD dispatch.
CASE eventid.
WHEN 2.
DATA lv_text TYPE string.
CALL METHOD me->GET_PROPERTY
EXPORTING
property = 'Text'
IMPORTING
value = lv_text.
CALL METHOD cl_gui_cfw=>flush.
RAISE EVENT onchange EXPORTING text = lv_text.
WHEN OTHERS.
RAISE cntl_error.
ENDCASE.
ENDMETHOD.
пишу тестовую програму
Code:
REPORT z_testeditbox.
DATA: ok_code LIKE sy-ucomm,
my_edit TYPE REF TO zcl_editbox,
custom_container TYPE REF TO cl_gui_custom_container.
CLASS lcl_handler DEFINITION.
PUBLIC SECTION.
METHODS: onchange FOR EVENT onchange OF zcl_editbox IMPORTING text.
ENDCLASS.
CLASS lcl_handler IMPLEMENTATION.
METHOD onchange.
message text TYPE 'I'.
ENDMETHOD.
ENDCLASS.
DATA:
handler TYPE REF TO lcl_handler.
START-OF-SELECTION.
CALL SCREEN 0100.
MODULE status_0100 OUTPUT.
IF custom_container IS INITIAL.
CREATE OBJECT custom_container
EXPORTING
container_name = 'CONTAINER'.
ENDIF.
IF my_edit IS INITIAL.
CREATE OBJECT my_edit
EXPORTING
parent = custom_container.
ENDIF.
IF handler IS INITIAL.
CREATE OBJECT handler.
SET HANDLER handler->onchange FOR my_edit.
ENDIF.
ENDMODULE.
MODULE user_command_0100 INPUT.
CASE ok_code.
WHEN 'EXIT'.
SET SCREEN 0.
WHEN OTHERS.
ENDCASE.
ENDMODULE.
запускаю И!....ловиться тольок первое событие...и контрол толи теряет фокус толи блокируется, но когда в него принудительно жамкнуть мышкой ввод опять возможен...ПОЧЕМУ ?...как исправить? Спасибо.