Code: Alles auswählen.
SET HANDLER method-name.
Code: Alles auswählen.
DATA lr_classdescr TYPE REF TO cl_abap_classdescr.
DATA(lr_typedescr) = cl_abap_typedescr=>describe_by_object_ref( me ).
lr_classdescr ?= lr_typedescr.
LOOP AT lr_classdescr->methods ASSIGNING FIELD-SYMBOL(<s_method>).
IF <s_method>-name(6) = 'handle'.
SET HANDLER <s_method>-name.
ENDIF.
ENDLOOP.
Code: Alles auswählen.
REPORT.
CLASS global_text_event_receiver DEFINITION.
PUBLIC SECTION.
TYPES: BEGIN OF ts_events_map,
global_event TYPE string,
object_event TYPE string,
END OF ts_events_map,
tt_events_map TYPE STANDARD TABLE OF ts_events_map WITH DEFAULT KEY.
METHODS constructor
IMPORTING
object TYPE REF TO cl_gui_textedit
sender TYPE REF TO object
events_map TYPE tt_events_map.
METHODS handler_doubleclick
FOR EVENT dblclick OF cl_gui_textedit.
METHODS handler_context_menu
FOR EVENT context_menu OF cl_gui_textedit
IMPORTING menu.
METHODS handler_context_menu_selected
FOR EVENT context_menu_selected OF cl_gui_textedit
IMPORTING fcode.
DATA object TYPE REF TO cl_gui_control.
DATA sender TYPE REF TO object.
DATA events_map TYPE tt_events_map.
ENDCLASS.
CLASS global_text_event_receiver IMPLEMENTATION.
METHOD constructor.
me->sender = sender.
me->object = object.
me->events_map = events_map.
object->register_event_dblclick( ).
object->register_event_context_menu( ).
SET HANDLER handler_doubleclick FOR object.
SET HANDLER handler_context_menu FOR object.
SET HANDLER handler_context_menu_selected FOR object.
ENDMETHOD.
METHOD handler_doubleclick.
DATA(dyn_handler) = events_map[ global_event = 'DBLCLICK' ]-object_event.
TRY.
CALL METHOD sender->(dyn_handler).
CATCH cx_sy_dyn_call_error.
ENDTRY.
ENDMETHOD.
METHOD handler_context_menu.
DATA(dyn_handler) = events_map[ global_event = 'CONTEXT_MENU' ]-object_event.
TRY.
CALL METHOD sender->(dyn_handler) EXPORTING menu = menu.
CATCH cx_sy_dyn_call_error.
ENDTRY.
ENDMETHOD.
METHOD handler_context_menu_selected.
DATA(dyn_handler) = events_map[ global_event = 'CONTEXT_MENU_SELECTED' ]-object_event.
TRY.
CALL METHOD sender->(dyn_handler) EXPORTING fcode = fcode.
CATCH cx_sy_dyn_call_error.
ENDTRY.
ENDMETHOD.
ENDCLASS.
CLASS main DEFINITION.
PUBLIC SECTION.
METHODS constructor IMPORTING container TYPE REF TO cl_gui_container.
METHODS do_double_click
FOR EVENT dblclick OF cl_gui_textedit.
METHODS process_context_menu
FOR EVENT context_menu OF cl_gui_textedit
IMPORTING menu.
METHODS process_context_menu_selected
FOR EVENT context_menu_selected OF cl_gui_textedit
IMPORTING fcode.
ENDCLASS.
CLASS main IMPLEMENTATION.
METHOD constructor.
DATA(editor) = NEW cl_gui_textedit( parent = container ).
DATA(events) = NEW global_text_event_receiver(
object = editor
sender = me
events_map = VALUE #(
( global_event = 'DBLCLICK' object_event = 'DO_DOUBLE_CLICK' )
( global_event = 'CONTEXT_MENU' object_event = 'PROCESS_CONTEXT_MENU' )
( global_event = 'CONTEXT_MENU_SELECTED' object_event = 'PROCESS_CONTEXT_MENU_SELECTED' ) ) ).
ENDMETHOD.
METHOD do_double_click.
MESSAGE 'Doubleclick funktioniert!' TYPE 'I'.
ENDMETHOD.
METHOD process_context_menu.
menu->add_function(
EXPORTING
fcode = 'Clickme'
text = 'Klickmich!' ).
ENDMETHOD.
METHOD process_context_menu_selected.
CASE fcode.
WHEN 'Clickme'.
MESSAGE 'Kontextmenu funktioniert!' TYPE 'I'.
ENDCASE.
ENDMETHOD.
ENDCLASS.
PARAMETERS p.
INITIALIZATION.
DATA(main) = NEW main( NEW cl_gui_docking_container( side = cl_gui_docking_container=>dock_at_bottom ratio = 50 ) ).
Folgende Benutzer bedankten sich beim Autor ewx für den Beitrag:
Tommy Nightmare
Code: Alles auswählen.
REPORT.
INTERFACE global_text_event_receiver.
METHODS handler_doubleclick
FOR EVENT dblclick OF cl_gui_textedit.
METHODS handler_context_menu
FOR EVENT context_menu OF cl_gui_textedit
IMPORTING menu.
METHODS handler_context_menu_selected
FOR EVENT context_menu_selected OF cl_gui_textedit
IMPORTING fcode.
ENDINTERFACE.
CLASS main DEFINITION.
PUBLIC SECTION.
METHODS constructor IMPORTING container TYPE REF TO cl_gui_container.
INTERFACES global_text_event_receiver.
ENDCLASS.
CLASS main IMPLEMENTATION.
METHOD constructor.
DATA(editor) = NEW cl_gui_textedit( parent = container ).
editor->register_event_dblclick( ).
editor->register_event_context_menu( ).
SET HANDLER global_text_event_receiver~handler_doubleclick FOR editor.
SET HANDLER global_text_event_receiver~handler_context_menu FOR editor.
SET HANDLER global_text_event_receiver~handler_context_menu_selected FOR editor.
ENDMETHOD.
METHOD global_text_event_receiver~handler_doubleclick.
MESSAGE 'Doubleclick funktioniert!' TYPE 'I'.
ENDMETHOD.
METHOD global_text_event_receiver~handler_context_menu.
menu->add_function(
EXPORTING
fcode = 'Clickme'
text = 'Klickmich!' ).
ENDMETHOD.
METHOD global_text_event_receiver~handler_context_menu_selected.
CASE fcode.
WHEN 'Clickme'.
MESSAGE 'Kontextmenu funktioniert!' TYPE 'I'.
ENDCASE.
ENDMETHOD.
ENDCLASS.
PARAMETERS p.
INITIALIZATION.
DATA(main) = NEW main( NEW cl_gui_docking_container( side = cl_gui_docking_container=>dock_at_bottom ratio = 50 ) ).
Folgende Benutzer bedankten sich beim Autor ewx für den Beitrag:
Tommy Nightmare