您的位置:首页 > 其它

SAP播放本地视频及音频(仅限于window MediaPlayer可播放文件)

2016-02-17 10:34 656 查看
这个是从SCN上看到的,自己稍加修改,编制,做的还可以,可以播放视频,音频,唯一的不足就是不能控制播放视频的显示窗口大小,希望有人能帮忙解决,感激!

视频播放类:(新建类Z_CL_MEDIA,点击基于原代码,复制下面代码进去,激活)

class Z_CL_MEDIA definition
public
inheriting from CL_GUI_CONTROL
final
create public .

public section.
type-pools CNTL .

methods CONSTRUCTOR
importing
!PARENT type ref to CL_GUI_CONTAINER .
methods SETDATASOURCE
importing
!FILENAME type STRING .

methods DISPATCH
redefinition .
methods SET_HEIGHT
redefinition .
methods SET_WIDTH
redefinition .
methods SET_POSITION
redefinition .
protected section.
ENDCLASS.

CLASS Z_CL_MEDIA IMPLEMENTATION.

* <SIGNATURE>---------------------------------------------------------------------------------------+
* | Instance Public Method Z_CL_MEDIA->CONSTRUCTOR
* +-------------------------------------------------------------------------------------------------+
* | [--->] PARENT                         TYPE REF TO CL_GUI_CONTAINER
* +--------------------------------------------------------------------------------------</SIGNATURE>
METHOD constructor.
CALL METHOD super->constructor
EXPORTING
clsid    = 'MediaPlayer.MediaPlayer'
parent   = parent
lifetime = 2
EXCEPTIONS
OTHERS   = 1.

ENDMETHOD.

* <SIGNATURE>---------------------------------------------------------------------------------------+
* | Instance Public Method Z_CL_MEDIA->DISPATCH
* +-------------------------------------------------------------------------------------------------+
* | [--->] CARGO                          TYPE        SYUCOMM
* | [--->] EVENTID                        TYPE        I
* | [--->] IS_SHELLEVENT                  TYPE        CHAR1
* | [--->] IS_SYSTEMDISPATCH              TYPE        CHAR1(optional)
* | [EXC!] CNTL_ERROR
* +--------------------------------------------------------------------------------------</SIGNATURE>
METHOD dispatch.
CALL METHOD cl_gui_cfw=>flush.
ENDMETHOD.

* <SIGNATURE>---------------------------------------------------------------------------------------+
* | Instance Public Method Z_CL_MEDIA->SETDATASOURCE
* +-------------------------------------------------------------------------------------------------+
* | [--->] FILENAME                       TYPE        STRING
* +--------------------------------------------------------------------------------------</SIGNATURE>
METHOD setdatasource.
CALL METHOD set_property
EXPORTING
property = 'FileName'
value    = filename.

*      CALL METHOD set_width
*        EXPORTING
*          width = 500.
*      CALL METHOD set_height
*        EXPORTING
*          height = 200.
CALL METHOD me->set_position
EXPORTING
height            = 200
left              = 10
top               = 10
width             = 500
EXCEPTIONS
cntl_error        = 1
cntl_system_error = 2
OTHERS            = 3.
IF sy-subrc <> 0.
ENDIF.

CALL METHOD cl_gui_cfw=>flush.
ENDMETHOD.

* <SIGNATURE>---------------------------------------------------------------------------------------+
* | Instance Public Method Z_CL_MEDIA->SET_HEIGHT
* +-------------------------------------------------------------------------------------------------+
* | [--->] HEIGHT                         TYPE        I
* | [EXC!] CNTL_ERROR
* +--------------------------------------------------------------------------------------</SIGNATURE>
METHOD set_height.
CALL METHOD super->set_height
EXPORTING
height     = height
EXCEPTIONS
cntl_error = 1
OTHERS     = 2.
IF sy-subrc <> 0.
* Implement suitable error handling here
ENDIF.
ENDMETHOD.

