870 likes | 1.84k Views
PowerBuilder ® 程序设计与系统开发. 陈玉明 2002.9. PowerBuilder 程序设计与系统开发. 第一节、 PowerBuilder 基本原理 第二节、 基本知识( C/S, 数据库) 第三节、 对象及控件的基本属性及方法 第四节、 数据窗控件 (Datawindow) 的特性及方法 第五节、 基本应用 (Application) 的建立 第六节、 PFC(Powerbuilder Founder Class) 技术原理及实现。 第七节、与数据库系统集成进行开发基本技术及方法 第八节、高级编程技术. 内容简介.
E N D
PowerBuilder ® 程序设计与系统开发 陈玉明 2002.9
PowerBuilder程序设计与系统开发 第一节、PowerBuilder基本原理 第二节、基本知识(C/S,数据库) 第三节、对象及控件的基本属性及方法 第四节、数据窗控件(Datawindow)的特性及方法 第五节、基本应用(Application)的建立 第六节、PFC(Powerbuilder Founder Class)技术原理及实现。 第七节、与数据库系统集成进行开发基本技术及方法 第八节、高级编程技术
内容简介 • 关于 PB(About PowerBuilder). • 使用场合(Where)? • 谁需要 (Who)? • 与数据库如何交互(How)? • 学习内容(课程内容)(What)?
关于 PowerBuilder Power Builder 最新版本为8.0。由Sybase公司出品,最早是由PowerSoft公司开发并发布销售的,并出品了到Power Builder 5.0为止的各个版本,初期在广大开发人员中反映并不强烈, 到1995年左右,由Sybase收购PowerSoft公司开始并成功推出了Power Builder 6.0版本,由此开始,由于它的易用性、数据窗专利技术、对各种流行RDBMS的广泛支持、独特的开发方法及理念、独特的对象编程技术等等,成为现在为止可能是世界上用于数据库前端开发的最快捷、最方便、最强大的工具,一般而言,对一个小型的系统,在系统充分分析好的前提下,熟悉的程序员可以在一周以内完成一个独立的系统。 这对于其他数据库系统前端开发工具,如VB,Delphi,VFP,ORACLE Develop 2000等等,如果你用过这些工具,简直无法想象。 虽然现在流行的开发工具并不是PB,因为现在到处都是B2B,B2C,PB在这方面能够实现,但比较其它专门工具而言,并不具有非常大的优势,而且实现的技术比较而言相对复杂。但对于C/S结构的数据库应用及Internet而言,Power Builder仍然是非常好的选择。
PowerBuilder应用场合 1、大型数据库系统C/S模式前端开发工具或B/S模式应用服务器开发工具,一般应用于需要大型或中型数据库系统支持(如ORACLE,Sybase,MS SQL Server,DB2,Informix)作为后台数据支撑平台的管理类系统,一般可以承受千万级纪录量的系统,如: · MRPII系统 –物料资源计划 · ERP系统 –企业资源计划 · CRM – Customer Relation Management(客户关系管理) · Call Center –呼叫中心(Haier) 2、中、小型数据库系统开发,一般数据量为10万左右,支持并发或仅单机用户,如中、小型企业的内部信息管理、各种小型软件、共享软件等; 3、与Sybase的Power Dynamo,Jaguar CTS,Power Site等集成,建立电子商务应用服务支撑平台; 4、与PHP,Java,ASP集成,作为Intranet或Internet的后台数据库系统维护工具,如异种平台(Unix,Linux,Solaris,NT)上的ORACLE,MySQL,DB2等的Client方式维护。
谁需要 PowerBuilder PB可以做的事情很多,因此也就成为现在各软件公司进行系统开发的一种常用工具,如果你将从事下列工作或有这些需求,则最好了解或通晓PB: 1、数据库系统前端开发中的程序设计; 2、开发咨询或技术支撑; 3、数据库系统分析及设计; 4、需要掌握VB,Delphi,Developer 2000以外的其他工具; 5、了解Internet网站建设中可以保护现有PB资源的开发方式; …… 注意: PB与数据库系统是不可分离的,因此,你只有对DBMS有基本的理解才可能用好PB,精通当然最好。 如果你不知道DBMS是什么东西,请先学习相关内容,如南京大学《数据库系统概论》是非常好的入门教材,各流行数据库系统的基本概念都涵盖了。
PB 与数据库交互原理简介 PowerBuilder的吸引人的地方也就是它的数据窗技术,描述为: 1、前端(Client)建立独立的Transaction(缓冲区,事务对象),用于响应用户请求及返回执行结果; 2、任何事务都必须在某Transaction中执行,默认为SQLCA(SQL Connection Area),如 select * from table_xxx using sqlca; Dw_xxx.settransobject(sqlca); 3、数据窗通过Transaction提取数据、编辑数据、再根据需要回写数据,并保证在同一事务内,这样就完成了日常的数据的维护、更新等操作。 4、数据窗现在已经作为标准的ActiveX可编程对象,可以嵌入到其他程序中使用,但总是在PB中最方便,具有专利技术的数据窗集成了数据编辑的几乎所有的常用算法、操作方式等等,非常方便。 5、实际应用中,通过众多的数据窗和其它标准 Windows控件协调运行,就完成了最基本的功能。 实际上远远不止这些……
课程内容 内容: • Power Builder基本原理; • PB基本知识(对象、函数、事件、变量、脚本、继承); • 对象及控件的基本属性及方法; • 数据窗控件(Data window)的特性及方法; • 基本应用(Application)的建立; • 与数据库系统集成进行开发基本技术及方法; • PFC(Power builder Founder Class)技术基本原理; • 编程完成上机作业,期未验收。
PowerBuilder基本原理 • 编程原理 • 开发界面 • 库(Library)管理 • 基本对象及控件 • 运行方式
PowerBuilder运行原理 开发支持库 Pblib.dll Pbcmp.dll Pbudo.dll Pbrtc.dll … 开发(PBLs) BugFixing DBMS 编译(Pcode,Mcode) 运行支持库 PBvm70.dll PBdwe70.dll Libjcc.dll Pbo8470.dll Pbrtc.dll …… YouOcx.OCX YouLIb.DLL …… 应用(Application:DLL,Exe,PBD) 发布(InstallShield)
PowerBuilder基本原理 - 开发界面 菜单 工具条 对象属性面板 预览 脚本 函数及事件 状态条
PowerBuilder基本原理 - 开发界面 说明: 1、PB开发为标准的MDI方式,即对应不同的开发对象,有它不同的菜单及工具条,对应不同的功能; 2、可以创建的对象包括4大类: 对象(窗口、函数、结构、菜单……) 数据窗对象(Grid,Free Form,Tabular,Label,N-Up……) 数据库(Database Profile,Query,Pipeline) 工程(Application,Proxy Library,COM CTS,OLE2,Java Proxy……) 3、常用工具 Library,Editor,Class view Browser,DB Profile Editor, Debugger,DW Syntax等
数据库基本知识 -1 一、C/S模式图示 WinNT,Linux,Unix DB Servers Servers Microsoft SQL Server ORACLE Sybase,DB2,Informix 返回SQL语句 查询结果到客户机 发送SQL语句 到数据库服务器 TCP/IP Clients Clients Clients 1、客户端运行自己的程序,向服务器发送SQL请求及取回结果。 2、服务器侦听网络,响应请求并返回处理结果。
数据库基本知识 -2 二、数据库系统基本组成 物理设备 存储管理 数据库管理 数据库中的对象管理 1.表单 2.视图 3.触发器 4.索引 5.存储过程 4.函数、包 DBMS 网络,协议 介质,接口 DB Tools (管理工具) Applications (应用)
数据库基本知识 -3 三、关系数据库系统基本概念 • 表单(Table):由属性和记录构成的二维关系表; • 视图(View):基于单表或多表的查询; • 存储过程(Store procedure):存储于数据库服务器上的一系列操作的合集,由服务器执行,可以增强可管理性和运行效率; • 触发器(Triggers):当对表的某种操作发生时,就引发其他的一些逻辑处理; • 索引(Index):服务于快速查询,寄生于表的一种服务; • 函数,包(function,package):类似于存储过程; • 数据库(database):上述各对象的集合; • 设备(device,tablespace,datafile):存放数据库的物理定义; • 日志(log):记录对数据库的任何操作,用于备份和恢复; • 用户(User):可以使用数据库中具体内容的人员定义; • 角色(Role):给同一用户赋予不同的角色,享有不同的权限; • 权限(Privilege):赋予用户操作数据的权限;
数据库基本知识 -4 四、ASA中的数据库管理 Sybase 随PB发行的Adaptive Server Anywhere (ASA) 6.0 是短小精悍的个人数据库系统,支持了大多数的关系数据库操作。如日志、事务、用户、触发器,并提供管理中心(Sybase central)来管理数据库的内容, 在PB中,一个小型的数据库应用用ASA作为后台数据库已经完全可以胜任。本课程的后台数据库将主要放在ASA。 Sybase Central实际上是以插件方式运行的,他可以管理Sybase产品中的大多数,如Sybase Enterprise (SYE)数据库, Jugar CTS PowerDynamo, 等等.提供了统一的界面。当然也可以通过SQL语句来管理数据库。包括建表、索引、存储过程、触发器,数据更新,授权等等都可以通过SQL语句来执行。 下面将通过演示来讲解关于Sybase Central的使用,特别是如何建库,建表等操作。
应用 - Applicaiton • 如何建立应用(Application) • 事件及脚本(Events and Scripts) • 连接(Transaction) • 入口(Start Pointer)
应用 - 1.建立 1、Menu->File->New->Application (菜单-文件->新建->开始向导->Application) 2、选择应用名称和存放的库文件 一个应用就建立完毕。实际上这个应用没有任何脚本、窗口,也没有处理任何事情。 应用建立完毕后,PB自动建立了一个PBL文件(PowerBuilder Library),并在这个PBL文件中创建了一个Application entry(应用条目) 一般,一个应用都有一个主窗口,由这个窗口负责和用户的交互过程,而在应用的open事件的脚本中处理的就是如何打开这个窗口,如何和数据库建立连接,如何初始化一些全局变量,关闭应用时(Close事件)做如何处理等等。如: Open事件: ……. connect using sqlca; open(w_main_frame) Close事件: disconnect using sqlca; destroy xxxx 就是在 譬如,建立应用名为pb_lesson,存放库名为lesson.pbl,则在lesson.pbl中就存在了一个pb_lesson的条目,当然,可以在其他pbl中创建一个新的application.
应用 - 2.事件及用途(1) Application的事件 Open 当一个应用执行时,即触发此事件,实际上就是程序的入口,一般处理一些公用变量,公用对象,连接数据库,打开主窗口等操作; Close 当主窗口关闭后触发此事件,如果没有打开任何窗口,则在Open事件后直接触发此事件,一般在这个事件中断开连接,清除变量等操作; Connectiongbegin 当连接开始时触发此事件,由connect 函数直接触发此事件 Connectionend 当连接结束后触发此事件,由disconnect函数触发 Idle idle(xxx second)函数触发,既当系统处于等待状态指定秒数xxx后触发该事件,一般处理如关闭系统,提醒用户等 Systemerror 当程序运行发生任何系统错误时触发该事件,一般处理记录错误,提醒用户等操作。 常用事件:open,close,systemerror
应用 - 2.事件及用途(2) 脚本(scripts)编写基本知识 ·一般依赖于某事件或函数,由事件或函数触发而执行,由换行或;表明一条语句的结束,如 Connect using sqlca; Open(w_main_frame) Disconnect using sqlca; ·任何嵌入式SQL都必须用;来表明该语句的结束,如 Select student_name into :ls_name from table_1 where col_1 = ‘hello’; ·大小写不敏感,如ls_name 和LS_Name表明同一个变量或对象 ·可以在一行写多条语句,用;隔开。如 ls_name=‘xxx’;ls_name2=‘yyy’;li_cnt=2; ·变量或对象的引用前必须声明,如 stirng ls_name=‘abc’ //初始值 ls_name=‘Liujiangang’ Messagebox(‘Hello’,’My Name is ‘+ls_name) 就是弹出一个消息框,并提示标题为Hello,内容为 My Name is Liujiangang 的内容。并显示确认按钮用来接受用户响应。
应用 - 3.连接(1) 一般地,在数据库前端开发中,都连接到某数据库服务器的某数据库,或者连接到本地的某数据库或ODBC源,而连接一般是在应用的Open事件中处理的,在Close事件中关闭此连接,连接实际上是Transaction对象,该对象有下列常用属性: DBMS:指定数据库管理系统的名称,如O84 ORACLE 8.0.4,ODBC ServerName:指定数据库服务器名称,如EPCS_LOCAL,MSS_DB等 Database:指定数据库服务器上的数据库,如MaterialDB UserID:指定数据库用户的ID号,如dbo UserPass LogID:指定用于连接到数据库服务器的用户ID号,如 connector LogPass DBParm:附加的连接参数,如‘ApplicaitonName=“asdfadsf”’等,随DBMS而变化 AutoCommit:是否自动提交,如True,false 以上这些参数对特定的DBMS不是都必需的,一般DBMS,ServerName,都必须指定。 其他属性(该对象创建后才具备): SQLCode:最近SQL语句执行的PB结果码,0,-100,-1三个数值 SQLDBCode:最近事务中SQL语句返回的数据库操作返回码; SQLErrtext:最近操作的错误信息; SQLNRows:最近操作返回的结果数据; 一般,一个应用中已有默认的Transaction存在,即SQLCA,因此,在Application的OPEN事件中就可以指定它的具体属性用来连接数据库,如 // Profile pb_class SQLCA.DBMS = "ODBC" SQLCA.AutoCommit = False SQLCA.DBParm = "ConnectString='DSN=pb_class;UID=;PWD=;“
应用 - 3.连接(2) 就指定了Transaction SQLCA的属性,然后就可以用数据库的四个方法中的 Connect来处理如一个Application的常用的Open事件脚本为: SQLCA.DBMS = "ODBC" SQLCA.AutoCommit = False SQLCA.DBParm = "ConnectString='DSN=pb_class;UID=;PWD=;“ Connect using sqlca; If sqlca.sqlcode = -1 then Messagebox(‘Error’,’cann’t Connect to Server’+sqlca.serverName,stopsign!) halt close // 终止并处理Application的Close事件 End if Open(w_frame)
应用 - 4.入口 一个系统的入口就是Application的Open事件,但是一般在这个事件中打开某窗口,如 Open(w_frame) 主要的事务就由w_frame来处理了。此时Application仍继续运行着并监控着W_frame的状态,一旦W_frame结束,就触发Close事件。
窗口 - Window 窗口概述 1、窗口(Window)是程序和用户进行交互的主要界面,类似于VB或Delphi的Form(窗体),在窗口上可以布置各种不同类型的控件以满足程序的要求,各控件间相互协作,完成预定功能。 2、一个窗口可以只被打开一次或者作为一个实例变量而被创建(实例化)然后打开多次。 3、任何窗口的最底层基类都是windows,可以逐级继承,对于节省代码开支,界面一致性等非常有好处。 4、数据窗作为标准控件可以直接嵌入到窗口中使用。
窗口 - 1.创建 有2种方式创建一个窗口: 1.新建: 从菜单中选择“文件->新建”,弹出新建向导,选择“对象-Windows”,系统就自动创建一个标题为 Untitled 的空窗口,没有任何脚本,但可以被打开。 2.继承: 菜单中选择“继承”,弹出可被继承的祖先清单,选择一个,系统自动从该祖先窗口继承,新窗口拥有祖先窗口的所有特性及脚本,并可以重载及覆盖这些属性或脚本。 创建并修改完成,按Ctrl+S或文件->保存,输入窗口名称并制定放在那个PBL中,该窗口就可以被调用了。 注意点: 基于继承的窗口,一旦祖先的属性修改,则该窗口中没有被重载或覆盖的部分即自动修改,实际上该窗口分为2部分:祖先和自己。
窗口 - 2 窗口的基本属性 窗口的属性非常多(41个),仔细理解属性的具体用途及含义对用好窗口对象非常重要。 常用属性:
窗口 - 3.窗口支持的控件.1 窗口共支持以下33种标准控件
窗口 - 3.窗口支持的控件.2 这些控件各自有自己的属性,事件及函数(Properties,Events,Functions),以后我们将穿插在各章节中提及。 UserObject是一种特殊的对象(控件),它以Custom Class,Stand Class,Custom Visible,External Visual,Stand Visual五种基本类为基类,拥有该基类的基本属性,同时在他们的基础上扩展属性,函数及事件,并直接作为一个可视化控件可以被window或实例化后使用。
窗口 - 4.窗口常用事件 事件是描述一个窗口或窗口中控件的行为的语法,只有在满足特定的条件时才会触发该事件,一般一个事件反映了某种条件下的某一动作。也可以手工方式使系统满足这些条件从而触发这些事件。
窗口 - 5.窗口常用函数 窗口函数一般用来控制窗口的行为,取得窗口信息,控制窗口的行为,触发特定事件等等
窗口 - 6.窗口控件操作(一) 左对齐 右对齐 在界面设计中,往往用到非常多的控件放在同一窗口中,一般会有下列要求: 1:对齐操作 包括左、上、下、右,竖向、横向对齐等操作。 以第一个选择的对象为基准 2:大小操作 包括宽度,高度: 3:相对位置操作 水平间距,竖向间距(三个以上对象选中时才有效) 4:制表站(tab order)定义 当运行时,用户按tab在各个控件上的移动顺序,一般以10进位 如 10,20,30……140…… 5:公用属性及特有属性指定 字体、文本对齐方式、前景色、背景色、边框等: 水平中间对齐 竖向中间对齐 等高 向下对齐 等宽 向上对齐 等高等宽 竖向等间距 横向等间距 文本色(前景色) 边框 背景色
窗口 - 7.窗口控件操作(二) 其他按钮功能: 置于最前端 复制对象或文本 撤销或重做上次的任意操作 置于最后端 保存 粘贴对象或文本 剪切对象或文本 打开当前选中对象的脚本 属性面板切换到当前选中对象 选中行及光标所在行标记为非注释 脚本工具按钮 粘贴各种语法或原型定义 查找和替换 编译当前脚本 全选 选中行及光标所在行标记为注释
窗口 - 8.窗口控件的公用属性 每个控件都有的属性共7个,这实际上是可视控件(Control)的最基本属性 Name: 在窗口中唯一标记该控件的有效字符串 Enabled :使某控件失效或使能,失效后用户无法操作,但是可以手工触发它的事件 Visible:可视与否 Foreground Color:前景色(按钮无效) BackgroundColor:背景色 Tag:与系统无任何关系的一个公用属性,可以做任何事情 Border:边框类型,枚举值,有些控件指定了也无效是无效的。 位置:在父对象中的定位(如x,y,width,height,x1,y1,x2,y2等,但属性名称不一致) 关于颜色的算法: 长整型(long) ,rgb颜色系统 颜色值 = rgb(red,blue,green) = green * 65536 + blue * 256 + red 如 红色( 255) = rgb(255,0,0) = 0 * 65536 + 0 * 256 + 255 可以从下拉工具条中直接选取常用颜色及系统颜色
窗口 - 9.窗口控件简介 –命令按钮 类型:Commandbuttom,PictureCommandButton 最常用 属性: default : True时,当在窗口中的任意控件上按下回车键,就会触发它的clicked事件,同时边框加深; cancel : True时,当在窗口中的任意控件上按下Escape,就会触发它的clicked事件; text :现实的文本,如 “确定(&O)”就是这样的: PictureCommandButton中 PictureName,DisabledPictureName指定有效,失效时的图片,但因为不支持透明,故用的比较少。 Htextalign,VtextAlign:制定水平,垂直方向的文本对齐方式 事件: clicked:最主要事件,在用户按下并抬起鼠标后触发。 其他事件: rbuttondown,dragdrop,dragenter,dragwithin,dragleave,getfocus,lostfocus等等 极少用,一般都在clicked事件中写脚本。 函数: setfocus() :取得焦点,一般在别的控件中调用,如 cb_xxx.post setfocus() classname():取得名称,如 cb_test.classname() 就返回 “cb_test” hide(),show(),resize(),move()等较少用到。 用途:到处都用,但一个界面上按钮不易太多,而且布置要合理,用图片按钮给用户比较直接的感觉,但是颜色就固定了。
窗口 - 10.窗口控件简介 –静态文本 类型:StaticText ,经常用,一般用做显示信息 属性: text:显示的文本 backcolor,textcolor,bordercolor:颜色属性(底色,前景色,边框色) 事件: clicked,doubleclicked,极少对它写脚本 函数:同 commandbutton,很少用
窗口 - 11.窗口控件简介 –可编辑类 主要有:SingleLineEdit,MultiLineEdit,EditMask,RichTextEdit 属性: SingleLineEdit text:可以修改,其他和statictext一致; MultiLineEdit 全部SingleLineEdit属性和事件,可以折行 EditMask 和SingleLineEdit一致,可以制定输入的格式(mask属性),如日期型,则 mask输入 ‘yyyy-mm-dd’ RichTextEdit:类word文档处理控件,一般较少用到 事件: modified:最常用事件,指明做了修改后执行什么操作。 getfocus:取得焦点后执行的操作,一般用来选择文本,如: this.selecttext(1,len(this.text)) 其他事件很少用到 函数: copy(),paste(),selecttext(),cut(),undo()等等,都是用于文本操作的。其他文本编辑控件都有这些函数,如sle_test.copy()表明将sle_test中选中的文本复制到剪贴板。 用途: 除了数据窗以外的所有用户输入的口子都在这儿,因此用途非常广,结合数据窗,就可以完成用户输入部分的操作了。
窗口 - 12.窗口控件简介 –显示及控制类 类型:HScrollBar,Vscrollbar:滚动条 HTrackBar,VTrackBar:导轨 HProgressBar,VProgressBar:进度条 属性:minposition,maxposition,position:指定最小,最大值,当前值 如 hpb_1.position=87 //表明将进度条的位置移动到87处(不一定代表是\ 87%, 因为和maxposition有关) 事件:TrackBar,ScrollBar moved:当移动按钮或导轨时触发 函数:TrackBar,ScrollBar setposition(),setrange(), OffsetPos():设置位置,范围,相对移动 用途: 这几个控件,一般Hprogressbar较常用,经常使用在需要进行常时间运行的程序中,显示当前运行的总体进度,以免用户以为死机而reset.(PB是单线程内核,即使可以通过yield()函数来进行后台处理,但一旦执行某运算,一般是很难终止的,而且此时cpu的占用会非常高,以至用户以为机器死了)
窗口 - 13.窗口控件简介 –下拉列表框 类型:DropDownListBox(ddlb),DropDownPictureListBox(ddplb) 属性:两者基本相似,ddplb多了一个图形显示及图形属性,图形处理函数而已,在实际使用中,基本上没有多少区别。 Item:指定下拉列表中的项目,一般不能太多,否则就毫无意义。 PictureName:按顺序指定图片名称,然后和item中的pictureindex对应 Sorted:是否按item中的文本排序 ShowList : =true,则永远显示下拉列表。一般很少用,本来就是想省地方,现在 再占用一块地方,还不如用PictureListBox来的好。 事件:selectionchanged 当选中的对象改变时触发,一般都在这儿写脚本。可以通过事件的参数index来得到当前选中的是哪一项。 函数: DirList():可以直接将某目录下的文件名全部显示出来,配合Treeview,可以自己做一个目录及文件树 DirSelect():取出由dirlist()生成的列表中当前选中的文件名或目录名; Additem(),Insertitem(),DeleteItem()增加,插入,删除 item SelectItem():手工指定选中的item TotalItems():一共有多少个item Reset():清除所有item FindItem():查找符合条件的item 用途: 用在唯一需要确定某类型的时候,选项不要超过20个,否则很容易找不到,而且,20个图片堆在一起,很难确定那个是你真正需要选择的。
窗口 - 14.窗口控件简介 –列表类 类型:ListBox,PictureListBox 属性、事件、函数: 与下拉列表类基本类似,甚至函数、事件、都差不多,不过列表类支持多选 因此也就多了有关于多选的其他函数,常用的有3个: state(),判断某个item是否为选中, setstate():设置某项的选中状态 TotalSelected():一共选中了多少个 用途: 一般作为需要用户可以有多个选择余地的地方,但是item不能太多,5个里面挑一个好找,50个里面的话,只有眼花 @_@
窗口 - 14.窗口控件简介 –视图类 类型:ListView,TreeView 这是两个仅次于datawindow的复杂程度和好用程度的两个控件,由于有比较丰富的属性和函数可调用,因此可以做出很多效果。 属性:ListView : LargetPicture属性 主要是用来显示为 LargeIcon!类型而设的。 其他属性同PictureListBox 但是可以指定多个列,而不是单个item。 TreeView 一个item可以有3个图片: PictureIndex,selectedPictureIndex,StatePictureIndex 每个Item不是单一的文本,而是特别的TreeViewItem,有自己的子属性 如 data,label,pictureindex,selectedpictureindex,level等等 事件: SelectionChanged:选中项改变 RbuttonDown:鼠标右键,一般用来做弹出菜单:menu_xxx.popup(xpos,ypos) 函数:图片类:addpicture(),deletepicture():主要用于动态形成视图 ListView:add,insert,delete等等,如 TreeView: AddStatePicture(),DeleteStatePicture():处理状态图片 AddItem(),DeleteImte(),SetItem:增加,删除,修改某节点(Item) InsertItem():指定位置插入某Item InsertItemLast():在某节点下级最后增加下层Item InsertItemFirst():在某节点下级最前插入下层Item InsertItemSort():在某节点下级中按排序插入下层 Item FindItem():相对查找,如同层、上层、下层 Expanditem(),CollapseItem():展开、折叠指定节点 SelectItem(),SetFirstVisible()选中某节点,使某节点第一个可见 应用:非常广泛
窗口 - 15.窗口控件简介 –其他 其它控件:图形控件,图表控件: Line,Oval,Rectangle,RoundRectangle,他们总是处于最底层而不可能覆盖在其他控件的上方,没有事件,一般仅做装饰用。运行时修改它们的属性就可以实现各种效果。 图表控件:Graph 用来表示系列数据。一个图表控件可以有一个或多个数据系列。 函数: AddCategory,将一个Category添加到控件中。 AddSeries,在一个已经存在的Category中添加一个数据系列并返回一个值。 AddData和InsertData,利用AddSeries的返回值在一个已经存在的数据系列中添加一个数据项。另外用户还可以直接在数据窗口中利用Graph风格来显示图形化的数据。
菜单 - Menu 菜单:Menu 应用程序中一般都有菜单,原因很简单。因为如果每项命令都有按钮完成,就会因为按钮过多而使得用户在使用起来找不到头绪。而下拉式菜单不但具有占用空间小的优点,而且层次分明,每项功能都有相应的文字提示。所以对于一个复杂的应用程序来说,菜单绝对是必不可少的。Pow-erBuilder提供了一个菜单画板。用户可在菜单画板中定义自己需要的菜单项和每个菜单项相应的脚本 创建:文件-新建-对象-菜单即可进入菜单画板,或文件-继承,选择祖先菜单,然后也进入菜单画板。 属性:每个菜单有若干级联的菜单项构成,每项成为一个 menu item,每个item都具有菜单的所有属性,包括: 普通属性: name:名称,如果从祖先继承,则不能修改 text:菜单文字,如“文件(&F)” Microhelp:显示在MDI Help 框架窗口的状态栏中的文字 Visible,Enable:可见,使能 shortcut:快捷键,如 CTRL + S,有下级菜单的菜单没有快捷键 工具条属性: ToolbarItemText:工具条上的文字; ToolbarItemName:工具条图片; ToolbarItemDownName:工具条下压图片; ToolbarItemSpace:工具条前面的空格; ToolbarItemOrder:工具条顺序; ToolbarItemIndex:工具条所在的Dock顺序
菜单 - 如何使用 菜单的事件: selected:选中后,即鼠标通过该菜单项; clicked:单击后,一般在这儿写脚本; 脚本编写: 一般在脚本中打开某窗口,如: openSheet(w_mdi_sheet,parentwindow,0,original!)就是在框架窗口parentwindow(菜单的属性,表明该菜单依附的主窗口,一般为MDI Frame)中打开w_mdi_sheet,并将打开的窗口的标题自动显示在定义为windows类型的菜单下,并保持原始w_mdi_sheet的位置。详细参数请查看opensheet函数。 一般菜单用在2个地方: MDI Frame :框架窗口中,作为主程序的主要界面的一种执行方式, 一般一个MDI Frame都必须指定一个菜单; Popup:弹出式菜单,用在特定的窗口或对象中,由menu_xxx.popup(x,y)来调用 如何引用菜单: 2种方式,显示和隐式引用: 如有框架中定义菜单:m_frame,其中有 m_file (文件&F) m_file_open (打开&O) m_file_empbar(-) m_file_exit(关闭(&x)) 则在主窗口中对该菜单中m_file_exit菜单项的引用可以是: m_frame.m_file.m_file_exit或 m_frame.item[1].item[3]
框架 - 框架应用程序 在如今的Window应用软件中,多文档(MDI)应用程序占了很大的比重。这是因为相对于单文档界面,多文档界面可以同时打开多个窗口,无需关闭窗口就可以打开另外一个,可以自由的在各文档之间切换。因此,为了使我们的软件更具实用性,能够更好的方便用户,创建一个MDI的应用程序就显得尤为必要。 MDI应用程序由两部分组成,即MDI框架和框架内的工作表(Sheet)。MDI框架就是执行程序时首先打开的主窗口。在框架中打开的其它窗口被称为工作表。 在同一屏幕中,主窗口即MDI框架只能有一个,而工作表可以有很多个,且只能在框架范围内活动。也就是说,当工作表被最小化时,它不会缩小在Win95的工具栏上,而会出现在框架底部的一个横栏上。当工作表被最大化时,它也只能被放大到充满整个框架,而不是整个屏幕。创建框架的方法很简单,只需首先在窗口属性中指定一个菜单,然后将窗口的类型改为MDI Frame或MDI FrameWith Micorhelp即可。 MDI框架中的工作表实际上就是一个普通的窗口,但是不能是MDI Frame、MDI FrameWith Micro-Help或Response等类型的窗口。要想在一个MDI框架中建立一个工作表,只需调用函数OpenSheet即可。工作表在MDI框架中有三种排列方式,即Cascaded!、Layered!和Original!三种方式。用户可以在建立工作表时为工作表指定一种排列方式,也可以通过函数ArrangeSheets来重新排列工作 关于工作表的函数还有 GetActiveSheet,被用来返回当前MDI框架中被激活的工作表,它的返回值是一个窗口类型。当没有工作表被激活时,返回值为Null,用户可以通过IsVa-lid函数来判断其返回值是否有效。 GetFirstSheet,用来返回MDI框架中顶层的工作表; GetNextSheet用来返回指定工作表的下一个表。 ParentWindow ( )函数,返回当前工作表的父窗口,也就是其所在的MDI框架。 OpenSheetWithParm带参数的打开工作表。 在MDI框架中的工作表如果带有菜单,那么当该工作表被打开后它的菜单将覆盖原来框架的菜单。当多个工作表具有不同的菜单时,在菜单栏上显示的将是当前被激活工作表的菜单。只有当关闭了所有的工作表,或者工作表根本没有菜单的时候,在菜单栏上显示的才是MDI框架的菜单。对于菜单项的每一项,无论它是MDI框架还是工作表的菜单,都可以为该选项设置状态栏上的提示信息,只需在菜单项的属性Micro-Help中设置即可。 一般,工作表的菜单都是从框架菜单继承或相同的,以免打开一个工作表后无法打开其他工作表。
窗口 –小结 1 窗口是程序的核心界面,应用通过各个窗口,利用窗口中的各种控件和用户交互,完成数据的处理工作; 2 一般应用都以MDI Frame作为框架程序, 3 Sheet菜单从Frame菜单继承或没有菜单,保证框架界面的统一和完整; 4 界面设计应遵循一定的原则,不是想怎么做就怎么做,必须考虑协同开发问题,用以保证整体性和一致性。 5 脚本的编写、函数、事件的命名都必须考虑规范性的问题,从一开始养成良好的命名规范及编写习惯,对己对人都极有好处。
Datawindow - Intro Datawindow
Datawindow - 1.基础.1 数据窗口是用于查询、显示和维护来自关系数据库或其他数据源(如Excel文件或其他文件)数据的对象。在数据窗口中可以定义数据的显示格式、显示风格和其他数据属性,使数据对用户更加直观和更有意义。 数据窗口最初使用在PB的C/S结构中,为这种模式提供了强有力的数据查询和数据维护功能。随着PB及其相关技术和产品的发展,PB已经不是单一的C/S应用开发工具,已经可以适应Web开发等各种需要,主要应用包括
Datawindow - 1.基础.2 • PowerBuilder数据窗口,作为在应用程序中的一个控件; • HTML数据窗口,用于web应用的瘦客户端数据窗口,提供了大部分的PB数据窗的数据维护和编程等功能; • 数据窗口的ActiveX Web控件,在Powersite内部建立Web页面时使用的ActiveX控件; • Java版本的数据窗口:在PowerJ中建立Java应用使用的JavaBeans组件; • Design-time控件,Powersite使用; • 数据窗口插件:在浏览器中显示PowerSoft PSR报表。
Datawindow - 2.显示风格和数据源 显示风格(Style) 用于定义数据窗口的显示风格和外部特征。 Tabular(列表):记录横置于页面,标题在所有列的顶端,可以多行数据; Freeform(自由格式):每列左侧有一个标签,一屏只显示一条记录; Grid(网格):如Excel的sheet格式; Label(标签):每页有几个标签,每个标签一行; N-UP(分栏):并列显示; Group(分组):在表头下按列分组的格式; Composite(组合):嵌套格式 Graph(图表):数据的图形显示; Crosstab(交叉):行列格式的数据表示,列可动态计算; RichText:多信息文本,文本段落中可以嵌入列; Ole:连接或嵌入到数据窗口的OLE对象于获取的数据关联。 数据源(Data Source) 定义数据窗口中数据的来源: Quick Select:来源于sql数据库的多表; SQL Select:定义完整的sql语法; Query:通过查询面板定义的查询对象作为数据源; Stored procedure:以存储过程作为数据源; External:通过文件输入或程序代码生成的数据。
Datawindow - 3.如何使用数据窗.1 使用数据窗主要包括以下两个步骤: 一、在datawindow painter或datawindow Builder中创建或编辑一个数据窗口对象; 二、在开发环境中,将一个数据窗口控件或组件放在窗口或web页面中,并把数据窗口控件和数据窗口对象关联起来(指定数据窗的dataobject属性) 通过数据窗口控件,应用程序与在数据窗口画板中定义的数据窗口对象进行通讯,通过编写程序控制数据窗口控件和控件所包含的数据窗口对象。程序代码可以修改、查询数据,改变数据的表现形式、处理错误、共享数据窗口控件之间的数据等等。