20250720

Imagem com clique

*&---------------------------------------------------------------------*
*& Report ZNXX_02
*&---------------------------------------------------------------------*
*& Imagem clicável
*&---------------------------------------------------------------------*


REPORT z_click_imagem_se78.

CLASS lcl_event_handler DEFINITION.
  PUBLIC SECTION.
    METHODSon_picture_click FOR EVENT picture_click OF cl_gui_picture
      IMPORTING mouse_pos_x mouse_pos_y.
ENDCLASS.

CLASS lcl_event_handler IMPLEMENTATION.
  METHOD on_picture_click.
    MESSAGE 'Imagem clicada! Chamando transação ...' TYPE 'I'.
*    CALL TRANSACTION 'VA01'. " Substitua pela transação desejada
  ENDMETHOD.
ENDCLASS.


START-OF-SELECTION.
  CALL SCREEN 100.

MODULE pbo_0100 OUTPUT.

* Objetos necessários
  DATAgo_container      TYPE REF TO cl_gui_custom_container,
        go_picture        TYPE REF TO cl_gui_picture,
        go_handler        TYPE REF TO lcl_event_handler,
        gt_events         TYPE cntl_simple_events,
        gs_event          TYPE cntl_simple_event.

  DATAgraphic_url(255).

  DATABEGIN OF graphic_table OCCURS 0,
          line(255TYPE x,
        END OF graphic_table.

  DATAl_graphic_conv TYPE i.
  DATAl_graphic_offs TYPE i.
  DATAgraphic_size   TYPE i.
  DATAl_graphic_xstr TYPE xstring.
  DATAurl(255)  TYPE c.



  IF go_container IS INITIAL.

    " Cria container e objeto de imagem
    CREATE OBJECT go_container
      EXPORTING container_name 'CC_PIC'.

    CREATE OBJECT go_picture
      EXPORTING parent go_container.

*   Lê imagem da SE78 (xstring)
    CALL METHOD cl_ssf_xsf_utilities=>get_bds_graphic_as_bmp
      EXPORTING
        p_object       'GRAPHICS'
        p_name         'Z_IMAGEM_001'
        p_id           'BMAP'
        p_btype        'BCOL'
      RECEIVING
        p_bmp          l_graphic_xstr
      EXCEPTIONS
        not_found      1
        internal_error 2
        OTHERS         3.

    IF sy-subrc <> 0.
*   MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
*              WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
    ENDIF.

*   Converte imagem da SE78 em url
    graphic_size XSTRLENl_graphic_xstr ).
    l_graphic_conv graphic_size.
    l_graphic_offs 0.

    WHILE l_graphic_conv > 255.

      graphic_table-line l_graphic_xstr+l_graphic_offs(255).
      APPEND graphic_table.
      l_graphic_offs l_graphic_offs + 255.
      l_graphic_conv l_graphic_conv 255.

    ENDWHILE.

    graphic_table-line l_graphic_xstr+l_graphic_offs(l_graphic_conv).
    APPEND graphic_table.

    CALL FUNCTION 'DP_CREATE_URL'
      EXPORTING
        type     'IMAGE'
        subtype  'X-UNKNOWN'
        size     graphic_size
        lifetime 'T'
      TABLES
        data     graphic_table
      CHANGING
        url      url.

*   Apresenta a imagem
    CALL METHOD go_picture->load_picture_from_url
      EXPORTING
        url url.

*   Ajusta a imagem
    CALL METHOD go_picture->set_display_mode
      EXPORTING
        display_mode go_picture->display_mode_fit_center.



*   Registra o evento de clique
    gs_event-eventid cl_gui_picture=>eventid_picture_click.
    gs_event-appl_event abap_true.
    APPEND gs_event TO gt_events.

    CALL METHOD go_picture->set_registered_events
      EXPORTING events gt_events.

*   Cria handler de evento (habilita o evento)
    CREATE OBJECT go_handler.
    SET HANDLER go_handler->on_picture_click FOR go_picture.

  ENDIF.

ENDMODULE.

MODULE pai_0100 INPUT.
* Não utilizado neste exemplo
ENDMODULE.


*&---------------------------------------------------------------------*
*&      Module  STATUS_0100  OUTPUT
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
MODULE STATUS_0100 OUTPUT.
  SET PF-STATUS '0100_ST'.
  SET TITLEBAR 'xxx'.
ENDMODULE.


*&---------------------------------------------------------------------*
*&      Module  USER_COMMAND_0100  INPUT
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
MODULE USER_COMMAND_0100 INPUT.
  CASE sy-ucomm.
    WHEN 'BACK' OR 'CANC' OR 'EXIT'.
      LEAVE TO SCREEN 0.

    WHEN OTHERS.

  ENDCASE.
ENDMODULE.

Tela 0100
PROCESS BEFORE OUTPUT.
  MODULE STATUS_0100.
  MODULE pbo_0100.
*
PROCESS AFTER INPUT.
  MODULE USER_COMMAND_0100.


 - Criar o container CC_PIC
 - Criar status com 'BACK', 'CANC' e 'EXIT'