* <SIGNATURE>---------------------------------------------------------------------------------------+
* | Instance Public Method Z_CL_MEDIA->SET_POSITION
* +-------------------------------------------------------------------------------------------------+
* | [--->] HEIGHT                         TYPE        I(optional)
* | [--->] LEFT                           TYPE        I(optional)
* | [--->] TOP                            TYPE        I(optional)
* | [--->] WIDTH                          TYPE        I(optional)
* | [EXC!] CNTL_ERROR
* | [EXC!] CNTL_SYSTEM_ERROR
* +--------------------------------------------------------------------------------------</SIGNATURE>
METHOD set_position.
CALL METHOD super->set_position
EXPORTING
height            = height
left              = left
top               = top
width             = width
EXCEPTIONS
cntl_error        = 1
cntl_system_error = 2
OTHERS            = 3.
IF sy-subrc <> 0.
ENDIF.
ENDMETHOD.

* <SIGNATURE>---------------------------------------------------------------------------------------+
* | Instance Public Method Z_CL_MEDIA->SET_WIDTH
* +-------------------------------------------------------------------------------------------------+
* | [--->] WIDTH                          TYPE        I
* | [EXC!] CNTL_ERROR
* +--------------------------------------------------------------------------------------</SIGNATURE>
METHOD set_width.
CALL METHOD super->set_width
EXPORTING
width      = width
EXCEPTIONS
cntl_error = 1
OTHERS     = 2.
IF sy-subrc <> 0.
ENDIF.
ENDMETHOD.
ENDCLASS.

程序ZMEDIA_PLAY
TOP:


TYPES:BEGIN OF ty_list,
sel(1),
name(50),
string   TYPE string,
END OF ty_list.
DATA:gv_con TYPE REF TO cl_gui_custom_container.
DATA:gl_meida      TYPE REF TO z_cl_media,
cl_control    TYPE REF TO i_oi_container_control,
cl_error      TYPE REF TO i_oi_error,
g_has_activex TYPE c,
cl_errors     TYPE REF TO i_oi_error OCCURS 0 WITH HEADER LINE.

DATA:gt_list TYPE TABLE OF ty_list.
DATA:gw_list LIKE LINE OF gt_list.

*&SPWIZARD: DECLARATION OF TABLECONTROL 'TC_9876' ITSELF
CONTROLS: tc_9876 TYPE TABLEVIEW USING SCREEN 9876.

*&SPWIZARD: LINES OF TABLECONTROL 'TC_9876'
DATA:     g_tc_9876_lines  LIKE sy-loopc.

DATA:     ok_code LIKE sy-ucomm.


PBO:

*----------------------------------------------------------------------*
***INCLUDE ZMEIDA_PBO.
*----------------------------------------------------------------------*
*&---------------------------------------------------------------------*
*&      Module  STATUS_9876  OUTPUT
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
MODULE status_9876 OUTPUT.
SET PF-STATUS 'MEDIA'.
"  SET TITLEBAR 'xxx'.
ENDMODULE.
*&---------------------------------------------------------------------*
*&      Module  MOD_INI_CON  OUTPUT
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
MODULE mod_ini_con OUTPUT.
DATA:gv_width TYPE i.
DATA:gv_height TYPE i.

IF gv_con IS INITIAL.
CREATE OBJECT gv_con
EXPORTING
*       parent                      =
container_name              = 'GV_CON'
*       style                       =
*       lifetime                    = lifetime_default
*       repid                       =
*       dynnr                       =
*       no_autodef_progid_dynnr     =
EXCEPTIONS
cntl_error                  = 1
cntl_system_error           = 2
create_error                = 3
lifetime_error              = 4
lifetime_dynpro_dynpro_link = 5
OTHERS                      = 6.
IF sy-subrc <> 0.
ENDIF.

ENDIF.

IF gl_meida IS INITIAL.
CREATE OBJECT gl_meida
EXPORTING
parent = gv_con.
ENDIF.

IF gt_list IS INITIAL.
gw_list-string = 'C:\Wildlife.wmv'.
gw_list-name = 'Wildlife.wmv'.
APPEND gw_list TO gt_list.
gw_list-string = 'C:\123.mp4'.
gw_list-name = '123.mp4'.
APPEND gw_list TO gt_list.
gw_list-string = 'C:\正业之歌.mp3'.
gw_list-name = '正业之歌.mp3'.
APPEND gw_list TO gt_list.
ENDIF.

