on abap and ocx
今天去拜访了一下师傅,很是感慨。。。感慨之余,将所见所闻之新玩意儿找找资料,演练落实一下。
技术这玩意儿,一是要用,用则易学,用则显灵,二是要思,思则明,思则通,思则达,三是要破,不破不立,不能固步自封,如一招鲜,吃遍天,天下唯此术独尊之类思想是不可取的,技术思想、技术手段随着人们智能的发展、应用的深入是不断发展的,永无止境。
abap是面向商业编程用的,对底层和系统的操控能力欠佳,但是,应该还是有一些技术手段弥补这些先天不足的。比如,与ocx结合。
下面援引的一个老白的例子,揭示了一般原理和方法。
REPORT z_barry_flash NO STANDARD PAGE HEADING.
DATA: cont TYPE REF TO cl_gui_custom_container .
CLASS cl_flash DEFINITION DEFERRED .
DATA: o_flash TYPE REF TO cl_flash .
DATA: o_flash TYPE REF TO cl_flash .
*---------------------------------------------------------------------*
* CLASS cl_flash DEFINITION
*---------------------------------------------------------------------*
CLASS cl_flash DEFINITION INHERITING FROM cl_gui_control .
PUBLIC SECTION .
METHODS:
constructor
IMPORTING
value(shellstyle) TYPE i OPTIONAL
value(disp_mode) TYPE i OPTIONAL
value(life_time) TYPE i OPTIONAL
value(name) TYPE string OPTIONAL
EXCEPTIONS
cntl_error
cntl_install_error .
ENDCLASS . "cl_flash DEFINITION
* CLASS cl_flash DEFINITION
*---------------------------------------------------------------------*
CLASS cl_flash DEFINITION INHERITING FROM cl_gui_control .
PUBLIC SECTION .
METHODS:
constructor
IMPORTING
value(shellstyle) TYPE i OPTIONAL
value(disp_mode) TYPE i OPTIONAL
value(life_time) TYPE i OPTIONAL
value(name) TYPE string OPTIONAL
EXCEPTIONS
cntl_error
cntl_install_error .
ENDCLASS . "cl_flash DEFINITION
*----------------------------------------------------------------------*
* CLASS cl_flash IMPLEMENTATION
*----------------------------------------------------------------------*
CLASS cl_flash IMPLEMENTATION .
* CLASS cl_flash IMPLEMENTATION
*----------------------------------------------------------------------*
CLASS cl_flash IMPLEMENTATION .
METHOD constructor.
DATA: ctrl_name(80) TYPE c ,
wf_clsid(100) TYPE c .
IF NOT cl_gui_object=>activex IS INITIAL .
wf_clsid = '{D27CDB6E-AE6D-11cf-96B8-444553540000}' .
ELSE .
RAISE cntl_error .
ENDIF .
DATA: ctrl_name(80) TYPE c ,
wf_clsid(100) TYPE c .
IF NOT cl_gui_object=>activex IS INITIAL .
wf_clsid = '{D27CDB6E-AE6D-11cf-96B8-444553540000}' .
ELSE .
RAISE cntl_error .
ENDIF .
CALL METHOD super->constructor
EXPORTING
clsid = wf_clsid
parent = cont
shellstyle = shellstyle
lifetime = life_time
name = name
EXCEPTIONS
cntl_system_error = 1
OTHERS = 2.
CASE sy-subrc .
WHEN 1 .
RAISE cntl_install_error .
WHEN 2 .
RAISE cntl_error .
ENDCASE .
EXPORTING
clsid = wf_clsid
parent = cont
shellstyle = shellstyle
lifetime = life_time
name = name
EXCEPTIONS
cntl_system_error = 1
OTHERS = 2.
CASE sy-subrc .
WHEN 1 .
RAISE cntl_install_error .
WHEN 2 .
RAISE cntl_error .
ENDCASE .
CALL METHOD set_property
EXPORTING
property = 'Movie'
value = 'c:\test.swf'
EXCEPTIONS
cntl_system_error = 1
cntl_error = 2
OTHERS = 3.
EXPORTING
property = 'Movie'
value = 'c:\test.swf'
EXCEPTIONS
cntl_system_error = 1
cntl_error = 2
OTHERS = 3.
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 .
EXPORTING
ref = me
shellid = me->h_control-shellid
EXCEPTIONS
OTHERS = 1.
IF sy-subrc NE 0 .
RAISE cntl_error .
ENDIF .
ENDMETHOD . "constructor
ENDCLASS . "cl_flash IMPLEMENTATION
ENDCLASS . "cl_flash IMPLEMENTATION
START-OF-SELECTION.
CALL SCREEN 100 .
CALL SCREEN 100 .
*&---------------------------------------------------------------------*
*& Module STATUS_0100 OUTPUT
*&---------------------------------------------------------------------*
MODULE status_0100 OUTPUT.
SET PF-STATUS 'MAIN'.
IF cont IS INITIAL.
CREATE OBJECT cont
EXPORTING
container_name = 'CON1'.
CREATE OBJECT o_flash .
ENDIF.
ENDMODULE. " STATUS_0100 OUTPUT
*& Module STATUS_0100 OUTPUT
*&---------------------------------------------------------------------*
MODULE status_0100 OUTPUT.
SET PF-STATUS 'MAIN'.
IF cont IS INITIAL.
CREATE OBJECT cont
EXPORTING
container_name = 'CON1'.
CREATE OBJECT o_flash .
ENDIF.
ENDMODULE. " STATUS_0100 OUTPUT
*&---------------------------------------------------------------------*
*& Module USER_COMMAND_0100 INPUT
*&---------------------------------------------------------------------*
MODULE user_command_0100 INPUT.
CASE sy-ucomm.
WHEN 'BACK'.
LEAVE PROGRAM.
ENDCASE.
ENDMODULE. " USER_COMMAND_0100 INPUT
test my signature
posted on 2009-10-22 20:23 NextStep-V 阅读(813) 评论(0) 收藏 举报
浙公网安备 33010602011771号