屏幕内创建按钮
SELECTION-SCREEN: PUSHBUTTON [/n] <pos(len)> <name> USER-COMMAND <ucom> [MODIF ID <key>].
/n:按钮初始时距离屏幕左边的位置
<pos(len)>:PUSHBUTTON 按钮在屏幕生成的位置与长度。
<name>:PUSHBUTTON按钮的名称,给按钮赋值时要用到名字。
<ucom>:必须指定的字符代码,当用户在选择屏幕上触发按钮时,<ucom> 被输入到词典对象字段:SSCRFIELDS-UCOMM 中,必须显式使用语句 TABLES 引用 SSCRFIELDS。
实例:
TABLES SSCRFIELDS.
INCLUDE:<icon>.
SELECTION-SCREEN PUSHBUTTON /1(20) PUBU1 USER-COMMAND comd1.
SELECTION-SCREEN SKIP.
SELECTION-SCREEN PUSHBUTTON /10(25) PUBU2 USER-COMMAND comd2.
AT SELECTION-SCREEN OUTPUT.
MOVE 'CALL NEXT SCREEN' TO PUBU1. "给PUBU1按钮赋值描述"
WRITE ICON_OKAY AS ICON TO PUBU2. "给PUBU2按钮添加图标,并且在给按钮赋值之前,否则将会把文字替换。"
CONCATENATE PUBU2 'My Second Button' INTO PUBU2 SEPARATED BY SPACE. "给第二个按钮添加赋值描述"
AT SELECTION-SCREEN.
IF SSCRFIELDS-UCOMM = 'COMD1'.
PERFORM xxxx. "调用子程序"
ENDIF.
函数设置 Push button 属性:
INCLUDE <icon>.
SELECTION-SCREEN: PUSHBUTTON 1(22) BUT1 USER-COMMAND BT1.
INITIALIZATION.
CALL FUNCTION 'ICON_CREATE'
EXPORTING
name = icon_oo_object
text = 'Download Template'
info = '下载模板文件'
* ADD_STDINF = 'X'
IMPORTING
RESULT = BUT1
EXCEPTIONS
icon_not_found = 1
outputfield_too_short = 2
OTHERS = 3.
在工具栏上新增一个功能按钮
SELECTION-SCREEN FUNCTION KEY n.
该按钮的定义保存在系统结构体 SSCRFIELDS 中,n 为一个整数序数最大至 5。
当 n=1 时,其按钮描述保存在字段 SSCRFIELDS-FUNCTXT_01 中,其按钮对象命名为"FC01”,保存在字段SSCRFIELDS-UCOMM 中。
示例代码
TABLES SSCRFIELDS. "引用词典对象"
TYPE-POOLS ICON. "Program Icon Library"
DATA functxt TYPE SMP_DYNTXT. "SMP_DYNTXT(菜单制作器:动态文本的程序接口)"
PARAMETERS: p_carrid TYPE s_carr_id,
p_cityfr TYPE s_from_cit.
SELECTION-SCREEN: FUNCTION KEY 1,FUNCTION KEY 2.
INITIALIZATION. "屏幕初始化"
functxt-icon_id = '@49@'. "文本字段中的图标(替换显示,别名)"
functxt-quickinfo = 'Download Template'. "菜单制作器:信息文本 (4.0),滑鼠移去过去显示的信息TIP"
functxt-icon_text ='Download Template'. "菜单制作器:图标文本 (4.0),菜单名称"
sscrfields-functxt_01 = functxt.
functxt-icon_text = 'UA'.
sscrfields-functxt_02 = functxt.
AT SELECTION-SCREEN.
CASE SSCRFIELDS-UCOMM.
WHEN 'FC01'.
p_carrid = 'LH'.
p_cityfr = 'Frankfurt'.
WHEN 'FC02'.
p_carrid = 'UA'.
p_cityfr = 'Chicago'.
ENDCASE.
屏幕单选框分组显示界面内容
通过 Group 将 GUI 需要显示的界面进行分组,并在 AT SELECTION-SCREEN OUTPUT.事件中对每一个单选项选择进行判断,并激活对应的界面。
SELECTION-SCREEN BEGIN OF BLOCK BLK1 WITH FRAME TITLE TEXT-008.
PARAMETERS: P_R1 TYPE FLAG RADIOBUTTON GROUP C1 DEFAULT 'X' USER-COMMAND US1,
P_R2 TYPE FLAG RADIOBUTTON GROUP C1,
P_R3 TYPE FLAG RADIOBUTTON GROUP C1.
SELECTION-SCREEN END OF BLOCK BLK1.
SELECTION-SCREEN BEGIN OF BLOCK BLK2 WITH FRAME TITLE TEXT-007.
PARAMETERS: P_PEDTR TYPE PLAF-PEDTR MODIF ID PR1 DEFAULT SY-DATUM.
PARAMETERS: P_WERKS TYPE T001W-WERKS MODIF ID PR1 MEMORY ID WRK.
PARAMETERS: P_TIME TYPE MSEG-MENGE VISIBLE LENGTH 6 DEFAULT '22.5' MODIF ID PR1.
SELECT-OPTIONS: S_AUFNR FOR AFKO-AUFNR MODIF ID PR1 .
SELECTION-SCREEN END OF BLOCK BLK2.
SELECTION-SCREEN BEGIN OF BLOCK BLK3 WITH FRAME TITLE TEXT-008.
PARAMETERS: P_WERK TYPE T001W-WERKS MODIF ID PR2 MEMORY ID WRK.
SELECT-OPTIONS: S_MATNR FOR MARA-MATNR MODIF ID PR2 ,
S_DRAWN FOR MARA-ZZ_DRAWING_NO MODIF ID PR2 ,
S_ZMC FOR ZPP_MOLDMACTON-Z_MC MODIF ID PR2,
S_ZTONS FOR ZPP_MOLDMACTON-ZTONS MODIF ID PR2 ,
S_WSHOP FOR ZPP_MOLDMACTON-ZWKSHOP MODIF ID PR2,
S_SDATE FOR ZPP_MOLDSCHE-SDATE MODIF ID PR2 NO-EXTENSION NO INTERVALS,
S_SDAT2 FOR ZPP_MOLDSCHE-SDATE MODIF ID PR2 DEFAULT SY-DATUM.
SELECTION-SCREEN END OF BLOCK BLK3.
AT SELECTION-SCREEN OUTPUT.
LOOP AT SCREEN.
IF P_R1 = 'X'.
IF SCREEN-GROUP1 = 'PR2'.
SCREEN-ACTIVE = 0.
ELSE.
SCREEN-ACTIVE = 1.
ENDIF.
ELSEIF P_R2 = 'X' OR P_R3 = 'X'.
IF SCREEN-GROUP1 = 'PR1'.
SCREEN-ACTIVE = 0.
ELSE.
SCREEN-ACTIVE = 1.
IF P_R3 = 'X'.
IF SCREEN-NAME CS 'S_SDATE'.
SCREEN-ACTIVE = 0.
ENDIF.
ELSEIF P_R2 = 'X'.
IF SCREEN-NAME CS 'S_SDAT2'.
SCREEN-ACTIVE = 0.
ENDIF.
ENDIF.
ENDIF.
ENDIF.
MODIFY SCREEN.
ENDLOOP.
选择屏幕子屏幕
*&---------------------------------------------------------------------*
*& Report zsubscreen
*&---------------------------------------------------------------------*
REPORT zsubscreen.
TABLES spfli.
SELECTION-SCREEN BEGIN OF SCREEN 110 AS SUBSCREEN.
SELECTION-SCREEN BEGIN OF BLOCK blk1 WITH FRAME TITLE text-010.
SELECT-OPTIONS: s_carrid FOR spfli-carrid,
s_conn FOR spfli-connid.
SELECTION-SCREEN END OF BLOCK blk1.
SELECTION-SCREEN END OF SCREEN 110.
SELECTION-SCREEN BEGIN OF SCREEN 120 AS SUBSCREEN.
SELECTION-SCREEN BEGIN OF BLOCK blk2 WITH FRAME TITLE text-011.
SELECT-OPTIONS: s_cntrfr FOR spfli-countryfr,
s_cityfr FOR spfli-cityfrom,
s_airpfr FOR spfli-airpfrom.
PARAMETERS: s_depdt LIKE sy-datum.
SELECTION-SCREEN END OF BLOCK blk2.
SELECTION-SCREEN END OF SCREEN 120.
SELECTION-SCREEN BEGIN OF SCREEN 130 AS SUBSCREEN.
SELECTION-SCREEN BEGIN OF BLOCK blk3 WITH FRAME TITLE text-012.
SELECT-OPTIONS: s_cntrto FOR spfli-countryto,
s_cityto FOR spfli-cityto,
s_airpto FOR spfli-airpto.
PARAMETERS: s_retdt LIKE sy-datum.
SELECTION-SCREEN END OF BLOCK blk3.
SELECTION-SCREEN END OF SCREEN 130.
SELECTION-SCREEN BEGIN OF TABBED BLOCK tab_block FOR 10 LINES.
SELECTION-SCREEN TAB (20) tab1 USER-COMMAND comm1
DEFAULT SCREEN 110.
SELECTION-SCREEN TAB (20) tab2 USER-COMMAND comm2
DEFAULT SCREEN 120.
SELECTION-SCREEN TAB (20) tab3 USER-COMMAND comm3
DEFAULT SCREEN 130.
SELECTION-SCREEN END OF BLOCK tab_block.
INITIALIZATION.
tab1 = 'Connection'(010).
tab2 = 'Departure. City'(011).
tab3 = 'Arrival City'(012).
tab_block-activetab = 'COMM1'.
tab_block-dynnr = 110.
START-OF-SELECTION.
BREAK-POINT.