CALL METHOD cl_gui_cfw=>flush.

ENDMODULE.

*&SPWIZARD: OUTPUT MODULE FOR TC 'TC_9876'. DO NOT CHANGE THIS LINE!
*&SPWIZARD: UPDATE LINES FOR EQUIVALENT SCROLLBAR
MODULE tc_9876_change_tc_attr OUTPUT.
DESCRIBE TABLE gt_list LINES tc_9876-lines.
ENDMODULE.

*&SPWIZARD: OUTPUT MODULE FOR TC 'TC_9876'. DO NOT CHANGE THIS LINE!
*&SPWIZARD: GET LINES OF TABLECONTROL
MODULE tc_9876_get_lines OUTPUT.
g_tc_9876_lines = sy-loopc.
ENDMODULE.


PAI:

*----------------------------------------------------------------------*
***INCLUDE ZMEIDA_PAI.
*----------------------------------------------------------------------*
*&---------------------------------------------------------------------*
*&      Module  USER_COMMAND_9876  INPUT
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
MODULE user_command_9876 INPUT.
CASE sy-ucomm.
WHEN 'BACK'.
LEAVE TO SCREEN 0.
WHEN 'CANL' OR 'EXIT'.
LEAVE PROGRAM.
WHEN 'PLAY'.
READ TABLE gt_list INTO gw_list WITH KEY sel = 'X'.
IF sy-subrc = 0.
CALL METHOD gl_meida->setdatasource
EXPORTING
filename = gw_list-string.
ENDIF.
WHEN 'ADD'.
PERFORM prm_add_list.
WHEN OTHERS.
ENDCASE.
CLEAR:sy-ucomm.
ENDMODULE.

*&SPWIZARD: INPUT MODUL FOR TC 'TC_9876'. DO NOT CHANGE THIS LINE!
*&SPWIZARD: MARK TABLE
MODULE tc_9876_mark INPUT.
DATA: g_tc_9876_wa2 LIKE LINE OF gt_list.
IF tc_9876-line_sel_mode = 1
AND gw_list-sel = 'X'.
LOOP AT gt_list INTO g_tc_9876_wa2
WHERE sel = 'X'.
g_tc_9876_wa2-sel = ''.
MODIFY gt_list
FROM g_tc_9876_wa2
TRANSPORTING sel.
ENDLOOP.
ENDIF.
MODIFY gt_list
FROM gw_list
INDEX tc_9876-current_line
TRANSPORTING sel.
ENDMODULE.

*&SPWIZARD: INPUT MODULE FOR TC 'TC_9876'. DO NOT CHANGE THIS LINE!
*&SPWIZARD: PROCESS USER COMMAND
MODULE tc_9876_user_command INPUT.
ok_code = sy-ucomm.
PERFORM user_ok_tc USING    'TC_9876'
'GT_LIST'
'SEL'
CHANGING ok_code.
sy-ucomm = ok_code.
ENDMODULE.


frm:

*----------------------------------------------------------------------*
*   INCLUDE TABLECONTROL_FORMS                                         *
*----------------------------------------------------------------------*

*&---------------------------------------------------------------------*
*&      Form  USER_OK_TC                                               *
*&---------------------------------------------------------------------*
FORM user_ok_tc USING    p_tc_name TYPE dynfnam
p_table_name
p_mark_name
CHANGING p_ok      LIKE sy-ucomm.

*&SPWIZARD: BEGIN OF LOCAL DATA----------------------------------------*
DATA: l_ok     TYPE sy-ucomm,
l_offset TYPE i.
*&SPWIZARD: END OF LOCAL DATA------------------------------------------*

*&SPWIZARD: Table control specific operations                          *
*&SPWIZARD: evaluate TC name and operations                            *
SEARCH p_ok FOR p_tc_name.
IF sy-subrc <> 0.
EXIT.
ENDIF.
l_offset = strlen( p_tc_name ) + 1.
l_ok = p_ok+l_offset.
*&SPWIZARD: execute general and TC specific operations                 *
CASE l_ok.
WHEN 'INSR'.                      "insert row
PERFORM fcode_insert_row USING    p_tc_name
p_table_name.
CLEAR p_ok.

