Современные технологии позволяют отображать информацию с очень высоким разрешением. И, как правило, диалоговые решения на коленке при высоком разрешении экрана оставляют много пустого места. Что смотрится совершенно не эргономично.
Выход есть.
Для решения этой задачи можно воспользоваться данным примером. При изменении размеров окна все управляющие элементы будут полностью вписываться в окно 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