zoukankan      html  css  js  c++  java
  • ABAP Control Framework(1): Container容器

    ABAP Control Framework

              ABAP屏幕组件示例Tcode:GUIT,Program: SAPM_GUITEST_PORTABLE。ABAP Control Framework可以显示GRID ALV,Picture,TextEdit, HTML,Calendar,Tree,Toolbar等。这些组件通过类实现,命名:CL_GUI_XXXX。

    1.Container

              Container容器父类:CL_GUI_CONTAINER;

              SAP Custom Container: CL_GUI_CUSTOM_CONTAINER;

              SAP Dialogbox Container: CL_GUI_DIALOGBOX_CONTAINER;

              SAP Docking Container: CL_GUI_DOCKING_CONTAINER;

              SAP Splitter Container: CL_GUI_SPLITTER_CONTAINER;

              SAP Easy Splitter Container: CL_GUI_EASY_SPLITTER_CONTAINER;

    示例:

    创建各种容器,需要创建screen 100

    CLASS c4_event_handler DEFINITION.
      PUBLIC SECTION.
        CLASS-METHODS:m_dialog_close FOR EVENT close OF cl_gui_dialogbox_container
          IMPORTING sender.
    
    ENDCLASS.
    CLASS c4_event_handler IMPLEMENTATION.
      METHOD m_dialog_close.
        sender->free( ).
      ENDMETHOD.
    ENDCLASS.
    
    CLASS c4 DEFINITION.
      PUBLIC SECTION.
        DATA:lo_custom_container TYPE REF TO cl_gui_custom_container.
        DATA:lo_dialog_container TYPE REF TO cl_gui_dialogbox_container.
        DATA:lo_docking_container TYPE REF TO cl_gui_docking_container.
        DATA:lo_splitter_container TYPE REF TO cl_gui_splitter_container.
        DATA:lo_easy_splitter_container TYPE REF TO cl_gui_easy_splitter_container.
        METHODS:init_custom_container.
        METHODS:init_dialog_container.
        METHODS:init_docking_container.
        METHODS:init_splitter_container.
        METHODS:init_easy_splitter_container.
    ENDCLASS.
    
    CLASS c4 IMPLEMENTATION.
      METHOD:init_custom_container.
        DATA:lv_parent TYPE REF TO cl_gui_container.
        DATA:lv_container_name TYPE C LENGTH 30 VALUE 'CUSTOM_CONTROL'.
        "控制外观和动作,cl_gui_control中ws_*定义
        DATA:lv_style TYPE I VALUE cl_gui_control=>ws_sysmenu.
        "cl_gui_container=>LIFETIME_DEFAULT,,
        "LIFETIME_IMODE:leave program,leave transaction,销毁
        "LIFETIME_DYNPRO:和screen保持一致,call screen,call transaction,不会销毁
        DATA:lv_lifetime TYPE I VALUE cl_gui_container=>lifetime_dynpro.
    
        CREATE OBJECT lo_custom_container
          EXPORTING
            "parent container
            "parent = lv_parent
            "screen painer定义的cutom control name,必须参数
            container_name = lv_container_name
            style = lv_style
            lifetime = lv_lifetime
            "repid = sy-repid
            "container所在screen
            "dynnr = '100'
            "是否关闭自动program id,dynnr
            no_autodef_progid_dynnr = ''
         EXCEPTIONS
            cntl_error = 1
            cntl_system_error = 2
            create_error = 3
            lifetime_error = 4
            lifetime_dynpro_dynpro_link = 5.
      ENDMETHOD.
      METHOD:init_dialog_container.
        DATA:lv_parent TYPE REF TO cl_gui_container.
        DATA:lv_width TYPE I VALUE 200.
        DATA:lv_height TYPE I VALUE 100.
        DATA:lv_style TYPE I VALUE cl_gui_control=>ws_sysmenu.
        DATA:lv_lifetime TYPE I.
        DATA:lv_caption TYPE C LENGTH 30 VALUE 'title'.
        "METRIC_MM:millimeter;METRIC_PIXEL:pixel metric;METRIC_DEFAULT;
        DATA:lv_metric TYPE I VALUE cl_gui_dialogbox_container=>metric_default.
        "method:set_caption,设置title
        DATA:lv_name TYPE string VALUE 'dialog1'.
        "创建dialog
        CREATE OBJECT lo_dialog_container
          EXPORTING
            "parent = lv_parent
            width = lv_width
            height = lv_height
            style = lv_style
            repid = sy-repid
            dynnr = '100'
            lifetime = lv_lifetime
            "顶部距离
            top = 100
            "左边距离
            left = 100
            "标题
            caption = lv_caption
            no_autodef_progid_dynnr = ''
            metric = lv_metric
            "dialog name
            name = lv_name.
        "设置事件
        SET HANDLER c4_event_handler=>m_dialog_close FOR lo_dialog_container.
        "设置dialog title
        lo_dialog_container->set_caption( 'change title' ).
      ENDMETHOD.
      METHOD:init_docking_container.
        DATA:lv_parent TYPE REF TO cl_gui_container.
        "DOCK_AT_LEFT;DOCK_AT_TOP;DOCK_AT_BOTTOM;DOCK_AT_RIGHT
        DATA:lv_side TYPE I VALUE cl_gui_docking_container=>dock_at_left.
        "扩展,宽度高度
        DATA:lv_extension TYPE I VALUE '100'.
        DATA:lv_style TYPE I.
        DATA:lv_lifetime TYPE I.
        "title
        DATA:lv_caption TYPE C LENGTH 30 VALUE 'title'.
        DATA:lv_metric TYPE I.
        "屏幕百分比,优先于extension
        DATA:lv_ratio TYPE I.
        DATA:lv_name TYPE string.
        "创建docking容器
        CREATE OBJECT lo_docking_container
          EXPORTING
            "parent = lv_parent
            dynnr = '100'
            repid = sy-repid
            side = lv_side
            extension = lv_extension
            style = lv_style
            lifetime = lv_lifetime
            caption = lv_caption
            metric = lv_metric
            ratio = lv_ratio
            no_autodef_progid_dynnr = ''
            name = lv_name.
        "设置docking dock at
        lo_docking_container->dock_at( cl_gui_docking_container=>dock_at_right ).
        "设置docking float
        "PROPERTY_DOCKING;PROPERTY_FLOATING
        lo_docking_container->float( cl_gui_docking_container=>property_docking ).
        "设置extension
        lo_docking_container->set_extension( 100 ).
        "设置caption
        lo_docking_container->set_caption( 'change title' ).
      ENDMETHOD.
      METHOD:init_splitter_container.
        DATA:lv_parent TYPE REF TO cl_gui_container.
        DATA:lv_shell TYPE I.
        DATA:lv_width TYPE I VALUE 400.
        DATA:lv_height TYPE I VALUE 400.
        DATA:lv_metric TYPE C LENGTH 4.
        "ALIGN_AT_BOTTOM;ALIGN_AT_LEFT;ALIGN_AT_RIGHT;ALIGN_AT_TOP
        DATA:lv_align TYPE I VALUE cl_gui_splitter_container=>align_at_left.
        DATA:lv_name TYPE string.
        DATA:lo_control TYPE REF TO cl_gui_control.
        DATA:lv_result TYPE I.
        DATA:lo_container TYPE REF TO cl_gui_container.
        "生成一个两行两列的容器
        CREATE OBJECT lo_splitter_container
          EXPORTING
            link_dynnr = '100'
            link_repid = sy-repid
            shellstyle = lv_shell
            left = 0
            top = 0
            width = lv_width
            height = lv_height
            metric = lv_metric
            align = lv_align
            parent = lv_parent
            "行,列格子
            rows = 2
            columns = 2
            no_autodef_progid_dynnr = ''
            name = lv_name.
        "指定cell,添加control控件
        lo_splitter_container->add_control(
          EXPORTING row = 1 column = 1 control = lo_control
          IMPORTING result = lv_result ).
        "指定cell,移除control控件
        lo_splitter_container->remove_control(
          EXPORTING row = 1 column = 1
          IMPORTING result = lv_result ).
        "获取指定cell,作为容器
        lo_splitter_container->get_container( EXPORTING row = 1 column = 1 ).
        "设置border
        lo_splitter_container->set_border( abap_true ).
        "获取行,列数
        lo_splitter_container->get_columns( IMPORTING result = lv_result ).
        lo_splitter_container->get_rows( IMPORTING result = lv_result ).
        "设置行列
        "MODE_DESIGN;MODE_RUN
        "lo_splitter_container->set_column_mode( ).
        "lo_splitter_container->set_column_width( ).
        "lo_splitter_container->set_column_sash( ).
        "lo_splitter_container->set_row_mode( ).
        "lo_splitter_container->set_row_height( ).
        "lo_splitter_container->set_row_sash( ).
      ENDMETHOD.
      METHOD:init_easy_splitter_container.
        DATA:lv_metric TYPE C LENGTH 4.
        DATA:lv_parent TYPE REF TO cl_gui_container.
        DATA:lv_name TYPE string .
        "创建两个格子容器
        CREATE OBJECT lo_easy_splitter_container
          EXPORTING
            link_dynnr = '100'
            link_repid = sy-repid
            metric = lv_metric
            "parent = lv_parent
            "0:vertical,1:horizontal
            orientation = 0
            sash_position = 50
            "1:with border,0:without
            with_border = 1
            name = lv_name.
       "设置splitter bar位置
       lo_easy_splitter_container->set_sash_position( 30 ).
      ENDMETHOD.
    ENDCLASS.
  • 相关阅读:
    《需求工程——软件建模与分析》读后感之三
    项目目标文档
    利益相关者描述案例
    《需求工程——软件建模与分析》读后感之二
    《需求工程——软件建模与分析》读后感之一
    专业实训题目需求分析
    《代码之美》读后感
    计算“1”的数量
    团队冲刺第九天
    linux df 命令
  • 原文地址:https://www.cnblogs.com/tangToms/p/14736918.html
Copyright © 2011-2022 走看看