Текущее время: Сб, авг 02 2025, 05:41

Часовой пояс: UTC + 3 часа


Правила форума


ВНИМАНИЕ!

Вопросы по SAP Query и Quick View - сюда



Начать новую тему Ответить на тему  [ Сообщений: 4 ] 
Автор Сообщение
 Заголовок сообщения: Custom ActiveX Control !!! ОШИБКА !!!
СообщениеДобавлено: Пн, апр 13 2009, 13:35 
Начинающий
Начинающий

Зарегистрирован:
Пт, янв 16 2009, 21:36
Сообщения: 20
Пол: Мужской
Всем привет. Значит ситуация такая:
1) Создал класс-оболочку "zcl_editbox"(насл. от CL_GUI_CONTROL) для ActiveX контрола "Forms.TextBox.1"
1.1) Переопределил CONSTRUCTOR, SET_REGISTERED_EVENTS, DISPATCH все как положено.
2) Создал программу в которой на экране лежит контейнер и в PBO создается экземпляр zcl_editbox
3) Задача такая: отловить событие на любое изменение (onchange) в этом контроле.

И проблемма: событие совится успешно, но после первой ловли контрол как бы блокируется для дальнейшего ввода,
и лишь после того как в него ткнуть мышкой в него опять можно вводить, хотя только ОДНИН символ, и проблемма опять повторяется.

КАК РЕШИТЬ ПРОБЛЕММУ!? Я всю голову переломал. Спасибо.

код zcl_editbox:
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.


Code:
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.


Code:
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.                    "lcl_handler DEFINITION

CLASS lcl_handler IMPLEMENTATION.
  METHOD onchange.
    message 'df' TYPE 'I'.
  ENDMETHOD.
ENDCLASS.                    "lcl_handler IMPLEMENTATION


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.                 " STATUS_0100  OUTPUT

MODULE user_command_0100 INPUT.
  CASE ok_code.
    WHEN 'EXIT'.
      SET SCREEN 0.
    WHEN OTHERS.
  ENDCASE.
ENDMODULE.


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Custom ActiveX Control !!! ОШИБКА !!!
СообщениеДобавлено: Пн, апр 13 2009, 13:58 
Специалист
Специалист
Аватара пользователя

Зарегистрирован:
Вт, мар 03 2009, 12:33
Сообщения: 141
может попробовать чтонибудь типа CL_GUI_CONTROL=>SET_FOCUS в dispatch?


Принять этот ответ
Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения: Re: Custom ActiveX Control !!! ОШИБКА !!!
СообщениеДобавлено: Пн, апр 13 2009, 14:05 
Начинающий
Начинающий

Зарегистрирован:
Пт, янв 16 2009, 21:36
Сообщения: 20
Пол: Мужской
Пробывал. Не помагает :(


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Custom ActiveX Control !!! ОШИБКА !!!
СообщениеДобавлено: Вт, апр 14 2009, 05:55 
Начинающий
Начинающий

Зарегистрирован:
Пт, янв 16 2009, 21:36
Сообщения: 20
Пол: Мужской
ЛЮДИ ПОМОГИТЕ!! Очень надо! :(


Принять этот ответ
Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 4 ] 

Часовой пояс: UTC + 3 часа


Кто сейчас на конференции

Сейчас этот форум просматривают: Google [Bot]


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  
cron
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Русская поддержка phpBB