Variante 1 (cl_gui_toolbar)
* https://www.tricktresor.de/blog/hacking-sapgui/
DATA: o_cnt_gos TYPE REF TO cl_gui_gos_container.
DATA: o_toolbar TYPE REF TO cl_gui_toolbar.
* Eventhandler für Toolbar-Buttons
CLASS lcl_events DEFINITION.
PUBLIC SECTION.
TYPES: ty_it_events TYPE STANDARD TABLE OF cntl_simple_event WITH DEFAULT KEY.
CLASS-METHODS:
on_function_selected FOR EVENT function_selected OF cl_gui_toolbar
IMPORTING
fcode.
ENDCLASS.
CLASS lcl_events IMPLEMENTATION.
METHOD on_function_selected.
MESSAGE fcode TYPE 'S'.
ENDMETHOD.
ENDCLASS.
* Checkbox zum anzeigen / verstecken des GOS-Containers
PARAMETERS: p_chk1 AS CHECKBOX USER-COMMAND cmd1.
INITIALIZATION.
* GOS-Container mit Breite = 300
o_cnt_gos = NEW #( width = 300 ).
* Toolbar horizontal mit Buttons
o_toolbar = NEW #( parent = o_cnt_gos
display_mode = cl_gui_toolbar=>m_mode_horizontal ).
o_toolbar->add_button( fcode = 'BTN1'
icon = icon_open
butn_type = cntb_btype_button ).
o_toolbar->add_button( fcode = ''
icon = ''
butn_type = cntb_btype_sep ).
o_toolbar->add_button( fcode = 'BTN2'
icon = icon_system_save
butn_type = cntb_btype_button ).
DATA(it_events) = VALUE lcl_events=>ty_it_events( ( eventid = cl_gui_toolbar=>m_id_function_selected
appl_event = abap_true ) ).
o_toolbar->set_registered_events( events = it_events ).
SET HANDLER lcl_events=>on_function_selected FOR o_toolbar.
AT SELECTION-SCREEN.
CASE sy-ucomm.
* Checkbox geklickt -> GOS-Container ein-/ausblenden
WHEN 'CMD1'.
o_cnt_gos->set_visible( COND abap_bool( WHEN p_chk1 = abap_true THEN abap_false ELSE abap_true ) ).
ENDCASE.
START-OF-SELECTION.
WRITE: / p_chk1.
Variante 2 (cl_gui_textedit)
DATA: o_cnt_gos TYPE REF TO cl_gui_gos_container.
DATA: o_edit TYPE REF TO cl_gui_textedit.
PARAMETERS: p_matnr type matnr.
INITIALIZATION.
* Fensterbreite des SAP-Fensters
DATA(lv_x_metric) = cl_gui_cfw=>compute_metric_from_dynp( metric = cl_gui_control=>metric_pixel
x_or_y = 'X'
in = sy-scols ).
* GOS-Container mit akt. Fensterbreite
o_cnt_gos = NEW #( width = lv_x_metric ).
* Editorzeile im Titel
o_edit = NEW #( wordwrap_mode = cl_gui_textedit=>wordwrap_at_windowborder
wordwrap_to_linebreak_mode = cl_gui_textedit=>true
parent = o_cnt_gos ).
* feste Zeichenbreite
o_edit->set_font_fixed( mode = cl_gui_textedit=>true ).
* Anzeige von Toolbar und Statusbar des Texteditors unterdrücken
o_edit->set_toolbar_mode( toolbar_mode = cl_gui_textedit=>false ).
o_edit->set_statusbar_mode( statusbar_mode = cl_gui_textedit=>false ).
o_edit->set_textstream( 'Testtext' ).
START-OF-SELECTION.
IF o_edit IS BOUND.
* Text aus Editorzeile holen
DATA(lv_text) = ||.
o_edit->get_textstream( IMPORTING text = lv_text ).
cl_gui_cfw=>flush( ).
WRITE: / lv_text.
ENDIF.
Variante 3 (cl_gui_html_viewer)
DATA: o_cnt_gos TYPE REF TO cl_gui_gos_container.
DATA: o_html TYPE REF TO cl_gui_html_viewer.
PARAMETERS: p_matnr TYPE matnr.
INITIALIZATION.
* Zeilen und Spalten in Pixel umrechnen
DATA(lv_x_metric) = cl_gui_cfw=>compute_metric_from_dynp( metric = cl_gui_control=>metric_pixel
x_or_y = 'X'
in = sy-scols ).
* GOS-Container mit akt. Fensterbreite
o_cnt_gos = NEW #( width = lv_x_metric ).
* HTML im Titlebar anzeigen
o_html = NEW cl_gui_html_viewer( parent = o_cnt_gos ).
DATA(it_html) = VALUE w3_htmltab( ( '<html><head><style>body { margin: 0; background-color: #00BBCC; color: #001122; font: 18px "Courier" }</style></head>' )
( '<body>Test</body></html>' ) ).
DATA: lv_url TYPE swk_url.
o_html->load_data( IMPORTING
assigned_url = lv_url
CHANGING
data_table = it_html ).
o_html->show_url( lv_url ).
START-OF-SELECTION.
WRITE: / p_matnr.