[FGL] OPEN WINDOW WITH 画面档

前几个篇章中,若使用到客户端 (如GDC/GBC) 呈现画面时,Hello World 都只能出现在小小的选单上,备极委屈。为什麽不是在正中间?因为还没开画面呢。

Genero FGL 可以透过 4GL代码来动态产出画面。但是好麻烦。需要有一堆的基础设定 (ui.Window / ui.Form) 与生出元件的功能。因此在过往的 i4GL就已直接采用『表单画面』的套表方式:预铸好画面档,需要使用的时候开一下。如果真的需要微调,再做『合规的』微调。

也就是因为这样的特性,优点是开发快速,程序码精简。缺点是想要设计出特别的画面控件 (widget) 可能需要透过其他技术实现 (例如串用 webcomponent)

OPEN WINDOW WITH FORM 以画出来的FORM作为视窗开启

若开始使用画面,则GDC须保持启动待命。执行时会计算 License

PER

手工维护一个 PER

LAYOUT
GRID
{
  Hello World, [who      ]
}
END --GRID
END --LAYOUT

ATTRIBUTES
  EDIT who = FORMONLY.who;
END  --ATTRIBUTE

整个PER由 SCHEMA/LAYOUT/TABLES/ATTRIBUTES/INSTRUCTIONS 等常用区块与补充区块 (如 TOPMENU上方选单,TOOLBAR工具列,ACTION Default功能多语言设定等) 组成。此处选取形成PER的最简易区段LAYOUT + ATTRIBUTES维范例。

  • LAYOUT: 配置画面长相的区块,在这边部署各种画面元件(widget),预设采相对位置呈现(client软件会进行实际呈现的渲染/微调),GRID是最基本的空白画布。
  • ATTRIBUTES:配置LAYOUT中出现的每个widget 属性。包含是甚麽widget、名称、宽度与个别的特殊属性。

其他区块的使用说明

档案完成後,使用 fglform 进行编译

fglform hello

若编译有错误时,会提出错误点,依照指示修正即可。PER档案具备向下相容特性。
搭配微调的 hello.4gl 如下

MAIN
  DEFINE who  VARCHAR(20)

  OPEN WINDOW w WITH FORM "hello"      #开新的视窗
  DISPLAY ARG_VAL(1) TO formonly.who   #把资料显示上去

  MENU
     ON ACTION exit
     EXIT MENU
  END MENU
END MAIN

编译後以指令 fglrun hello alex 来执行会得到下列执行样态
https://ithelp.ithome.com.tw/upload/images/20210911/20051169scDHE3MspZ.png

程序透过 OPEN WINDOW 开启一个新视窗,
使用 DISPLAY .... TO.... 指令将讯息呈现在指定的栏位上

screen

有发现吗?FGL 预设自带一个视窗,为『screen』。
若需要使用的是自己所制作的画面,则 screen 可先进行关闭,以节省使用资源。故在较大型的应用作业中,都可以看到初始时就进行 CLOSE WINDOW screen 的指令

同时多画面

FGL允许 OPEN WINDOW 多个,但焦点 (focus)仅能在单一的画面上。也就是说当新开一个画面,焦点会被切过去新的。若要返回其他画面操作,需用 CURRENT WINDOW IS xxx 指定

画面的开关

画面若不需要使用时,建议进行CLOSE WINDOW关闭画面。程序开发时,建议尽量在同一个 function 内进行画面的开/关,避免遗忘关闭 (正常离开程序时会主动先行关闭所有画面,但若客户端-GDC-网路条件不好,则可能被判断为异常终止而不会主动关闭画面)

画面元件种类

Genero FGL提供的画面元件从 1.X 起逐步增加,持续扩增中。个别 widget支援的属性也持续调整。所以此段必须回归到各版的文件参考。下方连结 Genero 3.20 线上文件查看 (例如DATETIME Edit元件在 Genero 3.20版才开始提供)
Genero 3.20画面元件文件

用 Studio 开发画面吧! 4FD的救援

用背诵指令的开发方法太痛苦,打开 Genero Studio把

在 Studio 中为了能实现更好的拖拉开发等操作方式,另行制作了XML为基底的4FD格式。编译时,Studio会先将4FD转换为对应的PER,再由PER进行编译的工作
https://ithelp.ithome.com.tw/upload/images/20210911/20051169NIHyX3vufl.png

GeneroStudio中,支援直接画,与从db汇入生成的作法。後者我们在介绍 fgldbsch时再做说明。启用前者画图时,画面如下
https://ithelp.ithome.com.tw/upload/images/20210911/20051169wpKPJnxmWc.png

引用 FourJs 的学习影片如下:

下列路径还有其他 Studio 培训影片(英文) https://4js.com/training/videos/genero-studio/

4FD 的语法会随着Studio的版本更换而调整。升级时均须透过Genero Studio所提供的工具,进行4FD的升版调整。4FD无法『直接』向下相容。在少数特殊状况下,也会发生工具无法协助升级的情况,此时就应先转换回 PER 档案,再做『重新汇入为4FD的程序』。
https://ithelp.ithome.com.tw/upload/images/20210911/20051169cXk2ntJRfk.png

本章节主要在谈 PER/4FD 的一些基础概念,要画出复杂的画面还是要多参考其他画面的作法。其他较为进阶的则分散在个别主题内叙述。


<<:  [CSS] Flex/Grid Layout Modules, part 6

>>:  CSS微动画 - 为什麽别人的按钮点起来比较有感觉?

失误的修补智慧

在各行各业工作时,很多人都有因为工作上失误,而被上司责骂的经验,这些必经的过程,被视为「学习」和「记...

移动设备安全政策是防止影子 IT 使用的最佳安全控制

移动设备安全政策是防止影子 IT 使用的最佳安全控制。用户教育可促进对安全政策和问题的普遍认识,但应...

Day 24 | Livewire 实作 购物网站(三): 加入购物车

实作了商品细节页之後就要把商品加进购物车啦,今天会把要买的东西存进 Laravel 的 Sessio...

笔记-Color in Image and Video

Basics of Color Light and Spectra(光和光谱) 可见光(visibl...

[Day 6] 非监督式学习 K-means 分群

非监督式学习 K-means 分群 今日学习目标 非监督式学习 何谓非监督式学习? 集群分析? 分群...