建立一个目标target,名字叫stady步骤如图,一定要选中第二项,即模板项。步骤2,如图步骤3,如图步骤4,如图,名字可以不改,也可以改,随你便。步骤5,如图,这里是关键,一定要选择第三项。!!!!步骤6,如图,一定要将PFC的11个类库加进去,千万不要忘了。步骤7,如图。选项随意。如果选第二项,那么你以后就省事了。步骤8,如图哈哈,成功了,PFC的基本框架就算搭建起来了,这里就是我们的家。步骤9,我们生成一个frame窗口名字叫w_stady,要继承来,这是PFC的“规则”,如图步骤10,如图,打开n_cst_appmanager,pfc_open事件中写脚本:open(w_stady),保存。运行。成功了!,你的呢??好像标题栏缺少点什么?不要着急,按图操作,在constructor事件中写脚本:iapp_object.DisplayName=一拖(洛阳)柴油机有限公司引号里面的内容,各位自便。数据库联接现在做一个datawindow,名字叫d_unit,字段unit_idchar(3)主键,unit_namechar(20)notnull,也就是一个计量单位表。步骤11,继承一个sheet窗口,名字叫w_unit,如图其中的数据窗口控件(u_dw)、按钮(u_cb)都是PFC中的对象。在w_stady窗口的pfc_open事件中写脚本:stringls_sheetw_sheetlw_sheetls_sheet=message.stringparmopensheet(lw_sheet,ls_sheet,this,0,Original!)将PFC的菜单m_frame中的open的clicked事件下面写脚本,一定要取消祖先的脚本,否则要出错。哈哈,我的成功了,你的呢?下面来点PFC里面的真东西。在w_unit窗口中的dw_1控件的constructor事件中写脚本this.settransobject(SQLCA)this.of_setrowselect(true)this.inv_rowselect.of_setstyle(this.inv_rowselect.EXTENDED)这回感觉出来了吧,试试ctrl键shift键。再加两行脚本试试:this.of_setsort(TRUE)this.inv_sort.of_setcolumnheader(TRUE)这回点击标题头,看看有什么反映,哦,会自动排序,还会倒序呢。做一个profile.ini文件,在图中is_appinifile填写profile.ini做个登录窗口,继承w_response。如图定义实例变量:stringis_inifile定义全局变量:/*记录用户登录名和密码*/stringgs_useridstringgs_password切计,窗口中的两个单行编辑器,一定要用PFC的对象(u_sle)设置口令控件的属性为password在退出按钮的clicked事件写脚本:haltclose在登录按钮的clicked事件写脚本:/*检测用户名*/iflen(trim(sle_1.text))=0orIsNULL(sle_1.text)thenmessagebox(信息,请输入用户名)return-1endif/*断开数据库连接*/Disconnect;/*配置连接参数*/stringls_dsnstringls_useridstringls_passwordls_dsn=DSN=+ProfileString(is_inifile,odbc,dsn,None)+;ls_userid=UID=+sle_1.text+;ls_password=PWD=+sle_2.text+;/*进行数据库连接*/SQLCA.DBMS=ODBCSQLCA.AutoCommit=FalseSQLCA.DBParm=ConnectString='+ls_dsn+ls_userid+ls_password+'Connect;IfSQLCA.SQLCode=-1ThenMessageBox(错误,不能连接到数据库!,Exclamation!)Return-1EndIf/*保存登录名*/SetProfileString(is_inifile,userID,user,sle_1.text)gs_userid=sle_1.textgs_password=sle_2.textCloseWithReturn(Parent,1)将n_cst_appmanager的pfc_open事件改为图示再做一个datawindow,要用freeform风格。名字叫d_person_maintain字段:person_idchar(8)主键,person_namechar(20)notnull,birthdaydatetime,ageint提交按钮脚本:parent.eventpfc_save()插入按钮脚本:dw_1.pfc_insertrow()dw_1控件脚本:this.pfc_insertrow()在w_person_maintain窗口的dw_1控件的constructor事件添加脚本:of_SetDropDownCalendar(true)iuo_calendar.of_Register('birthday',iuo_calendar.DDLB_WITHARROW)of_SetDropDownCalculator(true)iuo_calculator.of_Register('age',iuo_calculator.DDLB_WITHARROW)效果不错吧针对w_unit窗口我们再进行改进。在open事件写脚本:/*启用尺寸服务*/of_SetResize(True)/*设置最小尺寸*/inv_resize.of_SetMinSize(1300,400)/*设置对象的尺寸变化方式*/inv_resize.of_Register(dw_1,inv_resize.SCALERIGHTBOTTOM)inv_resize.of_Register(cb_1,inv_resize.FIXEDRIGHT)inv_resize.of_Register(cb_2,inv_resize.FIXEDRIGHT)下面介绍一下状态条。stringls_compute_namestringls_pathlongll_count,ll_retcd=0ls_path=HKEY_LOCAL_MACHINE\system\&CurrentControlSet\Control\ComputerName\ComputerNamell_retcd=RegistryGet(ls_path,ComputerName,ls_compute_name)IFll_retcd=-1thenSetNull(ls_compute_name)endifReturnls_compute_name在w_stady的open事件写脚本:/*状态条*/this.of_setstatusbar(TRUE)/*时间*/this.inv_statusbar.of_settimer(TRUE)/*获取计算机名*/stringls_computerls_computer=f_computername()this.inv_statusbar.of_register(computer,text,计算机名:+ls_computer,500)状态条有东西了吧?打开n_cst_appmanager,在pfc_open事件中写脚本:open(w_logon)/*飞屏*/this.of_splash(3)open(w_stady)注意,括号里面的数字(3)决定了飞屏停留的时间秒数。是不是觉得没有图片很单调,好,如图:在is_logo里面填上图片的名称,不要带路径,如果带,也要是相对路径。支持flash哦必须列服务我们以d_unit为例。将unit_id,unit_name两个字段的edit属性里面的required,emptystringisnull设置为有效。特别注意:emptystringisnull一定要选中将w_unit中dw_1控件的constructor事件改成如图这样如果有没有输入的字段,系统不会立即提示,而是在你提交的时候提示你。如果将this.of_setreqcolumn(true)注释掉,则你在第一个字段为空的时候就会提示你。会不会有这种要求:有些字段要立即提示,而有些字段要在提交的时候提示呢?PFC同样能够满足。只需添加脚本:dw_1.inv_requcolumn.of_registerskipcolumn('unit_id')这样unit_id字段就会保持标准的Powerbuilder的必须列处理。今天讲搜索列。我们先做一个datawindow,名字叫d_item,字段为:item_idchar(8)主键item_namechar(40)unit_idchar(3)unit表的外键以unit表,做一个grig风格的datawindow,名字叫d_unit_list,将d_item的unit_id字段的edit-styletype指定为dropdownDW,edit-datawindow指定为d_unit_listedit-displaycolumn指定为unit_idedit-datacolumn指定为unit_id在窗口中的dw_1的constructor事件添加下列脚本this.of_SetDropDownSearch(TRUE)this.inv_dropdownsearch.of_register()在窗口中的dw_1的editchanged事件添加下列脚本this.inv_dropdownsearch.eventpfc_editchanged(row,dwo,data)在窗口中的dw_1的itemfocuschanged事件添加下列脚本this.inv_dropdownsearch.eventpfc_itemfocuschanged(row,dwo)运行一下,看看结果。当我们在计量单位代码中输入值的时候会按序自动搜索今天我们讲主从表的检索。做表的问题我就不给大家例子了,总之一个主表,我们可以认为是一个订单的头,而从表是一个订单行。实现结果:当我们改变主表的行,从表中的内容则跟着改变如图结果做一个主表d_province_display,有一个主键province_id。做一个从表d_city_display,有一个主键province_id,以province_id为检索参数在窗口的open事件写脚本:dw_1.of_setlinkage(TRUE)dw_2.of_setlinkage(TRUE)dw_1.inv_linkage.of_settransobject(SQLCA)dw_2.inv_linkage.of_settransobject(SQLCA)dw_2.inv_linkage.of_setmaster(dw_1)dw_2.inv_linkage.of_register(province_id,province_id)dw_2.inv_linkage.of_setstyle(dw_2.inv_linkage.retrieve)dw_1.of_retrieve()dw_2.setfocus()其中dw_1是主表,dw_2是从表。括号中的两个province_id,前面的是主表的主键,后面的从表的外键