PFC编程基础


概要:

这一章阐述了 PFC 编程的基本技巧,同时也告诉了你如何开始运用 PFC 编写应用程序。

设置应用程序管理器

首先建立一个PFC应用程序的第一步就是配置应用程序以及建立应用程序管理器- -n_cst_appmanager。应用程序管理器将替代原来的应用程序对象。原来在应用程序对象中编写的脚本将全部改写在应用程序管理器中。应用程序管理器中同时还通过实例变量、函数来维护应用程序的属性。其中有框架窗口、应用程序与用户的INI文件或注册键以及帮助文件等。

注意:

使用分开的物理文件

每个独立的应用程序都必须拥有自己独立的一套文件。你不可以共享父类文件,也就是那些以PFC开头的文件。这是由PFC的内部继承关系而决定的。

例如,假设应用程序1与应用程序2都拥有它们自己的一套扩展的PFC库文件,但是它们共享父类文件(PFC库文件)。这时应用程序1在自己的PFE(PFC扩展库)的w_master中增加了一个函数名为of_SetData。这样这个函数将在w_master的所有子类中都有效,这些子类是pfc_w_main,pfc_w_frame,pfc_w_sheet 等。而这些对象恰恰在这两个应用程序共享的父类文件(PFC库文件)中。这样当应用程序2重新生成应用程序时(regenerate)由于应用程序2的PFE文件中没有of_SetData函数。这样w_master的所有子类中的关于of_SetData函数的指针都将被删除。这样当应用程序1运行时将会导致运行时错误与编译错误。

具体步骤

1. 打开应用程序画笔。

2. 定义库文件列表。

PFCAPSRV.PBL
PFCDWSRV.PBL
PFCMAIN.PBL
PFCUTIL.PBL
PFCWNSRV.PBL
PFEAPSRV.PBL
PFEDWSRV.PBL
PFEMAIN.PBL
PFEUTIL.PBL
PFEWNSRC.PBL
PFCOLD.PBL(如果你的应用程序是使用老版本的PFC库那么请增加该文件到库列表 中)

3. 在应用程序画笔中打开脚本画笔,定义n_cst_appmanager类型的全局变量gnv _app。

n_cst_appmanger gnv_app 这个变量名必须是gnv_app,因为PFC的对象、函数、事件都需要这个n_cst_appm anager或它的子类的全局变量—gnv_app。

4. 增加如下代码到应用程序对象的OPEN事件中。它的用途是创建n_cst_appmanager、调用pfc_Open事件。

gnv_app = Create n_cst_appmanager
gnv_app.Event pfc_Open(commandline)

5. 增加如下代码到应用程序对象的CLOSE事件中。

gnv_app.Event pfc_Close()
Destroy gnv_app

6. 增加如下代码到应用程序对象的SystemError事件中。调用pfc_SystemError事 件。
gnv_app.Event pfc_SystemError()

7. 关闭应用程序画笔,保存所作的修改。

8. 打开用户自定义对象画笔。在PFEAPSRV.PBL中找到n_cst_appmanager并打开,或者是它的子类。

9. 在n_cst_appmanager的构造事件(Constructor Event)中调用它的函数来初始化关于软件版本号、公司、和INI文件的实例变量。

10. 在 n_cst_appmanager的pfc_Open事件中打开你所想要的应用程序Service 。

你所想打开的Service 调用函数Application preference of_SetAppPreference DataWindow caching of_SetDWCache Error of_SetError Most recently used object of_SetMRU Transaction registration of_SetSecurity Debug of_SetDebug

11. 在pfc_Open事件中增加打开你的初始窗口的代码,例如框架窗口(Frame Window)或者调用显示快闪窗口的of_Splash()函数。

12. (可选)增加代码到pfc_PreAbout,pfc_PreLogonDlg,pfc_PreSplash事件中,用于定制关于对话框(About box)、登录对话框(Logon box)、快闪窗口(splash screen)。

13. (可选)增加代码到pfc_idle,pfc_ConnectionBegin,pfc_ConnectionEnd事件中。

l_ 在应用程序对象的idle事件中调用pfc_idle事件。
l_ 在应用程序对象的ConnectionBegin事件中调用pfc_ConnectionBegin事件。
l_ 在应用程序对象的 ConnectionEnd事件中调用pfc_ConnectionEnd事件。

14. 保存n_cst_appmanager

如何显示快闪窗口

非常简单,只需在pfc_Open事件中,在打开第一个窗口的代码之前写上如下代码 :

this.of_Splash(1)
Open(w_tut_frame)(根据不同的应用程序有不同的变化!)

如何显示登录窗口

1. 在框架窗口的Open事件中调用of_LogonDlg函数:

Integer li_return
li_return = gnv_app.of_LogonDlg( )
IF li_return = 1 THEN
this.SetMicroHelp("Logon successful")
ELSE
MessageBox("Logon", "Logon failed")
Close(this)
End If

Of_LogonDlg函数将显示w_logon对话框,同时还会提示输入用户名、密码,当用 户点击OK按钮时还会触发n_cst_appmanager的pfc_Logon事件。

同样,你也可以在n_cst_appmanager的pfc_Open事件中的打开框架窗口之后立即 调用Of_LogonDlg函数。但是绝对不要在Of_Splash之后立即调用Of_LogonDlg 。

2. 在n_cst_appmanager的pfc_logon事件中编写登录到数据库的代码。这个例子 假设有一个INI文件,它包含了所有的需要登录到数据库的信息,除了用户名、密码以外。同时还假设你已将SQLCA的默认类型改为n_tr(PFC制定的书屋对象类型 )。

Integer li_returnString ls_inifile, ls_userid, ls_password
ls_inifile = gnv_app.of_GetAppIniFile()
IF SQLCA.of_Init(ls_inifile,"Database") = -1 THEN
Return -1
END IF
// as_userid and as_password are arguments
// to the pfc_Logon event
SQLCA.of_SetUser(as_userid, as_password)
IF SQLCA.of_Connect() = -1 THEN
Return -1
ELSE
gnv_app.of_SetUserID(as_userid)
Return 1
End If

Published At
Categories with 数据库类
Tagged with
comments powered by Disqus