WHEN 'DELE'.                      "delete row
PERFORM fcode_delete_row USING    p_tc_name
p_table_name
p_mark_name.
CLEAR p_ok.

WHEN 'P--' OR                     "top of list
'P-'  OR                     "previous page
'P+'  OR                     "next page
'P++'.                       "bottom of list
PERFORM compute_scrolling_in_tc USING p_tc_name
l_ok.
CLEAR p_ok.
*     WHEN 'L--'.                       "total left
*       PERFORM FCODE_TOTAL_LEFT USING P_TC_NAME.
*
*     WHEN 'L-'.                        "column left
*       PERFORM FCODE_COLUMN_LEFT USING P_TC_NAME.
*
*     WHEN 'R+'.                        "column right
*       PERFORM FCODE_COLUMN_RIGHT USING P_TC_NAME.
*
*     WHEN 'R++'.                       "total right
*       PERFORM FCODE_TOTAL_RIGHT USING P_TC_NAME.
*
WHEN 'MARK'.                      "mark all filled lines
PERFORM fcode_tc_mark_lines USING p_tc_name
p_table_name
p_mark_name   .
CLEAR p_ok.

WHEN 'DMRK'.                      "demark all filled lines
PERFORM fcode_tc_demark_lines USING p_tc_name
p_table_name
p_mark_name .
CLEAR p_ok.

*     WHEN 'SASCEND'   OR
*          'SDESCEND'.                  "sort column
*       PERFORM FCODE_SORT_TC USING P_TC_NAME
*                                   l_ok.

ENDCASE.

ENDFORM.                              " USER_OK_TC

*&---------------------------------------------------------------------*
*&      Form  FCODE_INSERT_ROW                                         *
*&---------------------------------------------------------------------*
FORM fcode_insert_row
USING    p_tc_name           TYPE dynfnam
p_table_name             .

*&SPWIZARD: BEGIN OF LOCAL DATA----------------------------------------*
DATA l_lines_name       LIKE feld-name.
DATA l_selline          LIKE sy-stepl.
DATA l_lastline         TYPE i.
DATA l_line             TYPE i.
DATA l_table_name       LIKE feld-name.
FIELD-SYMBOLS <tc>                 TYPE cxtab_control.
FIELD-SYMBOLS <table>              TYPE STANDARD TABLE.
FIELD-SYMBOLS <lines>              TYPE i.
*&SPWIZARD: END OF LOCAL DATA------------------------------------------*

ASSIGN (p_tc_name) TO <tc>.

*&SPWIZARD: get the table, which belongs to the tc                     *
CONCATENATE p_table_name '[]' INTO l_table_name. "table body
ASSIGN (l_table_name) TO <table>.                "not headerline

*&SPWIZARD: get looplines of TableControl                              *
CONCATENATE 'G_' p_tc_name '_LINES' INTO l_lines_name.
ASSIGN (l_lines_name) TO <lines>.

*&SPWIZARD: get current line                                           *
GET CURSOR LINE l_selline.
IF sy-subrc <> 0.                   " append line to table
l_selline = <tc>-lines + 1.
*&SPWIZARD: set top line                                               *
IF l_selline > <lines>.
<tc>-top_line = l_selline - <lines> + 1 .
ELSE.
<tc>-top_line = 1.
ENDIF.
ELSE.                               " insert line into table
l_selline = <tc>-top_line + l_selline - 1.
l_lastline = <tc>-top_line + <lines> - 1.
ENDIF.
*&SPWIZARD: set new cursor line                                        *
l_line = l_selline - <tc>-top_line + 1.

*&SPWIZARD: insert initial line                                        *
INSERT INITIAL LINE INTO <table> INDEX l_selline.
<tc>-lines = <tc>-lines + 1.
*&SPWIZARD: set cursor                                                 *
SET CURSOR LINE l_line.

ENDFORM.                              " FCODE_INSERT_ROW

*&---------------------------------------------------------------------*
*&      Form  FCODE_DELETE_ROW                                         *
*&---------------------------------------------------------------------*
FORM fcode_delete_row
USING    p_tc_name           TYPE dynfnam
p_table_name
p_mark_name   .

*&SPWIZARD: BEGIN OF LOCAL DATA----------------------------------------*
DATA l_table_name       LIKE feld-name.

FIELD-SYMBOLS <tc>         TYPE cxtab_control.
FIELD-SYMBOLS <table>      TYPE STANDARD TABLE.
FIELD-SYMBOLS <wa>.
FIELD-SYMBOLS <mark_field>.
*&SPWIZARD: END OF LOCAL DATA------------------------------------------*

ASSIGN (p_tc_name) TO <tc>.

*&SPWIZARD: get the table, which belongs to the tc                     *
CONCATENATE p_table_name '[]' INTO l_table_name. "table body
ASSIGN (l_table_name) TO <table>.                "not headerline

*&SPWIZARD: delete marked lines                                        *
DESCRIBE TABLE <table> LINES <tc>-lines.

LOOP AT <table> ASSIGNING <wa>.

*&SPWIZARD: access to the component 'FLAG' of the table header         *
ASSIGN COMPONENT p_mark_name OF STRUCTURE <wa> TO <mark_field>.

IF <mark_field> = 'X'.
DELETE <table> INDEX syst-tabix.
IF sy-subrc = 0.
<tc>-lines = <tc>-lines - 1.
ENDIF.
ENDIF.
ENDLOOP.

ENDFORM.                              " FCODE_DELETE_ROW

*&---------------------------------------------------------------------*
*&      Form  COMPUTE_SCROLLING_IN_TC
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*      -->P_TC_NAME  name of tablecontrol
*      -->P_OK       ok code
*----------------------------------------------------------------------*
FORM compute_scrolling_in_tc USING    p_tc_name
p_ok.
*&SPWIZARD: BEGIN OF LOCAL DATA----------------------------------------*
DATA l_tc_new_top_line     TYPE i.
DATA l_tc_name             LIKE feld-name.
DATA l_tc_lines_name       LIKE feld-name.
DATA l_tc_field_name       LIKE feld-name.

FIELD-SYMBOLS <tc>         TYPE cxtab_control.
FIELD-SYMBOLS <lines>      TYPE i.
*&SPWIZARD: END OF LOCAL DATA------------------------------------------*

ASSIGN (p_tc_name) TO <tc>.
*&SPWIZARD: get looplines of TableControl                              *
CONCATENATE 'G_' p_tc_name '_LINES' INTO l_tc_lines_name.
ASSIGN (l_tc_lines_name) TO <lines>.

*&SPWIZARD: is no line filled?                                         *
IF <tc>-lines = 0.
*&SPWIZARD: yes, ...                                                   *
l_tc_new_top_line = 1.
ELSE.
*&SPWIZARD: no, ...                                                    *
CALL FUNCTION 'SCROLLING_IN_TABLE'
EXPORTING
entry_act      = <tc>-top_line
entry_from     = 1
entry_to       = <tc>-lines
last_page_full = 'X'
loops          = <lines>
ok_code        = p_ok
overlapping    = 'X'
IMPORTING
entry_new      = l_tc_new_top_line
EXCEPTIONS
*        NO_ENTRY_OR_PAGE_ACT  = 01
*        NO_ENTRY_TO    = 02
*        NO_OK_CODE_OR_PAGE_GO = 03
OTHERS         = 0.
ENDIF.

*&SPWIZARD: get actual tc and column                                   *
GET CURSOR FIELD l_tc_field_name
AREA  l_tc_name.

IF syst-subrc = 0.
IF l_tc_name = p_tc_name.
*&SPWIZARD: et actual column                                           *
SET CURSOR FIELD l_tc_field_name LINE 1.
ENDIF.
ENDIF.

*&SPWIZARD: set the new top line                                       *
<tc>-top_line = l_tc_new_top_line.

ENDFORM.                              " COMPUTE_SCROLLING_IN_TC

*&---------------------------------------------------------------------*
*&      Form  FCODE_TC_MARK_LINES
*&---------------------------------------------------------------------*
*       marks all TableControl lines
*----------------------------------------------------------------------*
*      -->P_TC_NAME  name of tablecontrol
*----------------------------------------------------------------------*
FORM fcode_tc_mark_lines USING p_tc_name
p_table_name
p_mark_name.
*&SPWIZARD: EGIN OF LOCAL DATA-----------------------------------------*
DATA l_table_name       LIKE feld-name.

FIELD-SYMBOLS <tc>         TYPE cxtab_control.
FIELD-SYMBOLS <table>      TYPE STANDARD TABLE.
FIELD-SYMBOLS <wa>.
FIELD-SYMBOLS <mark_field>.
*&SPWIZARD: END OF LOCAL DATA------------------------------------------*

ASSIGN (p_tc_name) TO <tc>.

*&SPWIZARD: get the table, which belongs to the tc                     *
CONCATENATE p_table_name '[]' INTO l_table_name. "table body
ASSIGN (l_table_name) TO <table>.                "not headerline

*&SPWIZARD: mark all filled lines                                      *
LOOP AT <table> ASSIGNING <wa>.

*&SPWIZARD: access to the component 'FLAG' of the table header         *
ASSIGN COMPONENT p_mark_name OF STRUCTURE <wa> TO <mark_field>.

<mark_field> = 'X'.
ENDLOOP.
ENDFORM.                                          "fcode_tc_mark_lines

*&---------------------------------------------------------------------*
*&      Form  FCODE_TC_DEMARK_LINES
*&---------------------------------------------------------------------*
*       demarks all TableControl lines
*----------------------------------------------------------------------*
*      -->P_TC_NAME  name of tablecontrol
*----------------------------------------------------------------------*
FORM fcode_tc_demark_lines USING p_tc_name
p_table_name
p_mark_name .
*&SPWIZARD: BEGIN OF LOCAL DATA----------------------------------------*
DATA l_table_name       LIKE feld-name.

FIELD-SYMBOLS <tc>         TYPE cxtab_control.
FIELD-SYMBOLS <table>      TYPE STANDARD TABLE.
FIELD-SYMBOLS <wa>.
FIELD-SYMBOLS <mark_field>.
*&SPWIZARD: END OF LOCAL DATA------------------------------------------*

ASSIGN (p_tc_name) TO <tc>.

*&SPWIZARD: get the table, which belongs to the tc                     *
CONCATENATE p_table_name '[]' INTO l_table_name. "table body
ASSIGN (l_table_name) TO <table>.                "not headerline

*&SPWIZARD: demark all filled lines                                    *
LOOP AT <table> ASSIGNING <wa>.

*&SPWIZARD: access to the component 'FLAG' of the table header         *
ASSIGN COMPONENT p_mark_name OF STRUCTURE <wa> TO <mark_field>.

<mark_field> = space.
ENDLOOP.
ENDFORM.                                          "fcode_tc_mark_lines
*&---------------------------------------------------------------------*
*&      Form  PRM_ADD_LIST
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM prm_add_list .
DATA:lt_file TYPE filetable.
DATA:ls_file LIKE LINE OF lt_file.
DATA:gv_return TYPE i.
CALL METHOD cl_gui_frontend_services=>file_open_dialog
*  EXPORTING
*    window_title            =
*    default_extension       =
*    default_filename        =
*    file_filter             =
*    with_encoding           =
*    initial_directory       =
*    multiselection          =
CHANGING
file_table              = lt_file
rc                      = gv_return
*      user_action             =
*      file_encoding           =
EXCEPTIONS
file_open_dialog_failed = 1
cntl_error              = 2
error_no_gui            = 3
not_supported_by_gui    = 4
OTHERS                  = 5.
IF sy-subrc <> 0.
ENDIF.

IF lt_file IS NOT INITIAL.
LOOP AT lt_file INTO ls_file.
gw_list-string = ls_file-filename.

SPLIT ls_file-filename AT '\' INTO ls_file-filename gw_list-name.
WHILE gw_list-name CS '\'.
SPLIT ls_file-filename AT '\' INTO ls_file-filename gw_list-name.
ENDWHILE.

APPEND gw_list TO gt_list.
ENDLOOP.

SORT gt_list BY name.
DELETE ADJACENT DUPLICATES FROM gt_list COMPARING name.
ENDIF.

ENDFORM.


在屏幕上分两块,左边为视频或音频播放栏,右边为文件列表,可新增本地文件,可点击文件播放

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: