TYPES: ty_it_events TYPE STANDARD TABLE OF cntl_simple_event WITH DEFAULT KEY. TYPES: BEGIN OF ty_menuitem, fcode TYPE ui_func, checked TYPE cua_active, text TYPE gui_text, END OF ty_menuitem. TYPES: ty_it_menuitems TYPE STANDARD TABLE OF ty_menuitem WITH DEFAULT KEY. DATA: it_menuitems TYPE ty_it_menuitems. CLASS lcl_events DEFINITION. PUBLIC SECTION. CLASS-METHODS: on_function_selected FOR EVENT function_selected OF cl_gui_toolbar IMPORTING fcode sender. CLASS-METHODS: on_dropdown_clicked FOR EVENT dropdown_clicked OF cl_gui_toolbar IMPORTING fcode posx posy sender. ENDCLASS. CLASS lcl_events IMPLEMENTATION. * Toolbar: Button oder Menüpunktgeklickt METHOD on_function_selected. * Checked-Status eines Dropdown-Menüpunktes umschalten IF line_exists( it_menuitems[ fcode = fcode ] ). ASSIGN it_menuitems[ fcode = fcode ] TO FIELD-SYMBOL(<mc>). <mc>-checked = COND #( WHEN <mc>-checked = abap_true THEN abap_false ELSE abap_true ). ENDIF. * Funktionscode auswerten CASE fcode. WHEN 'BTN_CLOSE'. LEAVE PROGRAM. WHEN 'BTN_DROP'. WHEN 'M1'. WHEN 'M2'. ENDCASE. * fcode ausgeben MESSAGE fcode TYPE 'S'. ENDMETHOD. * Toolbar: Dropdown aktiviert METHOD on_dropdown_clicked. * Menü erzeugen DATA(o_ctx_menu) = NEW cl_ctmenu( ). LOOP AT it_menuitems ASSIGNING FIELD-SYMBOL(<m>). o_ctx_menu->add_function( fcode = <m>-fcode checked = <m>-checked text = <m>-text ). ENDLOOP. * Kontextmenü an der akt. Position anzeigen sender->track_context_menu( context_menu = o_ctx_menu posx = posx posy = posy ). ENDMETHOD. ENDCLASS. INITIALIZATION. it_menuitems = VALUE #( ( fcode = 'M1' checked = abap_false text = 'Punkt1' ) ( fcode = 'M2' checked = abap_true text = 'Punkt2' ) ). * Splitter erzeugen DATA(o_splitter) = NEW cl_gui_splitter_container( parent = cl_gui_container=>default_screen no_autodef_progid_dynnr = abap_true rows = 2 columns = 1 ). * Absoluter Modus für Zeilenhöhe o_splitter->set_row_mode( mode = cl_gui_splitter_container=>mode_absolute ). * Höhe absolut 24 Pixel für Splitter oben o_splitter->set_row_height( id = 1 height = 24 ). * Splitter für oberen Container fest und verborgen o_splitter->set_row_sash( id = 1 type = cl_gui_splitter_container=>type_movable value = cl_gui_splitter_container=>false ). o_splitter->set_row_sash( id = 1 type = cl_gui_splitter_container=>type_sashvisible value = cl_gui_splitter_container=>false ). DATA(o_container_top) = o_splitter->get_container( row = 1 column = 1 ). DATA(o_container_bottom) = o_splitter->get_container( row = 2 column = 1 ). * Toolbar hoizontal DATA(o_tool) = NEW cl_gui_toolbar( parent = o_container_top display_mode = cl_gui_toolbar=>m_mode_horizontal ). * Eventtypten müssen gesondert registriert werden DATA(it_events) = VALUE ty_it_events( ( eventid = cl_gui_toolbar=>m_id_function_selected appl_event = abap_true ) ( eventid = cl_gui_toolbar=>m_id_dropdown_clicked appl_event = abap_true ) ). o_tool->set_registered_events( events = it_events ). * Toolbar-Buttons hinzufügen * Buttontypen sind in Typgruppe CNTB definiert o_tool->add_button( fcode = 'BTN_DROP' icon = icon_activate butn_type = cntb_btype_dropdown text = 'Menü' quickinfo = 'Menü anzeigen' is_checked = abap_false is_disabled = abap_false ). o_tool->add_button( fcode = '' icon = '' butn_type = cntb_btype_sep text = '' quickinfo = '' is_checked = abap_false is_disabled = abap_false ). o_tool->add_button( fcode = 'BTN_CLOSE' icon = icon_close butn_type = cntb_btype_button text = 'Schließen' quickinfo = 'Schließen' is_checked = abap_false is_disabled = abap_false ). * Eventhandler registrieren SET HANDLER lcl_events=>on_function_selected FOR o_tool. SET HANDLER lcl_events=>on_dropdown_clicked FOR o_tool. * im unteren Splitter Beispieldaten anzeigen DATA: it_sflight TYPE STANDARD TABLE OF sflight. SELECT * FROM sflight INTO TABLE @it_sflight. DATA: o_salv TYPE REF TO cl_salv_table. cl_salv_table=>factory( EXPORTING r_container = o_container_bottom IMPORTING r_salv_table = o_salv CHANGING t_table = it_sflight ). o_salv->get_functions( )->set_all( ). o_salv->display( ). * leere Standard-Toolbar ausblenden cl_abap_list_layout=>suppress_toolbar( ). * Ausgabe von cl_gui_container=>default_screen erzwingen WRITE: space.
Weiterführender Link zur Ideen-Quelle: Link