FGL程序运行时可用的画面已经可做出来了,但总不能只是拿来 DISPLAY TO 资料,应该要拿来做一些操作吧?
FGL 自然不是只拿画面来输出资料的。直接归纳给各位看,编排一个常用的剧情如下:
上述剧情中的 4 场景,可对应到FGL的『4类』6种交谈指令,分类分别为:
语法: 指令名称 ATTRIBUTES(属性)
控制区块
END 指令
不同的交谈指令具备不同的属性与控制区块,如果不存在控制区块,则可以不用END指令。接下来探究个别的交谈指令用法。
MENU "显示MENU的操作说明"
COMMAND "A.按下说明" #MENU-COMMAND 是最简单的结构,後方跟上的是要显示给操作者看的 "字串"
#此处写该功能的程序码,例如 CALL function,可以做检查、做功能
#第一个字元系统会自动转换为快捷键,因此建议不要使用中文字元,而以英文字元并且勿重复,如"A"
ON ACTION action_id #MENU-COMMAND 有多语言问题,所以Genero另外推出 MENU-ON ACTION结构
# action_id 只是一个编号,正式呈现的以 .4ad(action default)档案设定为准 ( [Resource档案设定](https://ithelp.ithome.com.tw/articles/10260628) ),包含快捷键
#其余功能与 COMMAND 控制区块相同
COMMAND KEY(F1) #旧式的快捷键写法,新式的使用 .4ad档案设定
#此处写功能的程序码
ON IDLE 5 #若操作人进入此段落後不操做键盘、滑鼠 5秒钟,则触发此段落
#此处写对应处理的程序码,例如终止或退出程序
ON TIMER 10 #3.20後提供的新控制区块,可指定一个定期需要检是的指令段落
#此处写循环检查的品项,例如是不是已经满足了『全部的连线都已经超过IDLE设定』之类的消息检查
END MENU
主要功能如程序码范例内描述的。另外控制区块还可以有 BEFORE MENU / AFTER MENU。意思就是在进入MENU前与离开 MENU指令的时候个别要做哪些事情。
特殊形的控制区块 (如BEFORE MENU/AFTER MENU/ON IDLE等),没办法指定多次。
DISPLAY 的语法将会较MENU更加复杂,毕竟MENU的存在只是单纯提供功能的选择;而** DISPLAY ARRAY的存在,除了次要的功能选择外,最主要的是用来呈现阵列的资料 **。因此使用 DISPLAY 前要先将画面处理好。也就是OPEN WINDOW中要含有 TABLE或SCROLLGRID 容器。并且栏位数要能对上 (包含phatom)。
当栏位数无法对上时,执行 DISPLAY ARRAY会出现错误讯息。(编译时不会)
DISPLAY ARRAY中控制区块,MENU有的DISPLAY ARRAY 都有,只是此处改为 BEFORE DISPLAY/AFTER DISPLAY来管理进入前与离开後。
DISPLAY ARRAY g_array TO s_array.* ATTRIBUTES(COUNT=total_rows) #显示阵列变数到画面阵列(s_array)
#此功能开始出现ATTRIBUTES,可预先指定此指令要表现的行为,COUNT为总显示行数
BEFORE ROW #进入一行时要做的事
CALL DIALOG.setSelectionMode( "s_array", 1 ) #将此DISPLAY ARRAY设定为多选,0为单选
#此处写功能的程序码:例如重新确认资料库刷新画面 (多人共同编辑资料的时候要做的保护)
AFTER ROW #离开一行时要做的事
#此处写功能的程序码
以上是DISPLAY ARRAY初段落常出现的范例。在 ATTRIBUTES 部分,常见的除了 COUNT之外还有
DISPLAY ARRAY 可以维护TABLE/SCROLLGIRD甚至是 TREE containar,因此还可支援下述区块,提供不同的画面使用:
就地维护控制区块 (TABLE/SCROLLGRID/TREE适用)
理论上已经启用了交谈指令A,若不是同样处在同一个DIALOG时,是不能再调起另一个交谈指令的。但是在Genero 2.50後,开始支持简易版的就地维护模式,因此在DISPLAY ARRY中创造下列的豁免区块,可以在下列区块中启动INPUT指令进行单行的维护。
ON INSERT
LET li_pos = ARR_CURR() #确定插入的位置
INPUT g_arr[li_pos].* FROM record1[scr_line()].*
AFTER INPUT
IF g_arr[li_pos].warehouse_no IS NOT NULL THEN
INSERT INTO d_tag(tenantsid,comp_no) VALUES(g_tenantsid,g_comp_no)
END IF
END INPUT
依据上面的范例,简单的说就是触发後,放入一个INPUT指令,输入完成(AFTER INPUT)时,顺便执行写入资料库(INSERT INTO) 的工作。
另外,在范例中,要特别注意:
拖拉功能控制区块 (TABLE/TREE适用)
树状伸展控制区块 (TREE适用)
上面提到的 ** 『拖拉(drag and drop)』与『树状(TREE)开启(expand)/关闭(collapse)』** 将会由特殊形态的程序开发方法来做介绍说明。
熟悉这些控制区块,才能够对应到不同用户的需求,设计出符合规格的应用程序。其他的交谈指令项目待下回分解。
堆积(Heap) 堆积,是一种树状结构,用於实现「优先伫列(Priority queue)」。Pri...
定义 指的是用一段连续的储存单元一次储存线性串列的资料元素 优缺 优点: 无须为表示串列中元素之间的...
游戏专题进行了半个月,耗费最大的心力是在处理碰撞的逻辑问题,为1 Pixcel的逻辑误差斤斤计较,不...
首先先写测试 我们昨天测试了首页, 那我们今天要开始做新的设计, 并且针对我们的设计来做测试, 我们...
Day 16 - Android Studio 一个简单的计数器 上次我们大致介绍了Andorid ...