Автор Тема: CL_GUI_SPLITTER_CONTAINER: значения eventid для событий  (Прочитано 13141 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн A.

  • Newbie
  • *
  • Сообщений: 110
  • Репутация: +1/-0
  • YearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYears
День добрый, уважаемые.

Хочу обрабатывать события MOVE_CONTROL и SIZE_CONTROL для объекта класса CL_GUI_SPLITTER_CONTAINER. Делаю как обычно: создаю класс с методами-обработчиками для событий, получаю уже зарегистрированные события методом GET_REGISTERED_EVENTS, и далее надо дополнить таблицу событий, чтобы затем выполнить метод SET_REGISTERED_EVENTS. Но дело в том, что коды, которые присваиваются, неизвестны! И как узнать - неясно.

Сделал так: заполнил таблицу значениями от 1 до 20 в цикле DO, и попробовал зарегистрировать. Зарегистрировались события без ошибок, но никак не проявляются себя. Объект для класса обработки событий создан, методы обработчики событий определены через SET HANDLER для объекта сплиттера. Реакции нет. В имплементации методов стоит просто вывод сообщения MESSAGE 'foobar' TYPE 'I'.

Вопрос, собственно, в следующем: как узнать значения EventID для нужных событий для класса CL_GUI_SPLITTER_CONTAINER? Либо, если дело не в этом, как реагировать на указанные события?


Код: You are not allowed to view links. Register or Login
DATA:   g_cl_gui_splitter_cont TYPE REF TO cl_gui_splitter_container.


...


CLASS lcl_splitter_event_receiver DEFINITION.

  PUBLIC SECTION.

    METHODS
      handle_move_control
        FOR EVENT move_control OF cl_gui_splitter_container.

    METHODS
      handle_size_control
        FOR EVENT size_control OF cl_gui_splitter_container.


ENDCLASS.                    "lcl_splitter_event_receiver DEFINITION



CLASS lcl_splitter_event_receiver IMPLEMENTATION.

  METHOD handle_move_control.
    MESSAGE 'handle_move_control' TYPE 'I'.
  ENDMETHOD.                    "handle_move_control

  METHOD handle_size_control.
    MESSAGE 'handle_size_control' TYPE 'I'.
  ENDMETHOD.                    "handle_size_control


ENDCLASS.                    "lcl_splitter_event_receiver IMPLEMENTATION


...


  CREATE OBJECT g_cl_gui_splitter_cont
    EXPORTING
      parent     = g_cl_gui_custom_cont
      rows       = 4
      columns    = 1
    EXCEPTIONS
      OTHERS     = 1.

* Переменные для событий
  DATA: lt_events TYPE cntl_simple_events,
        l_event TYPE cntl_simple_event.
  DATA: l_event_splitter_receiver TYPE REF TO lcl_splitter_event_receiver.

  CLEAR: lt_events[], l_event.

* Получить уже имеющиеся
  CALL METHOD g_cl_gui_splitter_cont->get_registered_events
    IMPORTING
      events = lt_events.

* События
  DO 100 TIMES.
    l_event-eventid = sy-index.
    APPEND l_event TO lt_events.
  ENDDO.

* Зарегистрировать события
  CALL METHOD g_cl_gui_splitter_cont->set_registered_events
    EXPORTING
      events                    = lt_events
    EXCEPTIONS
      cntl_error                = 1
      cntl_system_error         = 2
      illegal_event_combination = 3.

* Создать объект и хэндлер
  CREATE OBJECT l_event_splitter_receiver.
  SET HANDLER l_event_splitter_receiver->handle_move_control FOR g_cl_gui_splitter_cont.
  SET HANDLER l_event_splitter_receiver->handle_size_control FOR g_cl_gui_splitter_cont.

« Последнее редактирование: Январь 28, 2010, 03:30:20 pm от A. »

Оффлайн Dmitriy

  • SAP ECC 6.0
  • Кухня
  • Newbie
  • *
  • Сообщений: 380
  • Репутация: +0/-0
  • Пол: Мужской
  • Embracive Fire
  • YearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYears
Re: CL_GUI_SPLITTER_CONTAINER: значения eventid для событий
« Ответ #1 : Январь 28, 2010, 08:08:22 pm »
Код: You are not allowed to view links. Register or Login
  constants EVENT_LEFT_CLICK_DESIGN type I value 1 .
  constants EVENT_LEFT_CLICK_RUN type I value 16 .
  constants EVENT_MOVE type I value 11 .
  constants EVENT_RIGHT_CLICK type I value 2 .
  constants EVENT_SIZE type I value 12 .

Оффлайн A.

  • Newbie
  • *
  • Сообщений: 110
  • Репутация: +1/-0
  • YearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYears
Re: CL_GUI_SPLITTER_CONTAINER: значения eventid для событий
« Ответ #2 : Январь 28, 2010, 08:17:51 pm »
Спасибо, потом уже и сам нашел, они объявлены как Protected, напрямую через => использовать не получилось.

Однако, события не срабатывают! :-) Может быть сап подразумевает под этими событиями движение всего объекта-сплиттера по кастом-гуи-контейнеру? :-)

Оффлайн Dmitriy

  • SAP ECC 6.0
  • Кухня
  • Newbie
  • *
  • Сообщений: 380
  • Репутация: +0/-0
  • Пол: Мужской
  • Embracive Fire
  • YearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYears
Re: CL_GUI_SPLITTER_CONTAINER: значения eventid для событий
« Ответ #3 : Январь 28, 2010, 08:29:30 pm »
Да не за что, со сплитом не доводилось работать просто, вот и заинтересовало. Тут коллега подсказывает: "думается, что move не будет ловиться...". ;)

Оффлайн Uukrul

  • SAP ECC 6.0 Ehp(*)
  • Administrator
  • Epic Member
  • *****
  • Сообщений: 3 758
  • Репутация: +47/-0
  • Пол: Мужской
  • YearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYears
    • Sapforum.BIZ
Re: CL_GUI_SPLITTER_CONTAINER: значения eventid для событий
« Ответ #4 : Январь 28, 2010, 08:32:53 pm »
You are not allowed to view links. Register or Login
Да не за что, со сплитом не доводилось работать просто, вот и заинтересовало. Тут коллега подсказывает: "думается, что move не будет ловиться...". ;)
Мне тоже кажется что не будет, так как должен отработать абап-код, а оно находится на апликейшене, значит надо просто апликейшин при этом загрузить так, что тому мало не покажется... короче не делфи однако...

Оффлайн A.

  • Newbie
  • *
  • Сообщений: 110
  • Репутация: +1/-0
  • YearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYears
Re: CL_GUI_SPLITTER_CONTAINER: значения eventid для событий
« Ответ #5 : Январь 28, 2010, 08:39:46 pm »
Как тогда можно отловить событие изменения размеров областей в сплиттер-контейнере? Возможно, что в PAI запихнуть логику, но когда тот PAI сработает, всегда ли, когда нужно - вопрос, однако... Либо в PBO...

Оффлайн Dmitriy

  • SAP ECC 6.0
  • Кухня
  • Newbie
  • *
  • Сообщений: 380
  • Репутация: +0/-0
  • Пол: Мужской
  • Embracive Fire
  • YearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYears
Re: CL_GUI_SPLITTER_CONTAINER: значения eventid для событий
« Ответ #6 : Январь 28, 2010, 09:18:18 pm »
Uukrul верно говорит про ресурсы. А использовать pai и pbo не получится.
Цитировать
...можно попробовать внедриться в защищенный метод и попробовать оттуда с залинковановым объектом что нибудь сотворить, но вероятность благоприятного исхода ~ 0.

Оффлайн Uukrul

  • SAP ECC 6.0 Ehp(*)
  • Administrator
  • Epic Member
  • *****
  • Сообщений: 3 758
  • Репутация: +47/-0
  • Пол: Мужской
  • YearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYears
    • Sapforum.BIZ
Re: CL_GUI_SPLITTER_CONTAINER: значения eventid для событий
« Ответ #7 : Январь 28, 2010, 09:25:32 pm »
Вопрос не по теме, а зачем ловить изменение размеров области? Вроде как элементы умеют сами подстраиваться под изменение областей.

Оффлайн Dmitriy

  • SAP ECC 6.0
  • Кухня
  • Newbie
  • *
  • Сообщений: 380
  • Репутация: +0/-0
  • Пол: Мужской
  • Embracive Fire
  • YearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYears
