Текущее время: Пт, авг 01 2025, 15:01

Часовой пояс: 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 часа


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

Сейчас этот форум просматривают: нет зарегистрированных пользователей


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

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