ABAP OO分屏:sflight

*&---------------------------------------------------------------------*
*& Report  ZTEST_CESHI
*&---------------------------------------------------------------------*
REPORT ztest_ceshi.

TABLES: sflight.

"抬头数据输出
TYPES: BEGIN OF ty_head.
        INCLUDE TYPE scarr.
TYPES:   slbox   TYPE c,
         light   TYPE icon_d,
         message TYPE string,
         END OF ty_head.
DATA: gt_head TYPE TABLE OF ty_head,
      gs_head TYPE ty_head.
"行项目数据输出
TYPES: BEGIN OF ty_item.
        INCLUDE TYPE sflight.
TYPES:   slbox   TYPE c,
         light   TYPE icon_d,
         message TYPE string,
         END OF ty_item.

DATA: gt_item TYPE TABLE OF ty_item,
      gs_item TYPE ty_item.

DATA:g_cust_con    TYPE REF TO cl_gui_custom_container.

"字段属性定义
DATA: gs_fcat TYPE lvc_s_fcat.
DATA: gt_fcat_h TYPE lvc_t_fcat,
      gt_fcat_i TYPE lvc_t_fcat.
DATA: gs_layout_h TYPE lvc_s_layo,
      gs_layout_i TYPE lvc_s_layo.
DATA: gs_variant_h TYPE disvariant,
      gs_variant_i TYPE disvariant,
      gv_colno     TYPE i.
DATA: gt_ui_func TYPE ui_functions. "隐藏alv菜单控件

DATA: ok_code TYPE sy-ucomm. "用户功能码接收
DATA: save_ok TYPE sy-ucomm. "用户功能码接收

"ALV grid
DATA: gs_dock        TYPE REF TO cl_gui_docking_container,
      gs_splitter    TYPE REF TO cl_gui_splitter_container, "分割屏幕类
      gs_container_h TYPE REF TO cl_gui_container, "抬头容器
      gs_container_i TYPE REF TO cl_gui_container, "行项目容器
      gs_grid_h      TYPE REF TO cl_gui_alv_grid, "抬头屏幕对象类
      gs_grid_i      TYPE REF TO cl_gui_alv_grid. "行项目屏幕对象类

CONSTANTS: gc_h   TYPE c VALUE 'H'. "抬头标识符
CONSTANTS: gc_i  TYPE c VALUE 'I'. "行项目标识符

"选择屏幕
SELECTION-SCREEN BEGIN OF BLOCK blk1 WITH FRAME.
SELECT-OPTIONS: s_carrid FOR sflight-carrid.
SELECTION-SCREEN END OF BLOCK blk1 .

START-OF-SELECTION.
  "取数
  PERFORM frm_select_data.

END-OF-SELECTION.
  "输出屏幕准备
  PERFORM frm_prepare_alv.
  "调用100屏幕输出
  CALL SCREEN 0100.

MODULE pbo OUTPUT.
  SET PF-STATUS 'MAIN100'.
  SET TITLEBAR 'MAINTITLE' WITH 'OOALV分割'.
ENDMODULE.

MODULE pai INPUT.
  save_ok = ok_code.
  CLEAR ok_code.

  CASE save_ok.
    WHEN '&F03' OR '&F12' OR '&F15'.
      LEAVE TO SCREEN 0. "返回上一个屏幕
    WHEN OTHERS.
  ENDCASE.
ENDMODULE.
MODULE init_alv OUTPUT.
  IF gs_dock IS INITIAL.
    "屏幕分割
    PERFORM frm_split_screen.

    "创建alv grid
    PERFORM frm_create_grid.
    "显示数据
    PERFORM frm_display_alv USING gc_h gs_grid_h.
    PERFORM frm_display_alv USING gc_i gs_grid_i.

  ELSE.
    "alv 刷新
    PERFORM frm_refresh_alv USING gs_grid_h.
    PERFORM frm_refresh_alv USING gs_grid_i.
  ENDIF.
ENDMODULE.
FORM frm_select_data .
  SELECT *
    FROM scarr
    INTO CORRESPONDING FIELDS OF TABLE gt_head
  WHERE carrid IN s_carrid.
  SELECT *
    FROM sflight
    INTO CORRESPONDING FIELDS OF TABLE gt_item
  WHERE carrid IN s_carrid.
ENDFORM.
FORM frm_prepare_alv .
* ALV字段属性
  PERFORM frm_build_fieldcat.
