⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 pfc详细教程.txt

📁 PB常用技巧 PB常用技巧 PB常用技巧
💻 TXT
📖 第 1 页 / 共 5 页
字号:
关于PFC 

这一章介绍的是PFC的基础,PB的首要概念,面向对象的内容,并附有一个PFC的 
组成图。 

理解PFC: 
PFC是一组PowerBulider的对象,它可以由用户自己定制,扩充。你可以象搭积木 
一样使用它,使程序紧密的连接起来。PFC还包括许多有用的对象,例如:debug对 
象。 
PFC是由PowerBuilder提供的PB对象,并支持PowerScript 源代码。它使用的是先 
进的PowerBuilder面向对象技术,其一个特征是面向服务设计。确使你的程序占 
用最少的计算机资源。 
PFC使用了许多先进的编码技巧,你可以使用PowerBuilder的PowerScript编译器 
来检查对象,实例,事件,和继承PFC父类的函数。 
这本书说的是PFC的概念(PFC是什么东西和你为什么使用它)还有使用信息(如何计 
划.使用PFC) 
为了更详细的了解PFC的对象,实例,事件,和继承PFC父类的函数,请看PFC Object 
Reference 。 

理解PowerBuilder: 
使用PFC可以创建先进的面向对象式的PowerBuild类库。要想掌握PFC和它的面向 
对象特征,首先需要了解PowerBuilder和它的面向对象特征。这一节将告诉你应 
该熟悉PowerBuilder的基本概念。 
PFC原是为建类库准备的,但并不是不让你用它创建应用程序。通过看PowerBuild 
er User's Guide可以完全了解的PowerBuilder的概念。 

PowerBuilder类库和对象: 
PFC是作为PowerBuilder Libraries(PBLS)发行的。PBLs包括你用于写程序的父类 
和派生类对象。在使用任何PFC对象之前,你一定要在你的应用程序库的搜索路径 
中把PFC类库加进去。PowerBuilder在执行程序时通过搜索路径找到程序所引用的 
对象。 

PB标准对象 用途 
Windows PowerBuilder应用程序和它的用户之间的联系界面。 
Menus 用户在当前活动窗口用来搜索命令的表。 
DataWindow objects 用于接收,实时处理数据。 
User objects 由用户自己定义的对象(一次定义可以重复使用)。 
User objects 有两种类型: 
(一):Visual user objects (可视化用户对象) 
一个可视化用户对象是一个可以重复使用的可视化控制,或者是一批预先确定的可 
视化控制.PFC包括两种可视化用户对象类型. 
1.标准的可视化用户对象类: 
PFC提供了一套丰富的标准的可视化用户对象.每个PFC的标准的可视化用户对象都 
相当于一个PowerBuilder的窗口控件.这些对象包括以PFC服务预想确定完全的综 
合操作。 特别值得一提的是u_dw DataWindow 用户对象,这是以PFC服务来提供 
广泛的综合功能。 
2.用户自定义的可视化用户对象 
PFC也提供了用户自定义的可视化用户对象,这些对象包括一组窗口控件,并提供 
先进的函数用在某些特别情况。 (PFC没有使用外部用户对象和VBX用户对象,要 
想进 一步了解可视化用户对象,请看"PowerBuilder User's Guide") 
(二):Class user objects(非可视用户对象类) 
一个非可视用户对象是一个用来实现非可视的处理时使用的控件。PFC包括两种非 
可视用户对象类型。 
1.标准的非可视用户对象: 
标准的非可视用户对象是继承 PowerBuilder内嵌的系统对象而来。PFC提供了许 
多标准的非可视用户对象,例如:处理事务,错误对象,和其他所有的扩展系统对 
象。 
2.用户自定义的非可视用户对象: 
用户自定义的非可视用户对象是继承 PowerBuilder非可视对象类而来,它把数据 
和代码进行封装。这种类型的用户对象允许你从SCRATCH定义一个对象。 
PFC用Class user objects来执行它的许多服务以及提供这些服务对象的函数。它 
也提供?reference variables(引用变量),何谓 rdference variables呢?即是 
一个对象指针。你可以用它来存取一个对象的实例变量,函数,事件。 

Functions(函数): 
PowerBuilder支持全局函数和对象函数。PFC通过user_object function执行它的 
处理。一个函数就是执行一些处理的PowerScript语句的集合,你可以传递数据或 
者是什么也不传,它来返回一个值。 
详细信息册参考PFC Object Reference。 

Events and user events(事件和用户事件): 
PowerBuilder的Windows,user objects,contols,都有一些预先设定的事件。PFC 
通过定义用户事件为许多PFC 对象增加事件。事件可以接受数据和返回值。共有 
三种PFC 事件: 

事件类型 触发时间 
PowerBuilder预先设定的事件 某个动作导致操作系统调用事件 
预先编好代码的用户事件 某个动作(例如选择一个菜单)导致PFC触发用户事件 

空的用户事件(可以加入代码) 某个动作(例如选择一个菜单)导致PFC触发用 
户事件 
除非另有说明,本书的event都指的是这三种。 

Function and events compared (函数和事件比较) 

函数和事件在许多方面都是相似的: 
(1)他们都可以接收数据,返回值; 
(2)他们都由PowerBuilder语句构成; 
(3)他们都可以被调用,触发,传递。 
但他们还是有些不同的: 
使用特征 函数 事件 
调用一个不存在的 将会出现运行时错误 TriggerEvent返回-1 
覆盖父类脚本 直接覆盖父类脚本 可以扩展或者覆盖 
访问 可以是Public、Private、Protected 永远是Public 
重载 可以重载 不可以重载 

面向对象式的设计 
面向对象的编程工具支持三个基本规则:inheritance(继承),encapsulation 
(封装),polymorphism(多态)。 

如何使用PFC扩展层: 
在PFC中没有类库完全适合你的需要,你可以代表性的修改PFC来满足你的程序的 
需要。假如没有PFC扩展层,就会出现一个问题:当PFC版本升级时,新版本的PF 
C恢复该这些修改,而你不得不用手工改变。 

一个特别的扩展层: 
PFC产生一个扩展层是通过继承所有的层实现的。所有的扩展对象都在单独的PBL 
S,这在PFC升级时不会影响。 

内容 祖先层 
Application and global services PFCAPPSRV.PBL 
DataWindow services PFCDWSRVPBL 
Visual and standard class user objects PFCMAIN.PBL 
Utility services PFCUTIL.PBL 
Window services PFCWNSRV.PBL 

祖先层的类库中的对象包括所有的实例变量,事件,函数;扩展层的类库中的对 
象是相应祖先层类库中的对象的不可修改的子类。即使是继承,也可以访问祖先 
的实际变量,事件和函数。 
通过PowerBuilder Bowser来察看子类的对象的实际变量,事件和函数。 

使用扩展层有二个优点: 
1. 你可以增加一些点,部门,还有程序逻辑。 
2. 不会影响版本升级。 

旧版本对象: 
PFCOLD。PBL Library包含旧的对象。如果你有一个存在的PFC程序,你有可能需 
要把他加在你的library list. 

注意: 
你要通过修改扩展层的对象来定制PFC程序。千万不要轻易修改祖先对象。你的程 
序中的对象要使用扩展层的对象并且继承扩展层的窗口。 

迅速开始: 
在用PFC编程时,程序经常需要修改,存取,以及从扩展层中继承对象。PFC装置 
中有一套扩展库(PFC Quickstart Libraries)。它包括扩展层的基本功能,使 
你的程序快速发展。 

PFC命名规则: 
PFC遵循以下命名规则: 
Level Name 
PFC层对象 用前缀pfc_ 
扩展层对象 和它的祖先有同样的名字但没有前缀pfc_ 

