ABAP-分屏cl_gui_splitter_container

本文介绍了一个使用 ABAP 实现的 ALV Grid 控件如何在 GUI 中进行分割显示的方法。通过创建和设置多个容器及网格,实现了界面元素的灵活布局,包括水平和垂直分割,并详细展示了如何调整分割比例和大小。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

 

*&---------------------------------------------------------------------*
*& Report  Y_ABC_E02
*&
*&---------------------------------------------------------------------*
*&
*&
*&---------------------------------------------------------------------*

REPORT Y_ABC_E02.


DATA: g_doc_cont   TYPE REF TO cl_gui_docking_container.

DATA: g_grid_left   TYPE REF TO cl_gui_alv_grid.
DATA: g_grid_right  TYPE REF TO cl_gui_alv_grid.
DATA: g_grid2       TYPE REF TO cl_gui_alv_grid.


START-OF-SELECTION.
  CALL SCREEN 100.

*&---------------------------------------------------------------------*
*&      Module  PBO_0100  OUTPUT
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
MODULE pbo_0100 OUTPUT.

  IF g_doc_cont IS INITIAL.
    CREATE OBJECT g_doc_cont
      EXPORTING
        ratio = '95'
        side  = cl_gui_docking_container=>dock_at_left.  " 1

    PERFORM frm_alv_global_splitter_object
              USING g_doc_cont
              CHANGING g_grid_left g_grid_right g_grid2.

  ENDIF.
ENDMODULE.                 " PBO_0100  OUTPUT


*&---------------------------------------------------------------------*
*&      Form  ALV_GLOBAL_SPLITTER_OBJECT
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*      -->PA_DCON    text
*      -->PA_TOP     text
*      -->PA_BOTTOM  text
*      -->PV_HEIGHT  text
*----------------------------------------------------------------------*
FORM frm_alv_global_splitter_object USING
                      pv_dcont  TYPE REF TO cl_gui_docking_container
                                    CHANGING
                      cv_grid1   TYPE REF TO cl_gui_alv_grid
                      cv_grid2   TYPE REF TO cl_gui_alv_grid
                      cv_grid3   TYPE REF TO cl_gui_alv_grid.

  DATA: lv_split  TYPE REF TO cl_gui_splitter_container.
  DATA: lv_split2 TYPE REF TO cl_gui_splitter_container.

*-- 分开
  DATA: lv_t1 TYPE i VALUE 1.
  DATA: lv_t2 TYPE i VALUE 2.

  PERFORM frm_split_cont  USING pv_dcont 2 1     CHANGING lv_split.
  PERFORM frm_split_cont2 USING lv_split 1 1 1 2 CHANGING lv_split2.

  PERFORM frm_split_set_grid USING lv_split2 1 1 CHANGING cv_grid1.
  PERFORM frm_split_set_grid USING lv_split2 1 2 CHANGING cv_grid2.
  PERFORM frm_split_set_grid USING lv_split  2 1 CHANGING cv_grid3.

  lv_split->set_row_height( id = 1 height = 35 ).
  lv_split2->set_column_width( id = 1 width = 60 ).

ENDFORM. "alv_splitter_object

*&---------------------------------------------------------------------*
*&      Form  FRM_SPLIT_CONT
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*      -->P_G_SPLITTER1PA_DCON  text
*      -->P_1      text
*      -->P_2      text
*----------------------------------------------------------------------*
FORM frm_split_cont
        USING    pv_dco_cont TYPE REF TO cl_gui_docking_container
                 pv_c1 pv_c2
        CHANGING pv_splitter TYPE REF TO cl_gui_splitter_container.

  IF pv_dco_cont IS NOT INITIAL.

    CREATE OBJECT pv_splitter
      EXPORTING
        parent  = pv_dco_cont
        rows    = pv_c1
        columns = pv_c2.
  ENDIF.


ENDFORM.                    " FRM_SPLIT_CONT
*&---------------------------------------------------------------------*
*&      Form  frm_split_cont2
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*      -->PV_SPLIT     text
*      -->PV_P1        text
*      -->PV_P2        text
*      -->PV_C1        text
*      -->PV_C2        text
*      <--PV_SPLITTER  text
*----------------------------------------------------------------------*
FORM frm_split_cont2
          USING   pv_split    TYPE REF TO cl_gui_splitter_container
                  pv_p1 pv_p2 pv_c1 pv_c2
         CHANGING pv_splitter TYPE REF TO cl_gui_splitter_container.

  IF pv_split IS NOT INITIAL.
    CREATE OBJECT pv_splitter
      EXPORTING
        parent  = pv_split->get_container( row = pv_p1 column = pv_p2 )
        rows    = pv_c1
        columns = pv_c2.
  ENDIF.


ENDFORM.                    " FRM_SPLIT_CONT
*&---------------------------------------------------------------------*
*&      Form  FRM_SPLIT_CONT_SET
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*      -->P_G_SPLITTER1  text
*      -->P_1      text
*      -->P_1      text
*      <--P_PA_TOP1  text
*----------------------------------------------------------------------*
FORM frm_split_set_grid
                  USING pv_split TYPE REF TO cl_gui_splitter_container
                                  p_v1
                                  p_v2
                         CHANGING cv_grid TYPE REF TO cl_gui_alv_grid.

  DATA: pv_cont TYPE REF TO cl_gui_container.

  CALL METHOD pv_split->get_container
    EXPORTING
      row       = p_v1
      column    = p_v2
    RECEIVING
      container = pv_cont.
  IF sy-subrc = 0.
    CREATE OBJECT cv_grid  "创建第一个ALV,并放在容器中
      EXPORTING
        i_parent = pv_cont.
  ENDIF.
ENDFORM.                    " FRM_SPLIT_CONT_SET

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值