* 屏幕隐藏按钮
  PERFORM frm_build_ui_functions.
* 屏幕布局
  PERFORM frm_set_layout.
* 屏幕自定义布局参数
  PERFORM frm_set_variant.
ENDFORM.
FORM frm_build_fieldcat .
  DEFINE m_fcat_0100.
    CLEAR gs_fcat.
    gs_fcat-fieldname = &1.
    gs_fcat-ref_field = &2.
    gs_fcat-ref_table = &3.
    gs_fcat-coltext   =
    gs_fcat-seltext   =
    gs_fcat-tooltip   =
    gs_fcat-reptext   =
    gs_fcat-scrtext_l = &4.
    gs_fcat-checkbox  = &5.
    gs_fcat-edit      = &6.
    gs_fcat-hotspot       = &7.
    gv_colno          = gv_colno + 1.
    gs_fcat-col_pos   = gv_colno.
    CASE &8.
      WHEN gc_h.
        APPEND gs_fcat TO gt_fcat_h.
      WHEN gc_i.
        APPEND gs_fcat TO gt_fcat_i.
      WHEN OTHERS.
    ENDCASE.
  END-OF-DEFINITION.
  REFRESH: gt_fcat_h.
  CLEAR: gv_colno.
* 抬头屏幕字段
  m_fcat_0100 'CARRID' '' '' '航线代码' '' '' '' gc_h.
  m_fcat_0100 'CARRNAME' '' '' '航线名称' '' '' '' gc_h.
  m_fcat_0100 'CURRCODE' '' '' '航班的本地货币' '' '' '' gc_h.
  m_fcat_0100 'URL' '' '' '航线 URL' '' '' '' gc_h.
  REFRESH: gt_fcat_i.
  CLEAR: gv_colno.
* 行项目屏幕字段
  m_fcat_0100 'CARRID' '' '' '航线代码' '' '' '' gc_i.
  m_fcat_0100 'CONNID' '' '' '航班连接编号' '' '' '' gc_i.
  m_fcat_0100 'FLDATE' '' '' '航班日期' '' '' '' gc_i.
  m_fcat_0100 'PRICE' '' '' '航空运费' '' '' '' gc_i.
  m_fcat_0100 'CURRENCY' '' '' '航班的本地货币' '' '' '' gc_i.
  m_fcat_0100 'PLANETYPE' '' '' '飞机类型' '' '' '' gc_i.
  m_fcat_0100 'SEATSMAX' '' '' '经济舱的最大容量' '' '' '' gc_i.
  m_fcat_0100 'SEATSOCC' '' '' '占据的经济舱座位' '' '' '' gc_i.
  m_fcat_0100 'PAYMENTSUM' '' '' '当前预定总数' '' '' '' gc_i.
  m_fcat_0100 'SEATSMAX_B' '' '' '商务舱的最大容量' '' '' '' gc_i.
  m_fcat_0100 'SEATSOCC_B' '' '' '占据的商务舱座位' '' '' '' gc_i.
  m_fcat_0100 'SEATSMAX_F' '' '' '头等舱的最大容量' '' '' '' gc_i.
  m_fcat_0100 'SEATSOCC_F' '' '' '占据的头等舱座位' '' '' '' gc_i.
ENDFORM.
FORM frm_build_ui_functions.
  DATA: ls_ui_func TYPE ui_func.
  REFRESH: gt_ui_func.
  ls_ui_func = cl_gui_alv_grid=>mc_fc_loc_copy .
  APPEND ls_ui_func TO gt_ui_func.
  ls_ui_func = cl_gui_alv_grid=>mc_fc_loc_copy_row .
  APPEND ls_ui_func TO gt_ui_func.
  ls_ui_func = cl_gui_alv_grid=>mc_fc_loc_cut .
  APPEND ls_ui_func TO gt_ui_func.
  ls_ui_func = cl_gui_alv_grid=>mc_fc_refresh .
  APPEND ls_ui_func TO gt_ui_func.
  ls_ui_func = cl_gui_alv_grid=>mc_fc_loc_move_row .
  APPEND ls_ui_func TO gt_ui_func.
  ls_ui_func = cl_gui_alv_grid=>mc_fc_loc_paste .
  APPEND ls_ui_func TO gt_ui_func.
  ls_ui_func = cl_gui_alv_grid=>mc_fc_loc_paste_new_row .
  APPEND ls_ui_func TO gt_ui_func.
  ls_ui_func = cl_gui_alv_grid=>mc_fc_loc_undo .
  APPEND ls_ui_func TO gt_ui_func.
  ls_ui_func = cl_gui_alv_grid=>mc_fc_pc_file .
  APPEND ls_ui_func TO gt_ui_func.
  ls_ui_func = cl_gui_alv_grid=>mc_fc_loc_delete_row .
  APPEND ls_ui_func TO gt_ui_func.
  ls_ui_func = cl_gui_alv_grid=>mc_fc_loc_insert_row .
  APPEND ls_ui_func TO gt_ui_func.
  ls_ui_func = cl_gui_alv_grid=>mc_fc_loc_append_row.
  APPEND ls_ui_func TO gt_ui_func.