例如:DataWindow selection service object的祖先是pfc_n_cst_dwsrv,扩展层 
的子类是 
n_cst_dwsrv.Pfc_n_cst_dwsrv 包括所有服务的代码。n_cst_dwsrv 是不可修改 
的子类(你可以在假如程序指定的实例变量和代码。)。 

PFC定义的用户事件: 
PFC定义用户实践也用前缀pfc_prefix.这使得你的应用程序的用户事件和PFC 的 
用户事件更加容易。 

PFC文档使用扩展层名字 
当指定一个服务对象时,PFC文档总是用扩张层命名。例如:当论述基类窗口时这 
书指向w_master不是pfc_w_master.但要记住,w_master的实际变量,事件和可用 
函数实际上是在pfc_w_master定义的。 
PFC命名习惯详细资料请看PFC Object Reference 

我们不难想到: 
PFC的对象继承允许你在每一层假如扩展逻辑。例如:pfc_w_sheet是从w_master 
继承的,w_master的实际变量,函数,你加在它的事件在它的子类窗口中都已存 
在。 

如何加扩展层 
扩展层通过PFC升级类有效的实现应用程序内部的重用和单个程序的重用。但是, 
在大部门或者是多部门合作时,一定要考虑好扩展的标准,方法,注意部门的规 
则和商业规律。 
如果你是在一个组织里使用PFC,你要考虑创建一个新层(包括这个组织的所有的 
变量函数,事件)。应用程序还是使用PFC扩展库的对象,可是调用实例变量,事 
件,函数的祖先变了。 

PFC构成: 
PFC是由以下构成的: 
l 一套PBLS 
l 一个数据库 
l Quickstart PBLS 
l 实例代码 
l 一个简单的应用程序 
Localized PFC(局部化的PFC) 
局部化的PFC 将会在PFC新版本公布后升级。 

The PFC PBLs 
PFC是分布在PBLS包含的祖先对象和PBLS扩展层包含的对象。每个祖先对象扩张层 
包含提供以下服务的对象 
Libraries Contents 
PFCAPSRV.PBLPFEAPSRV.PBL 应用程序管理器,应用程序服务对象和全局服务对象 
PFCMAIN.PBLPFEMAIN.PBL 标准可视化用户对象,自定义可视化用户对象,标准用 
户对象类。 
PFCUTIL.PBLPFEUTIL.PBL 有用的对象和服务。 
PFCWNSRV.PBLPFEWNSRV.PBL 窗口服务,包括用户对象和有用的窗口。 
PFCOLC.PBL 旧的用户对象。(基层和扩展层的对象) 

使用library画笔: 
使用library画笔来看到PFC中所有对象 

PFC 数据库 
PFC装载了pfc.db本地数据库。这个数据库包括以下几个表: 
Table Usage 
Messages 错误信息服务。 
Security_apps 安全服务。 
Security_groupings 安全服务。 
Security_info 安全服务。 
Security_template 安全服务。 
Security_users 安全服务。 
PFC本地数据库是由开发者预先设定的,如果你要使用错误信息服务和安全服务一 
定要在你的数据库中复制指定的表。连接”Deploying database tables” 

The PFC Quickstart PBLs 
使用PFC Quickstart libraries用来是程序配置和运行迅速。他们包括经过挑选 
的PFC扩展层对象的保护子集。 
做一个PFC Quickstart libraries备份,你就有了后援了。 

The PFC code example 
使用它是为了了解PFC的对象和服务。学习如何编码并且实现PFC的基本功能。Th 
e PFC Quickstart有广泛的参照和使用资料。 

The PFC sample application 
使用PEAT可以看到PFC的例子是如何进行工程预算和跟踪系统的。


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_SetDat 
a函数。这样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_appmana 
ger、调用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 Wi 
ndow)或者调用显示快闪窗口的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 

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -