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 .
 
*---------------------------------------------------------------------*
* 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 .
  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 .
    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 .
    CALL METHOD set_property
      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 .
  ENDMETHOD . "constructor
ENDCLASS . "cl_flash IMPLEMENTATION
 
START-OF-SELECTION.
  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  USER_COMMAND_0100  INPUT
*&---------------------------------------------------------------------*
MODULE user_command_0100 INPUT.
  CASE sy-ucomm.
    WHEN 'BACK'.
      LEAVE PROGRAM.
  ENDCASE.
ENDMODULE.                 " USER_COMMAND_0100  INPUT
 

posted on 2009-10-22 20:23  NextStep-V  阅读(813)  评论(0)    收藏  举报

导航