ENDFORM. " FRM_BUILD_UI_FUNCTIONS

FORM frm_set_layout .

  CLEAR: gs_layout_h.
  gs_layout_h-zebra      = 'X'.        "striped pattern
  gs_layout_h-cwidth_opt = 'X'.        "Optimized width

  gs_layout_i = gs_layout_h.

ENDFORM. " FRM_SET_LAYOUT
FORM frm_set_variant .
  "用于区分抬头和项目的布局

  CLEAR: gs_variant_h.
  gs_variant_h-handle = '1001'.
  gs_variant_h-report = sy-repid.

  CLEAR: gs_variant_i.
  gs_variant_i-handle = '2001'.
  gs_variant_i-report = sy-repid.

ENDFORM. " FRM_SET_VARIANT
FORM frm_split_screen.
****************开始*******************
  "创建屏幕容器:comtainer
*  CREATE OBJECT gs_dock
*    EXPORTING
*      repid                       = sy-repid
*      dynnr                       = '0100'
**     side                        = cl_gui_docking_container=>property_floating
*      side                        = cl_gui_docking_container=>dock_at_left
*      extension                   = 200
*      metric                      = 0
*      ratio                       = 95
*    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.
*    MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
*               WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
*  ENDIF.

*  CREATE OBJECT gs_splitter
*    EXPORTING
*      parent  = gs_dock
*      rows    = 2
*      columns = 1.

*********************结束***********************

****************开始*******************
  IF g_cust_con IS INITIAL.
    CREATE OBJECT g_cust_con
      EXPORTING
        container_name = 'GC_CON'.
  ENDIF.

**拆分成二行一列部分*
*  CREATE OBJECT gs_splitter
*    EXPORTING
*      parent  = g_cust_con
*      rows    = 2
*      columns = 1.
**********************结束***********************
*
**第一行一列*
*  CALL METHOD gs_splitter->get_container
*    EXPORTING
*      row       = 1
*      column    = 1
*    RECEIVING
*      container = gs_container_h.
*
**第二行一列*
*  CALL METHOD gs_splitter->get_container
*    EXPORTING
*      row       = 2
*      column    = 1
*    RECEIVING
*      container = gs_container_i.


*拆分成一行二列部分*
  CREATE OBJECT gs_splitter
    EXPORTING
      parent  = g_cust_con
      rows    = 1
      columns = 2.
*********************结束***********************

*第一行一列*
  CALL METHOD gs_splitter->get_container
    EXPORTING
      row       = 1
      column    = 1
    RECEIVING
      container = gs_container_h.

*第一行二列*
  CALL METHOD gs_splitter->get_container
    EXPORTING
      row       = 1
      column    = 2
    RECEIVING
      container = gs_container_i.


ENDFORM.

FORM frm_create_grid .

  "创建抬头屏幕对象
  CREATE OBJECT gs_grid_h
    EXPORTING
      i_parent = gs_container_h.
  "准备输入事件
  CALL METHOD gs_grid_h->set_ready_for_input
    EXPORTING
      i_ready_for_input = 1.

  "check data changed
  CALL METHOD gs_grid_h->check_changed_data.
  "数据变更事件
  CALL METHOD gs_grid_h->register_edit_event
    EXPORTING
      i_event_id = cl_gui_alv_grid=>mc_evt_modified.

  "创建行项目屏幕对象
  CREATE OBJECT gs_grid_i
    EXPORTING
      i_parent = gs_container_i.
ENDFORM. " FRM_CREATE_GRID

FORM frm_display_alv USING pv_flg TYPE c
                           pv_grid TYPE REF TO cl_gui_alv_grid .

  CASE pv_flg.
    WHEN gc_h.

      CALL METHOD pv_grid->set_table_for_first_display
        EXPORTING