Re: CL_GUI_SPLITTER_CONTAINER: значения eventid для событий
« Ответ #8 : Январь 28, 2010, 09:32:21 pm »
Цитата: Uukrul  link=topic=1029.msg6408#msg6408 date=1264706732
Вопрос не по теме, а зачем ловить изменение размеров области? Вроде как элементы умеют сами подстраиваться под изменение областей.
Совершенно верно, умеют. Присоединяюсь к вопросу.

Оффлайн A.

  • Newbie
  • *
  • Сообщений: 110
  • Репутация: +1/-0
  • YearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYears
Re: CL_GUI_SPLITTER_CONTAINER: значения eventid для событий
« Ответ #9 : Январь 29, 2010, 08:11:26 am »
В зависимости от размеров областей необходимо изменять заголовок отчета.

Попробовал остальные эвенты - вообще никакие не срабатывают...
« Последнее редактирование: Январь 29, 2010, 08:19:51 am от A. »

Оффлайн Uukrul

  • SAP ECC 6.0 Ehp(*)
  • Administrator
  • Epic Member
  • *****
  • Сообщений: 3 758
  • Репутация: +47/-0
  • Пол: Мужской
  • YearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYears
    • Sapforum.BIZ
Re: CL_GUI_SPLITTER_CONTAINER: значения eventid для событий
« Ответ #10 : Январь 29, 2010, 10:30:30 am »
You are not allowed to view links. Register or Login
В зависимости от размеров областей необходимо изменять заголовок отчета.
Тип длинное, среднее и краткое? Я бы не заморачивался на таком, это уже из разряда ну очень сильный бантиков...

Оффлайн A.

  • Newbie
  • *
  • Сообщений: 110
  • Репутация: +1/-0
  • YearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYears
Re: CL_GUI_SPLITTER_CONTAINER: значения eventid для событий
« Ответ #11 : Январь 29, 2010, 10:47:33 am »
Ну, не совсем. На одном экране расположены три отчета, построенные на одних данных, но в разных разрезах. С помощью дивайдеров можно изменять размеры области экрана, отданных под один или другой отчет. Можно даже скрыть один или два, и оставить все пространство одному. Так вот, в зависимости от значения высоты элемента сплиттер-контейнера, необходимо выводить заголовок.

Допустим, отчет №1 занимает 60%, отчет №2 - 38%, отчет №3 - 2%. Произвожу сравнение каждой величины с заданной константой visible_level, которая определяет, когда отчет считается видимым. В данном случае получаются видимыми отчеты №1 и №2. Ну и я присваивают SET TITLEBAR '5101' "Отчет №1 & Отчет №2". Последняя цифра кода титл-бара - это состояние, в котором могут находится отчеты. Всего таких состояний будет 7 (2^3 – 1, т.к. состояния невидимости всех отчетов нет). Для каждого состояния определен титл-бар - всего будет 7 штук. Определение состояние производится как раз на основании высот.

Можно было, конечно, сделать на закладках, или слева налабать менюшку как в Report Painter, где выбирается отчет для вывода, однако в данном случае упор сделан на то, чтобы ОДНОВРЕМЕННО видеть данные в нужных разрезах. Реализована процедура синхронного перехода и просмотра между отчета.

В общем, все на благо пользователя, остался единственный бантик - это названия писать, но как поймать событие изменения размеров частей сплиттер-контейнера - я не знаю... Перекопал SDN, всякие форумы, просто гуглил - ничего не могу найти.

P.S. На данный момент зашил это в PBO, но моменты срабатывания...

Оффлайн Uukrul

  • SAP ECC 6.0 Ehp(*)
  • Administrator
  • Epic Member
  • *****
  • Сообщений: 3 758
  • Репутация: +47/-0
  • Пол: Мужской
  • YearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYears
    • Sapforum.BIZ
Re: CL_GUI_SPLITTER_CONTAINER: значения eventid для событий
« Ответ #12 : Январь 29, 2010, 10:53:15 am »
You are not allowed to view links. Register or Login
P.S. На данный момент зашил это в PBO, но моменты срабатывания...
Ну наверное это и есть единственное решение...

Оффлайн NachDenken

  • Newbie
  • *
  • Сообщений: 158
  • Репутация: +9/-0
  • YearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYears
Re: CL_GUI_SPLITTER_CONTAINER: значения eventid для событий
« Ответ #13 : Февраль 03, 2010, 11:16:56 am »
сильные хотелки у ваших заказчиков  ???