设为首页 收藏本站
查看: 1407|回复: 0

[经验分享] SAP Control framework

[复制链接]

尚未签到

发表于 2015-9-18 08:23:34 | 显示全部楼层 |阅读模式
  引用:翱翔云天
    Make you farmiliar with SAP control framework:
  
  Control framework主要包含两个组件:
  1. CL_GUI_CFW:
  这个类里面主要包含一些静态方法(Static method).
  主要组件:
  Dispatch:
  此方法可以触发application event,如果不调用这个方法,application event会在PAI处理结束后自动调用。
  Flush:
  此方法用于同步automation queue。
  Get_living_dynpro_controls:
  返回所有active customer control。
  Set_new_ok_code:
  设置一个新的Function code.该方法只能用于system event的handler方法,以此可以触发PAI处理,然后我们可以对新的ok_code进行处理。
  Get_current_event:
  获得当前事件。
  2. CL_GUI_OBJECT:
  子类:CL_GUI_CONTROL
  作用:我觉得最主要的功能是提供一个抽象的接口,里面的方法很少使用。
  1. CL_GUI_CONTROL
  这个就是我们主要要使用的超类了,先看一下它的子类:
  CL_GUI_CONTROL
  |_ CL_ALV_TREE_BASE
  |_ CL_GUI_ALV_TREE
  |_ CL_GUI_ALV_TREE_SIMPLE
  |_ CL_GUI_PS_ALV_TREE_SIMPLE
  |_ CL_GUI_ALV_GRID_BASE
  |_ CL_GUI_ALV_GRID
  |_ CL_ALV_DD_LISTBOX
  |_ CL_FTR_GUI_ENTRY_ALV
  |_ CL_HRPAYNA_GUI_ALV_GRID
  |_ CL_CALENDAR_CONTROL_SCHEDULE
  |_ CL_GUI_BARCHART
  |_ CL_GUI_CALENDAR
  |_ CL_GUI_CONTAINER
  |_ CL_GUI_CUSTOM_CONTAINER
  |_ CL_GUI_DIALOGBOX_CONTAINER
  |_ CL_GUI_DOCKING_CONTAINER
  |_ CL_GUI_EASY_SPLITTER_CONTAINER
  |_ CL_GUI_GOS_CONTAINER
  |_ CL_GUI_SPLITTER_CONTAINER
  |_ CL_GUI_HTML_VIEWER
  |_ CL_BFW_HTML_VIEWER_POC
  |_ CL_GUI_PDF_VIEWER
  |_ CL_GUI_PICTURE
  |_ CL_GFW_GP_PRES_WEB
  |_ CL_GUI_TEXTEDIT
  |_ CL_GUI_TOOLBAR
  |_ CL_TREE_CONTROL_BASE
  |_ CL_GUI_SIMPLE_TREE
  |_ CL_ITEM_TREE_CONTROL
  |_ CL_GUI_COLUMN_TREE
  |_ CL_GFW_COLUMN_TREE
  |_ CL_HU_COLUMN_TREE
  |_ CL_GUI_LIST_TREE
  4. 关于事件
  4.1两种类型:
  Application event
  System event
  4.2关于application event使用步骤
  -定义数据类型
  it_events TYPE cntl_simple_events,
  wa_event TYPE cntl_simple_event.
  -添加事件
  wa_event-eventid = cl_gui_textedit=>event_double_click.
wa_event-appl_event = ‘X’. “Application event
append wa_event to it_events.
  -dispatch
  CALL METHOD cl_gui_cfw=>dispatch.
  4.3 关于system event使用步骤
  -定义数据类型
  go_event_handler TYPE REF TO cls_event_handler,
  gi_events TYPE cntl_simple_events,
  g_event TYPE cntl_simple_event.
  -定义并且实施event handler类
  CLASS cls_event_handler DEFINITION.
  PUBLIC SECTION.
  METHODS:
  on_function_selected
  FOR EVENT function_selected OF cl_gui_toolbar
  IMPORTING fcode,
  ENDCLASS.

CLASS cls_event_handler IMPLEMENTATION.
  METHOD on_function_selected.
  ……
  ENDMETHOD.
  ENDCLASS.
  -添加事件

       g_event-eventid         = <system-events>.
