SAP多行文本编辑实例

REPORT DEMO_CUSTOM_CONTROL .

* Declarations *****************************************************
*注意程序是参照标准DEMO:DEMO_CUSTOM_CONTORL创建的,屏幕跟标准的基本一直,出去新增加了一个更改按钮外!
CLASS EVENT_HANDLER DEFINITION.
  PUBLIC SECTION.
    METHODS: HANDLE_F1 FOR EVENT F1 OF CL_GUI_TEXTEDIT
             IMPORTING SENDER,
             HANDLE_F4 FOR EVENT F4 OF CL_GUI_TEXTEDIT
             IMPORTING SENDER.
ENDCLASS.

DATA: OK_CODE LIKE SY-UCOMM,
      SAVE_OK LIKE SY-UCOMM.

DATA: INIT,
      CONTAINER TYPE REF TO CL_GUI_CUSTOM_CONTAINER,
      EDITOR    TYPE REF TO CL_GUI_TEXTEDIT.

DATA: EVENT_TAB TYPE CNTL_SIMPLE_EVENTS,
      EVENT     TYPE CNTL_SIMPLE_EVENT.

DATA: LINE(256) TYPE C,
      TEXT_TAB LIKE STANDARD TABLE OF LINE,
      FIELD LIKE LINE.

DATA HANDLE TYPE REF TO EVENT_HANDLER.


* Reporting Events ***************************************************

START-OF-SELECTION.

  LINE = 'First line in TextEditControl'.
  APPEND LINE TO TEXT_TAB.
  LINE = '--------------------------------------------------'.
  APPEND LINE TO TEXT_TAB.
  LINE = '...'.
  APPEND LINE TO TEXT_TAB.

  CALL SCREEN 100.

* Dialog Modules *****************************************************

MODULE STATUS_0100 OUTPUT.
  SET PF-STATUS 'SCREEN_100'.
  IF INIT IS INITIAL.
    INIT = 'X'.
    CREATE OBJECT: CONTAINER EXPORTING CONTAINER_NAME = 'TEXTEDIT',
                   EDITOR    EXPORTING PARENT = CONTAINER,
                   HANDLE.
    EVENT-EVENTID = CL_GUI_TEXTEDIT=>EVENT_F1.
    EVENT-APPL_EVENT = ' '.                     "system event
    APPEND EVENT TO EVENT_TAB.
    EVENT-EVENTID = CL_GUI_TEXTEDIT=>EVENT_F4.
    EVENT-APPL_EVENT = 'X'.                     "application event
    APPEND EVENT TO EVENT_TAB.
    CALL METHOD: EDITOR->SET_REGISTERED_EVENTS
                 EXPORTING EVENTS = EVENT_TAB.
    SET HANDLER HANDLE->HANDLE_F1
                HANDLE->HANDLE_F4 FOR EDITOR.
  ENDIF.
**---将初始化的值显示到text中-----
  CALL METHOD EDITOR->SET_TEXT_AS_STREAM EXPORTING TEXT = TEXT_TAB.
ENDMODULE.

*---------------------------------------------------------------------*
*       MODULE cancel INPUT                                           *
*---------------------------------------------------------------------*
*       ........                                                      *
*---------------------------------------------------------------------*
MODULE CANCEL INPUT.
  LEAVE PROGRAM.
ENDMODULE.

*---------------------------------------------------------------------*
*       MODULE user_command_0100 INPUT                                *
*---------------------------------------------------------------------*
*       ........                                                      *
*---------------------------------------------------------------------*
MODULE USER_COMMAND_0100 INPUT.
  DATA: FLAG TYPE C VALUE 'X'.
  SAVE_OK = OK_CODE.
  CLEAR OK_CODE.
  CASE SAVE_OK.

    WHEN 'INSERT'.
      CALL METHOD EDITOR->GET_TEXT_AS_STREAM IMPORTING TEXT = TEXT_TAB.

    WHEN 'F1'.
      MESSAGE I888(SABAPDOCU) WITH TEXT-001.

    WHEN 'CHANGE'.
*---调用事件-----
      IF FLAG = 'X'."状态判断如果是X则为显示状态
        CALL METHOD EDITOR->SET_READONLY_MODE EXPORTING
                                              READONLY_MODE = '1'.
        FLAG = ''.
      ELSE."状态判断如果是空则为编辑状态
        CALL METHOD EDITOR->SET_READONLY_MODE EXPORTING
                                             READONLY_MODE = '0'.
        FLAG = 'X'.
      ENDIF.

    WHEN OTHERS.
      MESSAGE I888(SABAPDOCU) WITH TEXT-002.
      CALL METHOD CL_GUI_CFW=>DISPATCH.      "for application events
      MESSAGE I888(SABAPDOCU) WITH TEXT-003.
  ENDCASE.
  SET SCREEN 100.
ENDMODULE.

* Class Implementations **********************************************

CLASS EVENT_HANDLER IMPLEMENTATION.
  METHOD HANDLE_F1.
    DATA ROW TYPE I.
    MESSAGE I888(SABAPDOCU) WITH TEXT-004.
    CALL METHOD SENDER->GET_SELECTION_POS
         IMPORTING FROM_LINE = ROW.
    CALL METHOD SENDER->GET_LINE_TEXT
         EXPORTING LINE_NUMBER = ROW
         IMPORTING TEXT = FIELD.
    CALL METHOD CL_GUI_CFW=>SET_NEW_OK_CODE   "raise PAI for
         EXPORTING NEW_CODE = 'F1'.           "system events
    CALL METHOD CL_GUI_CFW=>FLUSH.
  ENDMETHOD.
  METHOD HANDLE_F4.
    DATA ROW TYPE I.
    MESSAGE I888(SABAPDOCU) WITH TEXT-005.
    CALL METHOD SENDER->GET_SELECTION_POS
         IMPORTING FROM_LINE = ROW.
    CALL METHOD SENDER->GET_LINE_TEXT
         EXPORTING LINE_NUMBER = ROW
         IMPORTING TEXT = FIELD.
    CALL METHOD CL_GUI_CFW=>FLUSH.
  ENDMETHOD.
ENDCLASS. 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值