Бесконечный экран и фиксация размеров разделителя в нем

Современные технологии позволяют отображать информацию с очень высоким разрешением. И, как правило, диалоговые решения на коленке при высоком разрешении экрана оставляют много пустого места. Что смотрится совершенно не эргономично.

Выход есть.

Для решения этой задачи можно воспользоваться данным примером. При изменении размеров окна все управляющие элементы будут полностью вписываться в окно SAP GUI, а размер панели управления будет оставаться неизменным.

*&---------------------------------------------------------------------*
*& Report  ZYUGOV_TEST_INFINITY_SCREEN
*&
*&---------------------------------------------------------------------*
*&
*&
*&---------------------------------------------------------------------*

REPORT zyugov_test_infinity_screen.

TYPES gttyp_html TYPE STANDARD TABLE OF text255.

PARAMETERS p_grid TYPE flag AS CHECKBOX.

CONSTANTS gc_max_size TYPE i VALUE 99999.

DATA go_docking_container TYPE REF TO cl_gui_docking_container.
DATA go_splitter TYPE REF TO cl_gui_splitter_container.
DATA go_conteiner_left TYPE REF TO cl_gui_container.
DATA go_conteiner_right TYPE REF TO cl_gui_container.
DATA go_toolbar TYPE REF TO cl_gui_toolbar.
DATA go_browser TYPE REF TO cl_gui_html_viewer.
DATA go_salv_table TYPE REF TO cl_salv_table.

CLASS lcl_event_docking DEFINITION.
  PUBLIC SECTION.

    CLASS-METHODS:
      handle_size_control
         FOR EVENT size_control OF cl_gui_docking_container,
      handle_right_click
         FOR EVENT right_click  OF cl_gui_docking_container,
      handle_move_control
         FOR EVENT move_control OF cl_gui_docking_container.

  PRIVATE SECTION.
ENDCLASS.
*--------------------------------------------------------------
CLASS lcl_event_docking IMPLEMENTATION.

*----------------------------------------------------------------------
* define size setting store
*----------------------------------------------------------------------
  METHOD handle_size_control.
    go_docking_container->set_extension(
      EXPORTING
        extension  = gc_max_size
      EXCEPTIONS
        cntl_error = 1
        OTHERS     = 2
    ).
  ENDMETHOD.

  METHOD handle_move_control.
    go_docking_container->set_extension(
      EXPORTING
        extension  = gc_max_size
      EXCEPTIONS
        cntl_error = 1
        OTHERS     = 2
    ).
  ENDMETHOD.

  METHOD handle_right_click.

    IF sy-subrc = 0.

    ENDIF.

  ENDMETHOD.

ENDCLASS.

START-OF-SELECTION.

  CALL SCREEN 100.
*&---------------------------------------------------------------------*
*&      Module  STATUS_0100  OUTPUT
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
MODULE status_0100 OUTPUT.
  SET PF-STATUS 'STATUS_0100'.
  SET TITLEBAR '100'.

ENDMODULE.                 " STATUS_0100  OUTPUT
*&---------------------------------------------------------------------*
*&      Module  USER_COMMAND_0100  INPUT
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
MODULE user_command_0100 INPUT.
  CASE sy-ucomm.
    WHEN 'BACK'.
      LEAVE TO SCREEN 0.
    WHEN OTHERS.
  ENDCASE.
ENDMODULE.                 " USER_COMMAND_0100  INPUT
*&---------------------------------------------------------------------*
*&      Module  BUILD_SCREEN  OUTPUT
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
MODULE build_screen OUTPUT.

  DATA lt_html TYPE gttyp_html.
  DATA lv_assigned_url TYPE text255.
  DATA lv_style    TYPE i.

  IF go_splitter IS NOT BOUND.
    CREATE OBJECT go_splitter
      EXPORTING
        parent            = cl_gui_container=>default_screen " go_docking_container
        rows              = 1
        columns           = 2
      EXCEPTIONS
        cntl_error        = 1
        cntl_system_error = 2
        OTHERS            = 3.

    " Абсолютное задание размеров
    go_splitter->set_column_mode(
      EXPORTING
        mode              = cl_gui_splitter_container=>mode_absolute
      EXCEPTIONS
        cntl_error        = 1
        cntl_system_error = 2
        OTHERS            = 3
    ).

    " Задание размера
    go_splitter->set_column_width(
      EXPORTING
        id                = 1
        width             = 150
      EXCEPTIONS
        cntl_error        = 1
        cntl_system_error = 2
        OTHERS            = 3
    ).

    " Скрыть разделитель (аналогичный метод есть и для строки)
    go_splitter->set_column_sash(
        EXPORTING
          id                = 1
          type              = cl_gui_splitter_container=>type_sashvisible
          value             = cl_gui_splitter_container=>false
        EXCEPTIONS
          cntl_error        = 1
          cntl_system_error = 2
          OTHERS            = 3
      ).

    " Зафиксировать разделитель (аналогичный метод есть и для строки)
    go_splitter->set_column_sash(
        EXPORTING
          id                = 1
          type              = cl_gui_splitter_container=>type_movable
          value             = cl_gui_splitter_container=>false
        EXCEPTIONS
          cntl_error        = 1
          cntl_system_error = 2
          OTHERS            = 3
      ).

    go_splitter->get_container(
      EXPORTING
        row       = 1
        column    = 1
      RECEIVING
        container = go_conteiner_left
    ).

    go_splitter->get_container(
      EXPORTING
        row       = 1
        column    = 2
      RECEIVING
        container = go_conteiner_right
    ).

  ENDIF.

  IF go_toolbar IS NOT BOUND.
    CREATE OBJECT go_toolbar
      EXPORTING
        parent             = go_conteiner_left
        display_mode       = cl_gui_toolbar=>m_mode_vertical
      EXCEPTIONS
        cntl_install_error = 1
        cntl_error         = 2
        cntb_wrong_version = 3
        OTHERS             = 4.

    go_toolbar->add_button(
      EXPORTING
        fcode            = 'BTN'
        icon             = icon_create
        butn_type        = cntb_btype_button
        text             = 'Кнопка'
      EXCEPTIONS
        cntl_error       = 1
        cntb_btype_error = 2
        cntb_error_fcode = 3
        OTHERS           = 4
    ).
  ENDIF.

  IF p_grid IS INITIAL.
    IF go_browser IS NOT BOUND.
      CREATE OBJECT go_browser
        EXPORTING
          parent             = go_conteiner_right
        EXCEPTIONS
          cntl_error         = 1
          cntl_install_error = 2
          dp_install_error   = 3
          dp_error           = 4
          OTHERS             = 5.

      PERFORM build_html
        CHANGING lt_html.

      go_browser->load_data(
        IMPORTING
          assigned_url           = lv_assigned_url
        CHANGING
          data_table             = lt_html
        EXCEPTIONS
          dp_invalid_parameter   = 1
          dp_error_general       = 2
          cntl_error             = 3
          html_syntax_notcorrect = 4
          OTHERS                 = 5
      ).

      go_browser->show_url(
        EXPORTING
          url                    = lv_assigned_url
        EXCEPTIONS
          cntl_error             = 1
          cnht_error_not_allowed = 2
          cnht_error_parameter   = 3
          dp_error_general       = 4
          OTHERS                 = 5
      ).
    ENDIF.
  ELSE.
    DATA lt_dd01l TYPE TABLE OF dd01l.
    SELECT * FROM dd01l INTO TABLE lt_dd01l UP TO 200 ROWS.

    cl_salv_table=>factory(
      EXPORTING
        r_container    = go_conteiner_right
      IMPORTING
        r_salv_table   = go_salv_table
      CHANGING
        t_table        = lt_dd01l
    ).

    go_salv_table->display( ).
  ENDIF.

ENDMODULE.                 " BUILD_SCREEN  OUTPUT
*&---------------------------------------------------------------------*
*&      Form  BUILD_HTML
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*      <--P_LT_HTML  text
*----------------------------------------------------------------------*
FORM build_html
  CHANGING ct_html TYPE gttyp_html.

  APPEND '<html>' TO ct_html.
  APPEND '  <body>' TO ct_html.
  APPEND '  <H1>Hello World</H1>' TO ct_html.
  APPEND '  <table border="1" width="100%"><tr>' TO ct_html.
  APPEND '  <td>111111</td>' TO ct_html.
  APPEND '  <td>111111</td>' TO ct_html.
  APPEND '  <td>111111</td>' TO ct_html.
  APPEND '  <td>111111</td>' TO ct_html.
  APPEND '  <td>111111</td>' TO ct_html.
  APPEND '  <td>111111</td>' TO ct_html.
  APPEND '  <td>111111</td>' TO ct_html.
  APPEND '  <td>111111</td>' TO ct_html.
  APPEND '  <td>111111</td>' TO ct_html.
  APPEND '  <td>111111</td>' TO ct_html.
  APPEND '  <td>111111</td>' TO ct_html.
  APPEND '  <td>111111</td>' TO ct_html.
  APPEND '  <td>111111</td>' TO ct_html.
  APPEND '  <td>111111</td>' TO ct_html.
  APPEND '  <td>111111</td>' TO ct_html.
  APPEND '  <td>111111</td>' TO ct_html.
  APPEND '  <td>111111</td>' TO ct_html.
  APPEND '  <td>111111</td>' TO ct_html.
  APPEND '  </tr></table>' TO ct_html.
  APPEND '  </body>' TO ct_html.
  APPEND '</html>' TO ct_html.
ENDFORM.                    " BUILD_HTML