g_event-appl_event   = space.    "This is an system event
APPEND g_event TO gi_events.
  -注册事件

         CALL METHOD go_toolbar->set_registered_events
  EXPORTING events = gi_events.
  -创建event handler
  CREATE OBJECT go_event_handler.
  -设置event handler

         SET HANDLER go_event_handler->on_function_selected
           FOR go_toolbar.
  5. CL_GUI_TEXTEDIT
  5.1 Constructor
  5.1.1 Text Editor
  我们首先考虑如何创建texteditor,所有首先要知道的是constructor方法。
  看其参数列表:
  MAX_NUMBER_CHARS “能够插入的最大字符数,可选
  STYLE “
  WORDWRAP_MODE “换行模式 可选
  “0:不换行 1:在边界换行 2:在固定位置换行
  WORDWRAP_POSITION “换行位置,只有WORDWRAP_MODE=2时有效 可选
  WORDWRAP_TO_LINEBREAK_MODE “
  FILEDROP_MODE “
  PARENT “必输 container
  LIFETIME “一般不用 可选
  NAME “名字 可选
  5.1.2 Custom Container
  参数:
  PARENT “如果你想container里面包含container,那么这个参数就有用了
  CONTAINER_NAME “名字 必输
  STYLE “风格 可选
  REPID “使用该container的程序
  DYNNR “使用该constainer的屏幕
  1.1 步骤
  5.2.1 定义一个屏幕100


DSC0000.gif
  5.2.2 在100上放一个container,名字为bobo
DSC0001.gif
  5.2.3 设置一个pf-status,定义一个退出function key
DSC0002.gif
  5.2.4 添加一个ok_code
DSC0003.gif
  5.2.5 定义数据类型
  data:
  custom_container type ref to cl_gui_custom_container,
  text_editor type ref to cl_gui_textedit.
  5.2.6 在pbo中创建container和text editor
  CREATE OBJECT CUSTOM_CONTAINER
  EXPORTING
  CONTAINER_NAME = 'BOBO'
  CREATE OBJECT TEXT_EDITOR
  EXPORTING
  WORDWRAP_MODE = 1
  PARENT = custom_container
  1.1 事件处理
  1.1.1 Application event
  1).在前面定义的屏幕上加一个输出字段,以显示事件类型
DSC0004.gif
  2).定义事件所需要的结构以及内表
  * Internal table for events that should be registred
  i_events TYPE cntl_simple_events,
  * Structure for oneline of the table
  wa_events TYPE cntl_simple_event.
  3).定义event handler
  class lcl_event_handler definition.
  public section.
  class-methods:
  catch_dbclick for event dblclick
  of cl_gui_textedit importing sender.
  endclass.
  class lcl_event_handler implementation.
  method catch_dbclick.
  event_type = 'Event dbclick Raised!'.
  endmethod.
  endclass.
  Note:该如何确定control里面都有什么事件呢?常用的event列表如下:
  DBLCLICK
  double click
  F1
  F1 pressed
  F4
  F4 pressed
  CONTEXT_MENU
  Context Menu requested (by pressing right mouse)
  CONTEXT_MENU_SELECTED
  Context Menu item selected
  ON_DROP
  drop occured
  ON_DRAG
  drag occured
  ON_DROP_COMPLETE
  complete drag and drop operation
  4).在创建text editor之后注册事件
  * Link the event handler method to the event and the
  * TextEdit control
  * 注意,因为是静态方法,所以用=>
  SET HANDLER lcl_event_handler=>catch_dbclick FOR text_editor.
  * Register the event in the internal table i_events
  wa_events-eventid = cl_gui_textedit=>event_double_click.
  wa_events-appl_event = 'X'. "This is an application event
  append wa_events to i_events.
  * Pass the table to the TextEdit control using method
  * set_registred_events
  call method text_editor->set_registered_events
  exporting events = i_events.
  5).测试程序效果
DSC0005.gif
  双击之后:
DSC0006.gif
  1.1.1 System event
  基本上和application event差不多,只需要注意以下几点:
  1).appl_event = space
  2).不需要cl_gui_cfw=>Dispatch
  3).需要重新设置ok_code

      call method cl_gui_cfw=>set_new_ok_code
        exporting new_code = 'XXX'.
  4).需要重新处理新设置的OK_CODE
  CASE OK_CODE.
  WHEN ‘XXX’.
  ……
  ENDCASE.
  1.2 调用方法
  1.2.1 可调用常用方法列表
  SET_REGISTERED_EVENTS
  注册事件
  CONSTRUCTOR
  创建对象的时候调用
  DELETE_TEXT
  删除所有文本
  EMPTY_UNDO_BUFFER
  清空UNDO缓存
  FIND_AND_REPLACE
  查找替换
  FIND_AND_SELECT_TEXT
  查找
  GET_LINE_TEXT
  取得某行的文本
  GET_SELECTED_TEXT_AS_R3TABLE
  把选择的文本放到内表中
  GET_SELECTED_TEXT_AS_STREAM
  get selected text as stream
  GET_SELECTION_INDEXES
  get absolute character indexes of selection
  GET_SELECTION_POS
  获得选择文本的位置
  GET_TEXT_AS_R3TABLE
  把文本放到内表
  GET_TEXT_AS_STREAM
  get whole text as stream from control (incl. "\r" and "\n")
  GO_TO_LINE
  跳到某一884C
  HIGHLIGHT_LINES
  高亮显示设定的行
  HIGHLIGHT_SELECTION
  把选择的文本高亮显示
  INDENT_LINES
  定义缩进的行
  INDENT_SELECTION
  对所选内容缩进
  MAKE_SELECTION_VISIBLE
  OPEN_LOCAL_FILE
  打开本地文件,一般已经集成在toolbar里面了
  PROTECT_LINES
  set protect mode for a range of lines
  PROTECT_SELECTION
  set protect mode for selection
  REGISTER_EVENT_CONTEXT_MENU
  registration for event context menu
  REGISTER_EVENT_DBLCLICK
  registration for event double-click
  REGISTER_EVENT_F1
  registration for event key F1 pressed
  REGISTER_EVENT_F4
  registration for event key F4 pressed
  REGISTER_EVENT_FILEDROP
  egistration for event file dropped
  REPLACE_ALL
  replace all
  SAVE_AS_LOCAL_FILE
  save as local file
  SELECT_LINES
  select area of lines, not necessarily within visible part
  SET_AUTOINDENT_MODE
  set auto indent behavior on or off
  SET_COMMENTS_STRING
  set string which indicates the whole line is a comment
  SET_FILEDROP_MODE
  set file drop mode of TextEdit control
  SET_FIRST_VISIBLE_LINE
  SET_HIGHLIGHT_COMMENTS_MODE
  SET_READONLY_MODE
  set TextEdit control 'read only' flag true or flase
  SET_SPACES_ON_INDENT
  set number of spaces to use for indenting and unindenting
  SET_SELECTION_POS
  set text selection within control
  SET_SELECTION_POS_IN_LINE
  set selection to a certain line and position
  SET_SELECTION_INDEXES
  set selection using character indexes
  SET_STATUS_TEXT
  set status text in status bar of control
  SET_TOOLBAR_MODE
  set toolbar visibility of TextEdit control
  SET_WORDBREAK_PROCEDURE
  set wordbreak procedure
  SET_WORDWRAP_BEHAVIOR
  set wordwrap behavior of TextEdit control
  UNINDENT_LINES
  unindent a range of lines
  UNINDENT_SELECTION
  unindent selected text area
  SET_NAVIGATE_ON_DBLCLICK
  set navigate on double-click mode of TextEdit control
  COMMENT_LINES
  change a range of lines into comments
  COMMENT_SELECTION
  change a selected number of lines into comments
  UNCOMMENT_LINES
  uncomment a range of lines
  UNCOMMENT_SELECTION
  uncomment a selceted number of lines
  DISPLAY_CONTEXT_MENU
  display context menu
  REGISTER_EVENT
  event registration
  UNREGISTER_EVENT
  event registration
  REGISTER_DRAGDROP
  register at control framework for drag & drop
  1.1.1 如何调用方法
  我们以set_text_as_r3table为例介绍一下具体的步骤:
  1).在前面的例子的屏幕上放置一个按钮,名字IMPORT,OK_CODE:IMP
