FMSYS
FMSYS是PML专门用于系统、窗体、菜单的对象,其不同于标准对象。由于其特殊性,使用方法也有所差异。
由于对象的特殊性,可直接使用全局变量使用。!!FMSYS
LoadForm
该方法主要用于将窗体对象加载到内存中。如果想调用窗体对象中的方法,又不想使用show !!formName
的方式,显式加载窗体,用该方法即可。
!form = !!FMSYS.LoadForm(!formName)
!form.Method()
传入的参数类型是字符串,值为要调用的窗体名。返回类型是FORM,是窗体对象。
菜单
菜单的主要应用场景是工具栏和弹出菜单
工具栏
工具栏需要使用BAR
来实现。
主菜单
setup form !!yyformtest dialog Size 30 5
BAR
!this.BAR.Add('Choose', 'menu1')
exit
子菜单
子菜单需要使用MENU
实现。
!menu = !this.NewMenu('menu1')
!menu.Add('menu', 'save', 'submenu')
!menu.Add('Callback', 'Check', '!this.check()')
- menu1需要和bar中增加的一样,这样就实现了绑定。
- 如果需要为子菜单增加子菜单,只要在
Add
方法里,参数1为menu
。 - 子菜单可以实现任意层次的嵌套。
开关菜单
开关菜单指的是在菜单前面有一个勾选项,可以选择该菜单是开还是关。例如给增加一个子菜单,并添加方法。当该菜单打开时,显示菜单已经开启,当该菜单关闭的时,显示菜单已经关闭。
// 调用方法时,方法名后面的括号只有单边(,不是正常的()
!togglemenu.add('toggle','on/off','!this.toggle(')
define method .toggle(!menu is menu, !action is string)
if !action.eq('SELECT') then
!!alert.message('菜单已经开启')
else
!!alert.message('菜单已经关闭')
endif
endmethod
注意:方法的参数表列为固定写法,其中!action
存储了开关的状态,如果菜单是打开的,则返回SELECT
,关闭的则返回UNSELECT
。
右键菜单
每个窗口的活动工具栏都可以利用先前定义的菜单作为该工具栏的弹出菜单,弹出菜单调用右键即可调出。
setup form !!yyformtest dialog Size 30 5
BUTTON .btnApply 'Apply'
//这里的menu定义和上面的一样
!menu = !this.NewMenu('menu1')
!menu.Add('Callback', 'Check', '!this.check()')
!this.btnApply.SetPopup(!this.popmenu)
exit
SELECTOR
SELECTOR
控件可以实现,design explorer
的数据结构,然后调用members
的方法,实现与members
完全相同的效果。
setup form !!yyformtest dialog
Selector .Members at x 0 y 0 width 35 length 10 database auto
exit
define method .yyformtest()
!this.Members.callback = 'CALLIB UMEMBERS $<$$_MEMBERS$>'
endmethod
PMLFileBrowser
封装的一个.NET Browser
控件,可以实现文件的选择。
import 'pmlfilebrowser'
using namespace 'Aveva.Pdms.Presentation'
!browser = object PMLFILEBROWSER('READ')
!browser.Show('D:' , '', '请选择图片', false, 'png files (*.png)|*.png', 1)
!this.txtPicturePath.Val = !browser.File()
对象声明的时候,如果是保存文件,参数为SAVE
;如果需要打开文件,选择OPEN
。
show
方法的第二个参数,是文件的初始值。