*         I_CONSISTENCY_CHECK           = 'X'
          is_variant                    = gs_variant_h
          it_toolbar_excluding          = gt_ui_func
          i_save                        = 'A'
          i_default                     = 'X' "允许定义默认布局
          is_layout                     = gs_layout_h
        CHANGING
          it_outtab                     = gt_head
          it_fieldcatalog               = gt_fcat_h
        EXCEPTIONS
          invalid_parameter_combination = 1
          program_error                 = 2
          too_many_lines                = 3
          OTHERS                        = 4.
      IF sy-subrc <> 0.
        MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
                        WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
      ENDIF.
    WHEN gc_i.
      CALL METHOD pv_grid->set_table_for_first_display
        EXPORTING
*         I_CONSISTENCY_CHECK           = 'X'
          is_variant                    = gs_variant_i
          it_toolbar_excluding          = gt_ui_func
          i_save                        = 'A'
          i_default                     = 'X' "允许定义默认布局
          is_layout                     = gs_layout_i
        CHANGING
          it_outtab                     = gt_item
          it_fieldcatalog               = gt_fcat_i
        EXCEPTIONS
          invalid_parameter_combination = 1
          program_error                 = 2
          too_many_lines                = 3
          OTHERS                        = 4.
      IF sy-subrc <> 0.
        MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
                        WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
      ENDIF.

    WHEN OTHERS.
  ENDCASE.

ENDFORM. " FRM_DISPLAY_ALV
FORM frm_refresh_alv USING pv_grid TYPE REF TO cl_gui_alv_grid.
  "刷新变量
  DATA: ls_stable TYPE lvc_s_stbl.

  "刷新显示
  CLEAR ls_stable.
  ls_stable-row = 'X'."基于行刷新
  ls_stable-col = 'X'."基于列刷新
  CALL METHOD pv_grid->refresh_table_display
    EXPORTING
      is_stable = ls_stable
    EXCEPTIONS
      finished  = 0
      OTHERS    = 0.
ENDFORM. " FRM_REFRESH_ALV

-----------------------------------------------------------------------------------------------------------------

*100屏幕
PROCESS BEFORE OUTPUT.
  MODULE pbo .
  MODULE init_alv .

PROCESS AFTER INPUT.
  MODULE pai .

------------------------------------------------------------------------------------------------------------------

--------------------------------------------------------------------------------------------------------------------

创建 GUI

展示界面

  • 17
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
基于C++&OPENCV 的全景图像拼接 C++是一种广泛使用的编程语言,它是由Bjarne Stroustrup于1979年在新泽西州美利山贝尔实验室开始设计开发的。C++是C语言的扩展,旨在提供更强大的编程能力,包括面向对象编程和泛型编程的支持。C++支持数据封装、继承和多态等面向对象编程的特性和泛型编程的模板,以及丰富的标准库,提供了大量的数据结构和算法,极大地提高了开发效率。12 C++是一种静态类型的、编译式的、通用的、大小写敏感的编程语言,它综合了高级语言和低级语言的特点。C++的语法与C语言非常相似,但增加了许多面向对象编程的特性,如类、对象、封装、继承和多态等。这使得C++既保持了C语言的低级特性,如直接访问硬件的能力,又提供了高级语言的特性,如数据封装和代码重用。13 C++的应用领域非常广泛,包括但不限于教育、系统开发、游戏开发、嵌入式系统、工业和商业应用、科研和高性能计算等领域。在教育领域,C++因其结构化和面向对象的特性,常被选为计算机科学和工程专业的入门编程语言。在系统开发领域,C++因其高效性和灵活性,经常被作为开发语言。游戏开发领域中,C++由于其高效性和广泛应用,在开发高性能游戏和游戏引擎中扮演着重要角色。在嵌入式系统领域,C++的高效和灵活性使其成为理想选择。此外,C++还广泛应用于桌面应用、Web浏览器、操作系统、编译器、媒体应用程序、数据库引擎、医疗工程和机器人等领域。16 学习C++的关键是理解其核心概念和编程风格,而不是过于深入技术细节。C++支持多种编程风格,每种风格都能有效地保证运行时间效率和空间效率。因此,无论是初学者还是经验丰富的程序员,都可以通过C++来设计和实现新系统或维护旧系统。3

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值