DSC0007.gif
  2).定义一个call_meth类,里面包含load_text方法
  class call_meth definition.
  public section.
  types:
  begin of t_texttab,
  line(255) type c,
  end of t_texttab.
  data:
  i_texttab type table of t_texttab.
  methods:
  load_text.
  private section.
  methods:
  add_data.
  endclass.
  class call_meth implementation.
  method add_data.
  * Create internal table with texts
  APPEND 'This a method that fills the TextEdit control' TO i_texttab.
  APPEND 'with a text.' TO i_texttab.
  DO 10 TIMES.
  APPEND 'hallo world !' TO i_texttab.
  ENDDO.
  endmethod.
  method load_text.
  Call method add_data.
  * Load TextEdit control with texts
  CALL METHOD text_editor->set_text_as_r3table
  EXPORTING table = i_texttab.
  IF sy-subrc > 0.
  * Display an error message
  EXIT.
  ENDIF.
  endmethod.
  endclass.
  3).调用flush方法,同步
  * All methods that operates on controls are transferred to the frontend
  * by a RFC calls. the method FLUSH is used
  CALL METHOD cl_gui_cfw=>flush.
  IF sy-subrc > 0.
  * Display an error message
  ENDIF.
  4).在ok_code的处理的时候调用call_met->load_text
  when 'IMP'.
  create object call_meth_ref.
  call method call_meth_ref->load_text.
  5).测试结果:
DSC0008.gif
  点击import之后:
DSC0009.gif
  注意:因为每次调用的时候都会创建call_meth对象,所以会重新添加记录到内表,这样就避免了每次都要clear内表。
  1.1 更多的方法和事件
  我们上面用到了几个方法,分别是:
  SET_TEXT_AS_R3TABLE:这个方法把内表中的数据发送到text control中
  SET_TEXT_AS_STREAM: 这个基本和SET_TEXT_AS_R3TABLE差不多
  SET_REGISTERED_EVENTS:注册事件
  下面我们再介绍几个常用的方法:
  5.5.1 GET_REGISTERED_EVENTS
  参数:
  EVENTS Type CNTL_SIMPLE_EVENTS
  这个方法从CL_GUI_CONTROL继承而来,没有重新定义,作用是得到当前已经注册的事件,小例子如下:
  定义数据:
  data:
  rg_events type CNTL_SIMPLE_EVENTS.
  定义方法:
  class call_meth definition.
  public section.
  types:
  begin of t_texttab,
  line(255) type c,
  end of t_texttab.
  data:
  i_texttab type table of t_texttab.
  data:
  rg_events type CNTL_SIMPLE_EVENTS.
  methods:
  load_text,
  load_events.
  private section.
  data:
  indicator type c.
  methods:
  add_data importing ind type c.
  endclass.
  class call_meth implementation.
  method add_data.
  data: begin of rtab,
  e_name(50) type c,
  e_type(20) type c,
  end of rtab.
  data: itab like table of rtab.
  data: r_event type CNTL_SIMPLE_EVENT.
  case ind.
  when '1'.
  * Create internal table with texts
  APPEND 'This a method that fills the TextEdit control'
  TO i_texttab.
  APPEND 'with a text.' TO i_texttab.
  DO 10 TIMES.
  APPEND 'hallo world !' TO i_texttab.
  ENDDO.
  when '2'.
  call method text_editor->GET_REGISTERED_EVENTS
  importing events = rg_events.
  loop at rg_events into r_event.
  case r_event-eventid.
  when -601.
  rtab-e_name = 'EVENT_DOUBLE_CLICK'.
  when 2.
  when 0.
  when 1.
  when 5.
  when 6.
  when 3.
  rtab-e_name = 'EVENT_F1'.
  when others.
  endcase.
  if r_event-appl_event = space.
  rtab-e_type = 'System Event'.
  else.
  rtab-e_type = 'Application Event'.
  endif.
  append rtab to itab.
  endloop.
  call method text_editor->SET_TEXT_AS_STREAM
  exporting TEXT = itab.
  when others.
  endcase.
  endmethod.
  method load_text.
  call method add_data exporting ind = '1'.
  * Load TextEdit control with texts
  CALL METHOD text_editor->set_text_as_r3table
  EXPORTING table = i_texttab.
  IF sy-subrc > 0.
  * Display an error message
  EXIT.
  ENDIF.
  * All methods that operates on controls are transferred to the frontend
  * by a RFC calls. the method FLUSH is used to determine when this is don
  CALL METHOD cl_gui_cfw=>flush.
  IF sy-subrc > 0.
  * Display an error message
  ENDIF.
  endmethod.
  method load_events.
  call method add_data exporting ind = '2'.
  call method cl_gui_cfw=>flush.
  endmethod.
  endclass.
  定义OK_CODE处理
  when 'IMP'.
  if call_meth_ref is initial.
  create object call_meth_ref.
  call method call_meth_ref->load_text.
  else.
  call method call_meth_ref->load_text.
  endif.
  when 'GRE'.
  if call_meth_ref is initial.
  create object call_meth_ref.
  call method call_meth_ref->load_events.
  else.
  call method call_meth_ref->load_events.
  endif.
  5.5.2 GET_SELECTION_POS和SET_SELECTION_POS
  定义屏幕字段:
DSC00010.gif
  定义数据:
  data:
  fline type i,
  tline type i,
  fpos type i,
  tpos type i,
  gfline type i,
  gtline type i,
  gfpos type i,
  gtpos type i.
  处理ok_code:
  when 'SSP'.
  CALL METHOD text_editor->SET_SELECTION_POS
  EXPORTING
  FROM_LINE = fline
  FROM_POS = fpos
  TO_LINE = tline
  TO_POS = tpos
  EXCEPTIONS
  ERROR_CNTL_CALL_METHOD = 1
  others = 2
  .
  when 'GSP'.
  CALL METHOD text_editor->GET_SELECTION_POS
  IMPORTING
  FROM_LINE = gfline
  FROM_POS = gfpos
  TO_LINE = gtline
  TO_POS = gtpos
  EXCEPTIONS
  ERROR_CNTL_CALL_METHOD = 1
  others = 2
  .
  5.5.3 SET_READONLY_MODE
  这个方法设置text editor为只读模式,你在创建好text editor之后调用就可以。
  CALL METHOD TEXT_EDITOR->SET_READONLY_MODE
  EXPORTING
  READONLY_MODE = 1 “0:可以修改 1:只读
  EXCEPTIONS
  ERROR_CNTL_CALL_METHOD = 1
  INVALID_PARAMETER = 2
  others = 3 .
  1.1 总结
  因为text editor比较简单,而且使用的不是很频繁,所以就不多介绍,估计这些也就够用了。
  1. CL_GUI_SPLITTER_CONTAINER
  这个类相对就简单太多了,主要功能就是container的拆分。
  6.1首先我们先看看它的几个常用的方法:
  CONSTRUCTOR:构造方法
  主要参数:
  PARENT -- Parent Container
  ROWS –需要显示多少行,举例,你想把container分成上下两个部分,那么rows = 2
  COLUMNS – 需要分成多少列
  接下来主要是一些setter和getter方法
  SET_BORDER 设置边框的格式,space:不设置 ‘X’:设置
  效果如图:
  Space:
DSC00011.gif
  ‘X’:
DSC00012.gif
  SET_ROW_HEIGHT — GET_ROW_HEIGHT 用来设置行的高度
  SET_COLUMN_WIDTH - GET_COLUMN_WIDTH 设置列的宽度
  SET_ROW_MODE - GET_ROW_MODE 设置行的模式
  SET_COLUMN_MODE - GET_COLUMN_MODE 设置列的模式
  下面这四个方法原理一样,主要设置splitter的属性,例如能不能移动等等
  SET_ROW_SASH - GET_ROW_SASH
  SET_COLUMN_SASH - GET_COLUMN_SASH
  6.2 小例子
  我们就以前面介绍的texteditor来举例,在一个container中添加3个texteditor
  6.2.1 创建屏幕,定义一下ok_code就可以了
  6.2.2 定义类以及方法
  首先初始化屏幕
  *创建第一个splitter,水平分割初始化的cl_gui_container
  create object splitter_h
  exporting parent = cl_gui_container=>screen0
  rows = 1
  columns = 2.
  * 设置边框
  CALL METHOD splitter_h->SET_BORDER
  EXPORTING
  BORDER = 'X' “有边框的
  EXCEPTIONS
  CNTL_ERROR = 1
  CNTL_SYSTEM_ERROR = 2
  others = 3
  .
  * 设置模式
  CALL METHOD splitter_h->SET_COLUMN_MODE
  EXPORTING
  MODE = 0
  EXCEPTIONS
  CNTL_ERROR = 1
  CNTL_SYSTEM_ERROR = 2
  others = 3
  .
  * 设置属性
  CALL METHOD splitter_h->SET_COLUMN_SASH
  EXPORTING
  ID = 1
  TYPE = splitter_h->TYPE_MOVABLE
  VALUE = 0
  EXCEPTIONS
  CNTL_ERROR = 1
  CNTL_SYSTEM_ERROR = 2
  others = 3
  .
  *设置列的宽度
  CALL METHOD splitter_h->SET_COLUMN_WIDTH
  EXPORTING
  ID = 1
  WIDTH = 300
  EXCEPTIONS
  CNTL_ERROR = 1
  CNTL_SYSTEM_ERROR = 2
  others = 3
  .
  * 取得分开后的两个container
  container_left = splitter_h->get_container( row = 1 column = 1 ).
  container_right = splitter_h->get_container( row = 1 column = 2 ).
  * 然后分割右边的container
  create object splitter_v
  exporting parent = container_right
  rows = 2
  columns = 1.
  CALL METHOD splitter_v->SET_BORDER
  EXPORTING
  BORDER = 'X'
  EXCEPTIONS
  CNTL_ERROR = 1
  CNTL_SYSTEM_ERROR = 2
  others = 3 .
  CALL METHOD splitter_v->SET_row_MODE
  EXPORTING
  MODE = splitter_v->mode_absolute
  EXCEPTIONS
  CNTL_ERROR = 1
  CNTL_SYSTEM_ERROR = 2
  others = 3 .
  CALL METHOD splitter_v->SET_row_height
  EXPORTING
  ID = 1
  height = 150
  EXCEPTIONS
  CNTL_ERROR = 1
  CNTL_SYSTEM_ERROR = 2
  others = 3 .
  * 取得分割右边container后的两个container
  container_top = splitter_v->get_container( row = 1 column = 1 ).
  container_bottom = splitter_v->get_container( row = 2 column = 1 ).
  endmethod.
  6.2.3 往已经分割好的container中添加texteditor
  method add_control.
  CREATE OBJECT editor_1
  EXPORTING
  PARENT = container_left .
  CREATE OBJECT editor_2
  EXPORTING
  PARENT = container_top .
  CREATE OBJECT editor_3
  EXPORTING
  PARENT = container_bottom .
  endmethod.
  6.2.4 测试程序代码
  REPORT ZBOBO_SPLITER_CONTROL .
  data: con type ref to cl_gui_container.
  DATA OK_CODE LIKE SY-UCOMM.
  class create_screen definition create private.
  public section.
  class-methods:
  init_screen.
  methods:
  constructor,
  add_control.
  private section.
  data:
  splitter_h type ref to cl_gui_splitter_container,
  splitter_v type ref to cl_gui_splitter_container,
  container_left type ref to cl_gui_container,
  container_right type ref to cl_gui_container,
  container_top type ref to cl_gui_container,
  container_bottom type ref to cl_gui_container,
  editor_1 type ref to cl_gui_textedit,
  editor_2 type ref to cl_gui_textedit,
  editor_3 type ref to cl_gui_textedit.
  methods:
  fill_data.
  endclass.
  class create_screen implementation.
  method init_screen.
  data: screen type ref to create_screen.
  create object screen.
  endmethod.
  method constructor.
  data:
  events type cntl_simple_events,
  event type cntl_simple_event.
  * container_left type ref to cl_gui_container,
  * container_right type ref to cl_gui_container.
  * container_top type ref to cl_gui_container,
  * container_bottom type ref to cl_gui_container.
  create object splitter_h
  exporting parent = cl_gui_container=>screen0
  rows = 1
  columns = 2.
  CALL METHOD splitter_h->SET_BORDER
  EXPORTING
  BORDER = 'X'
  EXCEPTIONS
  CNTL_ERROR = 1
  CNTL_SYSTEM_ERROR = 2
  others = 3
  .
  CALL METHOD splitter_h->SET_COLUMN_MODE
  EXPORTING
  MODE = 0
  EXCEPTIONS
  CNTL_ERROR = 1
  CNTL_SYSTEM_ERROR = 2
  others = 3
  .
  CALL METHOD splitter_h->SET_COLUMN_SASH
  EXPORTING
  ID = 1
  TYPE = splitter_h->TYPE_MOVABLE
  VALUE = 0
  EXCEPTIONS
  CNTL_ERROR = 1
  CNTL_SYSTEM_ERROR = 2
  others = 3
  .
  CALL METHOD splitter_h->SET_COLUMN_WIDTH
  EXPORTING
  ID = 1
  WIDTH = 300
  EXCEPTIONS
  CNTL_ERROR = 1
  CNTL_SYSTEM_ERROR = 2
  others = 3
  .
  container_left = splitter_h->get_container( row = 1 column = 1 ).
  container_right = splitter_h->get_container( row = 1 column = 2 ).
  create object splitter_v
  exporting parent = container_right
  rows = 2
  columns = 1.
  CALL METHOD splitter_v->SET_BORDER
  EXPORTING
  BORDER = 'X'
  EXCEPTIONS
  CNTL_ERROR = 1
  CNTL_SYSTEM_ERROR = 2
  others = 3
  .
  CALL METHOD splitter_v->SET_row_MODE
  EXPORTING
  MODE = splitter_v->mode_absolute
  EXCEPTIONS
  CNTL_ERROR = 1
  CNTL_SYSTEM_ERROR = 2
  others = 3
  .
  CALL METHOD splitter_v->SET_row_height
  EXPORTING
  ID = 1
  height = 150
  EXCEPTIONS
  CNTL_ERROR = 1
  CNTL_SYSTEM_ERROR = 2
  others = 3
  .
  container_top = splitter_v->get_container( row = 1 column = 1 ).
  container_bottom = splitter_v->get_container( row = 2 column = 1 ).
  call method add_control.
  endmethod.
  method add_control.
  CREATE OBJECT editor_1
  EXPORTING
  PARENT = container_left .
  CREATE OBJECT editor_2
  EXPORTING
  PARENT = container_top .
  CREATE OBJECT editor_3
  EXPORTING
  PARENT = container_bottom .
  endmethod.
  method fill_data.
  endmethod.
  endclass.
  start-of-selection.
  call screen 100.
  *&---------------------------------------------------------------------*
  *& Module STATUS_0100 OUTPUT
  *&---------------------------------------------------------------------*
  * text
  *----------------------------------------------------------------------*
  MODULE STATUS_0100 OUTPUT.
  SET PF-STATUS 'STATUS_100'.
  * SET TITLEBAR 'xxx'.
  CALL METHOD CREATE_SCREEN=>INIT_SCREEN.
  ENDMODULE. " STATUS_0100 OUTPUT
  *&---------------------------------------------------------------------*
  *& Module USER_COMMAND_0100 INPUT
  *&---------------------------------------------------------------------*
  * text
  *----------------------------------------------------------------------*
  MODULE USER_COMMAND_0100 INPUT.
  CASE OK_CODE.
  WHEN 'BACK'.
  LEAVE PROGRAM.
  ENDCASE.
  ENDMODULE. " USER_COMMAND_0100 INPUT
  6.2.5 测试结果如图:
DSC00013.gif
  6.2.6 更深探讨
  我们把整个屏幕都分了,那么能不能我们只分割一个customer_container呢?
  答案是当然可以,我们首先放一个customer container到屏幕上,然后创建custom container,然后在此基础上分割custom container.
  创建屏幕:
DSC00014.gif
  添加代码:
  data: con type ref to cl_gui_custom_container.
  CREATE OBJECT con
  EXPORTING
  CONTAINER_NAME = 'BOBO' .
  create object splitter_h
  exporting parent = con
  rows = 1
  columns = 2.
  看看效果:
DSC00015.gif
  到此splitter control介绍完毕。

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-115153-1-1.html 上篇帖子: 【BAdI】Definition&Using SAP New BAdI 下篇帖子: Delphi 连接SAP
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表