荔园在线

荔园之美,在春之萌芽,在夏之绽放,在秋之收获,在冬之沉淀

[回到开始] [上一篇][下一篇]


发信人: Peter (小飞侠), 信区: Program
标  题: PFC介绍
发信站: BBS 荔园晨风站 (Thu Jan 21 23:12:53 1999), 转信


    PFC是PowerBuilder高级开发工具集中的一个基本类库,它提供了
开发时经常用到的对象和函数代码。PowerBuilder 5.0的基本类库中
的内容十分丰富,比以前版本中所提供的功能要增加了许多,而且对象
之间的继承和引用关系也比以前更为清晰合理。因此编写一个完全建
构在PFC类库之上的应用可大大提高软件质量,而且利用基类的已有代
码也会使得许多复杂的功能实现起来要轻松得多。可是如何编写这样
的应用,怎样合理地继承、利用和改造PFC的基本框架,使用PFC时应注
意哪些事项等,却是十分复杂的问题,在这里无法用几千字就能够讲清
楚。不过我们仍然能够像使用以往版本的类库一样,只是借用PFC中一
些对象的基本功能以省去自己编写代码的麻烦。
    本文将主要介绍如何利用PFC中几个数据窗口功能,为我们的编程
带来便利。
    1.我们在应用中会遇到层次型关系的数据,例如部门和雇员实体
之间的关系。在对一个部门中雇员的数据进行维护时,可以使用Maste
r/Detail的表现形式,在数据窗口dw_表现已有部门的数据,并根据用
户选择的某一条记录,在dw_2中变换所选定部门雇员的信息并对雇员
信息进行维护。
    首先声明一个全局变量:
    n_cst_appmanager gnv_app
    在应用的Open事件中加入:
    gnv_app = CREATE n_cst_appmanager
    gnv_app.Event pfc_Open(commandline)
    在应用的Close事件中键入:
    gnv_app.Event pfc_Close( )
    DESTROY n_cst_appmanager
    在窗口中我们定义dw_1和dw_2为PFC中u_dw的实例对象,在窗口的
Open事件中我们编程如下:
    //设置dw_1和dw_2的级联方式
    dw_1.of_setlinkage(true)
    dw_2.of_setlinkage(true)
    dw_1.of_settransobject(sqlca)
    dw_2.of_settransobject(sqlca)
    //定义dw_1和dw_2的级联关系
    dw_2.inv_linkage.of_linkto(dw_1)
    dw_2.inv_linkage.of_setarguments("dept","dept")
    dw_2.inv_linkage.of_setusecollinks(1)
    //设置连接方式为filter
    //触发dw_2的pfc_retrieve()事件
    dw_2.event pfc_retrieve()
    if dw_1.event pfc_retrieve() = -1 then
      messagebox("错误","提取数据错误--类别")
    else
      dw_1.setfocus()
    end if
    在dw_1和dw_2的pfc_retrieve事件中将祖先的代码覆盖,并分别
写下如下语句:
    return this.retrieve()
    在dw_1的rowfocuschanged事件代码中将对该数据窗口的数据进
行过滤,而执行retriee ()函数将触发这一事件。
    使用PFC中这个对象的优点还可以体现在以下两种情况:当需要更
新级联的所有数据窗口时,只需执行dw_1.inv_linkage.of_update()
一条命令即可完成;如果想要在dw_2中增加一行新数据,可使用dw_2.p
fc_addrow(0)或dw_2.pfc_insertrow()函数,这个函数会将dw_2中det
字段的值自动设置为dw_1中dept的当前值,从而避免了手工使用GetI
tem和SetItem函数来设置的麻烦。
    在上述简单的关系中,并未充分体现出PFC的优越性。但在一个工
厂中对零件的管理或是大型商场中对商品的管理,往往是要通过多次
级联才能定位到某一类产品的子目,在这样的系统中,拥有一个像u_dw
这样的基类,编程的效率就可以提高许多。
    2.在一个数据窗口中如果有的列含有下拉式数据窗口时,在这些
列中使用下拉搜索功能会给用户带来很多方便,也就是说在这些列中
当用户使用键盘敲入数据时,应用程序自动地搜索下拉式数据窗口中
对应的值,使其跳转到相应的记录上。使用PFC,我们只需指定这个数
据窗口继承n_cst_dwsrv_dropdownsearch对象,并在这个数据窗口中
键入下列代码:
    constructor事件:
    dw_1.of_setdropdownsearch(true)
    dw_1.inv_dropdownsearch.of_addcolumn()
    editchanged事件:
    inv_dropdownsearch.event pfc_editchanged (row,dwo,data)
    这个数据窗口中所有的下拉式数据窗口就都具备了下拉搜索功能

    不过我们要对这个PFC对象进行改进,以适应中国国情。原有的搜
索功能是要求用户在该列中输入下拉式数据窗口的显示值(display c
olumn)才能查询,这对于使用拼音文字的用户是十分方便的,应用将随
着用户输入字符的增多,逐步递进地显示相应的记录。可是在中文应
用软件中,该列的显示值一般都为中文,输入并不方便,所以有经验的
操作员往往习惯于使用他们熟悉的编号,即下拉式数据窗口的实际存
储值(data column),因此将应用程序做成对实际值进行查询也许更符
合中国用户的习惯。我们需要对n_cst_dwsrv_dropdownsearch中的f
c_editchanged事件中作如下修改:
    覆盖祖先类的代码,键入新代码。新代码是对它的祖先对象pfc_
n_cst_dwsrv_dropdon search中pfc_editchanged事件的代码作部分
修改,将其中第72行  ls_dddw_displaycol ad wo_obj.dddw.display
column
    改为:
      ls_dddw_displaycol = adwo_obj.dddw.datacolumn
    即可(因代码过长,我们无法在这里全部引述)。
    3.使用PFC中有关数据窗口打印的功能。在u_dw对象中还提供了
一些有关打印的事件和函数,我们首先在数据窗口的构造事件或窗口
的Open事件中,将数据窗口设置成允许打印预览:  我们可以在程序中
调用dw_1.event pfc_print()、dw_1.event pfc_printpreview()、w
_1.event pfc_pagesetup()、dw_1.event pfc_zoom()分别用来实现
打印、打印预览、页面设置、预览窗口的放大缩小等功能。在这些功
能中,PowerBuilder会自动弹出相应的窗口,由用户设置打印的份数、
页面纸张的大小、预览窗口的显示比例等参数。
    此外在窗口对象中PFC提供了response风格窗口的祖先类w_respo
nse,其中加入一些用户可能经常用到的功能。例如只需在继承窗口的
open事件中加入:this.inv_base.of_center ,可实现该窗口打开时在
屏幕的正中位置;又如在open事件中加入: this.of_setbase(tru),
每个继承窗口缺省都具有数据数据窗口存储功能等等
--

--
※ 来源:.BBS 荔园晨风站 bbs.szu.edu.cn.[FROM: 192.168.1.3]


[回到开始] [上一篇][下一篇]

荔园在线首页 友情链接:深圳大学 深大招生 荔园晨风BBS S-Term软件 网络书店