文章转自 http://blog.csdn.net/jy00873757/article/details/8975745
在SCREEN 中定义一个容器,名字是CONT
PLAY、STOP、BACK 按钮
PBO中对于FILE调用本地文件浏览方法
- *&---------------------------------------------------------------------*
- *& Report ZMEDIOPLAYER_TEST
- *&
- *&---------------------------------------------------------------------*
- *&
- *&
- *&---------------------------------------------------------------------*
- REPORT zmedioplayer_test.
- CLASS lcl_player DEFINITION DEFERRED.
- DATA o_b TYPE REF TO lcl_player.
- DATA cont TYPE REF TO cl_gui_custom_container.
- DATA ok_code TYPE sy-ucomm.
- data file like rlgrap-filename.
- *----------------------------------------------------------------------*
- * CLASS lcl_player DEFINITION
- *----------------------------------------------------------------------*
- CLASS lcl_player DEFINITION INHERITING FROM cl_gui_control.
- PUBLIC SECTION.
- METHODS:
- constructor
- * IMPORTING
- * cont TYPE REF TO cl_gui_custom_container
- EXCEPTIONS
- cntl_error
- cntl_install_error ,
- stop,
- play.
- ENDCLASS. "lcl_player DEFINITION
- *----------------------------------------------------------------------*
- * CLASS lcl_player IMPLEMENTATION
- *----------------------------------------------------------------------*
- CLASS lcl_player IMPLEMENTATION.
- METHOD constructor.
- CALL METHOD super->constructor
- EXPORTING
- clsid = '{6BF52A52-394A-11d3-B153-00C04F79FAA6}'
- parent = cont
- EXCEPTIONS
- cntl_system_error = 1
- OTHERS = 2.
- CASE sy-subrc .
- WHEN 1 .
- RAISE cntl_install_error .
- WHEN 2 .
- RAISE cntl_error .
- ENDCASE .
- CALL METHOD cl_gui_cfw=>subscribe
- EXPORTING
- ref = me
- shellid = me->h_control-shellid
- EXCEPTIONS
- OTHERS = 1.
- IF sy-subrc NE 0 .
- RAISE cntl_error .
- ENDIF .
- ENDMETHOD. "constructor
- METHOD stop.
- CALL METHOD me->call_method
- EXPORTING
- method = 'Close'
- EXCEPTIONS
- cntl_error = 1
- cntl_system_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.
- ENDMETHOD. "STOP
- METHOD play.
- DATA: l_url TYPE char100.
- CHECK file IS NOT INITIAL.
- l_url = file.
- REPLACE ALL OCCURRENCES OF '/' IN l_url WITH '//'.
- CONCATENATE 'file://' l_url INTO l_url.
- CALL METHOD set_property
- EXPORTING
- property = 'Url'
- value = l_url
- EXCEPTIONS
- cntl_system_error = 1
- cntl_error = 2
- OTHERS = 3.
- ENDMETHOD. "play
- ENDCLASS. "lcl_player IMPLEMENTATION
- START-OF-SELECTION.
- CALL SCREEN 100.
- *&---------------------------------------------------------------------*
- *& Module STATUS_0100 OUTPUT
- *&---------------------------------------------------------------------*
- * text
- *----------------------------------------------------------------------*
- MODULE status_0100 OUTPUT.
- IF cont IS INITIAL.
- CREATE OBJECT cont
- EXPORTING
- container_name = 'CONT'.
- CREATE OBJECT o_b.
- ENDIF.
- ENDMODULE. " STATUS_0100 OUTPUT
- *&---------------------------------------------------------------------*
- *& Module USER_COMMAND_0100 INPUT
- *&---------------------------------------------------------------------*
- * text
- *----------------------------------------------------------------------*
- MODULE user_command_0100 INPUT.
- CASE sy-ucomm.
- WHEN 'BACK'.
- LEAVE TO SCREEN 0.
- WHEN 'PLAY'.
- CALL METHOD o_b->play.
- WHEN 'STOP'.
- CALL METHOD o_b->stop.
- ENDCASE.
- ENDMODULE. " USER_COMMAND_0100 INPUT
- *&---------------------------------------------------------------------*
- *& Module choose_file OUTPUT
- *&---------------------------------------------------------------------*
- * text
- *----------------------------------------------------------------------*
- MODULE choose_file OUTPUT.
- IF file IS INITIAL.
- CALL FUNCTION 'WS_FILENAME_GET'
- EXPORTING
- def_filename = '*.*'
- mask = ',*.*,*.*.'
- title = 'SELECT YOUR LOCAL FILE'
- IMPORTING
- filename = file
- EXCEPTIONS
- inv_winsys = 1
- no_batch = 2
- selection_cancel = 3
- selection_error = 4
- OTHERS = 5.
- ELSE.
- ENDIF.
- ENDMODULE. " choose_file OUTPUT
有待改善的地方:在屏幕中的FILE字段的按钮不好使。
效果如下: