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.
*---------------------------------------------------------------------------------------+
* | Instance Public Method Z_CL_MEDIA->CONSTRUCTOR
* +-------------------------------------------------------------------------------------------------+
* | [--->] PARENT TYPE REF TO CL_GUI_CONTAINER
* +--------------------------------------------------------------------------------------METHOD constructor.
CALLMETHOD super->constructor
EXPORTING
clsid = ‘MediaPlayer.MediaPlayer‘
parent = parent
lifetime = 2EXCEPTIONS
OTHERS = 1.
ENDMETHOD.
*---------------------------------------------------------------------------------------+
* | 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
* +--------------------------------------------------------------------------------------METHOD dispatch.
CALLMETHOD cl_gui_cfw=>flush.
ENDMETHOD.
*---------------------------------------------------------------------------------------+
* | Instance Public Method Z_CL_MEDIA->SETDATASOURCE
* +-------------------------------------------------------------------------------------------------+
* | [--->] FILENAME TYPE STRING
* +--------------------------------------------------------------------------------------METHOD setdatasource.
CALLMETHOD set_property
EXPORTINGproperty = ‘FileName‘
value = filename.
* CALL METHOD set_width
* EXPORTING
* width = 500.
* CALL METHOD set_height
* EXPORTING
* height = 200.CALLMETHODme->set_position
EXPORTING
height = 200
left = 10
top = 10
width = 500EXCEPTIONS
cntl_error = 1
cntl_system_error = 2
OTHERS = 3.
IF sy-subrc <> 0.
ENDIF.
CALLMETHOD cl_gui_cfw=>flush.
ENDMETHOD.
*---------------------------------------------------------------------------------------+
* | Instance Public Method Z_CL_MEDIA->SET_HEIGHT
* +-------------------------------------------------------------------------------------------------+
* | [--->] HEIGHT TYPE I
* | [EXC!] CNTL_ERROR
* +--------------------------------------------------------------------------------------METHOD set_height.
CALLMETHOD super->set_height
EXPORTING
height = height
EXCEPTIONS
cntl_error = 1
OTHERS = 2.
IF sy-subrc <> 0.
* Implement suitable error handling hereENDIF.
ENDMETHOD.
*---------------------------------------------------------------------------------------+
* | 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
* +--------------------------------------------------------------------------------------METHOD set_position.
CALLMETHOD 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.
*---------------------------------------------------------------------------------------+
* | Instance Public Method Z_CL_MEDIA->SET_WIDTH
* +-------------------------------------------------------------------------------------------------+
* | [--->] WIDTH TYPE I
* | [EXC!] CNTL_ERROR
* +--------------------------------------------------------------------------------------METHOD set_width.
CALLMETHOD super->set_width
EXPORTING
width = width
EXCEPTIONS
cntl_error = 1
OTHERS = 2.
IF sy-subrc <> 0.
ENDIF.
ENDMETHOD.
ENDCLASS.
程序ZMEDIA_PLAY TOP:
TYPES:BEGINOF ty_list,
sel(1),
name(50),
stringTYPEstring,
ENDOF ty_list.
DATA:gv_con TYPEREFTO cl_gui_custom_container.
DATA:gl_meida TYPEREFTO z_cl_media,
cl_control TYPEREFTO i_oi_container_control,
cl_error TYPEREFTO i_oi_error,
g_has_activex TYPE c,
cl_errors TYPEREFTO i_oi_error OCCURS0WITHHEADERLINE.
DATA:gt_list TYPETABLEOF ty_list.
DATA:gw_list LIKELINEOF gt_list.
*&SPWIZARD: DECLARATION OF TABLECONTROL ‘TC_9876‘ ITSELFCONTROLS: tc_9876 TYPE TABLEVIEW USINGSCREEN9876.
*&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.
SETPF-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 ISINITIAL.
CREATEOBJECT 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 ISINITIAL.
CREATEOBJECT gl_meida
EXPORTING
parent = gv_con.
ENDIF.
IF gt_list ISINITIAL.
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.
CALLMETHOD cl_gui_cfw=>flush.
ENDMODULE.
*&SPWIZARD: OUTPUT MODULE FOR TC ‘TC_9876‘. DO NOT CHANGE THIS LINE!
*&SPWIZARD: UPDATE LINES FOR EQUIVALENT SCROLLBARMODULE tc_9876_change_tc_attr OUTPUT.
DESCRIBETABLE gt_list LINES tc_9876-lines.
ENDMODULE.
*&SPWIZARD: OUTPUT MODULE FOR TC ‘TC_9876‘. DO NOT CHANGE THIS LINE!
*&SPWIZARD: GET LINES OF TABLECONTROLMODULE 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‘.
LEAVETOSCREEN0.
WHEN ‘CANL‘OR‘EXIT‘.
LEAVEPROGRAM.
WHEN ‘PLAY‘.
READTABLE gt_list INTO gw_list WITH KEY sel = ‘X‘.
IF sy-subrc = 0.
CALLMETHOD 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 TABLEMODULE tc_9876_mark INPUT.
DATA: g_tc_9876_wa2 LIKELINEOF gt_list.
IF tc_9876-line_sel_mode = 1AND gw_list-sel = ‘X‘.
LOOPAT 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 COMMANDMODULE 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 rowPERFORM fcode_insert_row USING p_tc_name
p_table_name.
CLEAR p_ok.
WHEN ‘DELE‘. "delete rowPERFORM 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 listPERFORM 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 linesPERFORM fcode_tc_mark_lines USING p_tc_name
p_table_name
p_mark_name .
CLEAR p_ok.
WHEN ‘DMRK‘. "demark all filled linesPERFORM 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-SYMBOLSTYPE cxtab_control.
FIELD-SYMBOLS
TYPE STANDARD TABLE.
FIELD-SYMBOLSTYPE i.
*&SPWIZARD: END OF LOCAL DATA------------------------------------------*ASSIGN (p_tc_name) TO.
*&SPWIZARD: get the table, which belongs to the tc *CONCATENATE p_table_name ‘[]‘INTO l_table_name. "table bodyASSIGN (l_table_name) TO
. "not headerline*&SPWIZARD: get looplines of TableControl *CONCATENATE‘G_‘ p_tc_name ‘_LINES‘INTO l_lines_name.
ASSIGN (l_lines_name) TO.
*&SPWIZARD: get current line *GETCURSORLINE l_selline.
IF sy-subrc <> 0. " append line to table
l_selline = -lines + 1.
*&SPWIZARD: set top line *IF l_selline > .
-top_line = l_selline - + 1 .
ELSE.
-top_line = 1.
ENDIF.
ELSE. " insert line into table
l_selline = -top_line + l_selline - 1.
l_lastline = -top_line + - 1.
ENDIF.
*&SPWIZARD: set new cursor line *
l_line = l_selline - -top_line + 1.
*&SPWIZARD: insert initial line *INSERTINITIALLINEINTO
INDEX l_selline.
-lines = -lines + 1.
*&SPWIZARD: set cursor *SETCURSORLINE 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-SYMBOLSTYPE cxtab_control.
FIELD-SYMBOLS
TYPE STANDARD TABLE.
FIELD-SYMBOLS.
FIELD-SYMBOLS.
*&SPWIZARD: END OF LOCAL DATA------------------------------------------*ASSIGN (p_tc_name) TO.
*&SPWIZARD: get the table, which belongs to the tc *CONCATENATE p_table_name ‘[]‘INTO l_table_name. "table bodyASSIGN (l_table_name) TO
ASSIGNING .
*&SPWIZARD: access to the component ‘FLAG‘ of the table header *ASSIGNCOMPONENT p_mark_name OFSTRUCTURETO.
IF = ‘X‘.
DELETE
INDEX syst-tabix.
IF sy-subrc = 0.
-lines = -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-SYMBOLSTYPE cxtab_control.
FIELD-SYMBOLSTYPE i.
*&SPWIZARD: END OF LOCAL DATA------------------------------------------*ASSIGN (p_tc_name) TO.
*&SPWIZARD: get looplines of TableControl *CONCATENATE‘G_‘ p_tc_name ‘_LINES‘INTO l_tc_lines_name.
ASSIGN (l_tc_lines_name) TO.
*&SPWIZARD: is no line filled? *IF-lines = 0.
*&SPWIZARD: yes, ... *
l_tc_new_top_line = 1.
ELSE.
*&SPWIZARD: no, ... *CALLFUNCTION‘SCROLLING_IN_TABLE‘EXPORTING
entry_act = -top_line
entry_from = 1
entry_to = -lines
last_page_full = ‘X‘
loops =
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 *GETCURSORFIELD l_tc_field_name
AREA l_tc_name.
IF syst-subrc = 0.
IF l_tc_name = p_tc_name.
*&SPWIZARD: et actual column *SETCURSORFIELD l_tc_field_name LINE1.
ENDIF.
ENDIF.
*&SPWIZARD: set the new top line *-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-SYMBOLSTYPE cxtab_control.
FIELD-SYMBOLS
TYPE STANDARD TABLE.
FIELD-SYMBOLS.
FIELD-SYMBOLS.
*&SPWIZARD: END OF LOCAL DATA------------------------------------------*ASSIGN (p_tc_name) TO.
*&SPWIZARD: get the table, which belongs to the tc *CONCATENATE p_table_name ‘[]‘INTO l_table_name. "table bodyASSIGN (l_table_name) TO
. "not headerline*&SPWIZARD: mark all filled lines *LOOPAT
ASSIGNING .
*&SPWIZARD: access to the component ‘FLAG‘ of the table header *ASSIGNCOMPONENT p_mark_name OFSTRUCTURETO.
= ‘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-SYMBOLSTYPE cxtab_control.
FIELD-SYMBOLS
TYPE STANDARD TABLE.
FIELD-SYMBOLS.
FIELD-SYMBOLS.
*&SPWIZARD: END OF LOCAL DATA------------------------------------------*ASSIGN (p_tc_name) TO.
*&SPWIZARD: get the table, which belongs to the tc *CONCATENATE p_table_name ‘[]‘INTO l_table_name. "table bodyASSIGN (l_table_name) TO
. "not headerline*&SPWIZARD: demark all filled lines *LOOPAT
ASSIGNING .
*&SPWIZARD: access to the component ‘FLAG‘ of the table header *ASSIGNCOMPONENT p_mark_name OFSTRUCTURETO.
= 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 LIKELINEOF lt_file.
DATA:gv_return TYPE i.
CALLMETHOD 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 ISNOTINITIAL.
LOOPAT 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.