PB 11第11章 自定义函数和结构
第11章 结构体与共用休
定义结构体类型的同时定义结构体变量
一般形式:
struct 结构体名 { 类型标识符 成员名; 类型标识符 成员名; ……………. }变量名表列;
例 struct student { int num; char name[20]; char sex; int age; float score; char addr[30]; }stu1,stu2;
num
25B
name sex age num
name sex age
stu[0]
stu[1]
结构体数组初始化
分行初始化: 结构体数组引用 顺序初始化: struct student struct student 引用方式: 结构体数组名[下标].成员名 { int num; 例 { int student struct num; 例 struct num; char { char name[20]; int name[20]; stu[1].age++; struct student { char num; int sex; char sex; name[20]; int age; num; {char name[20]; int int age; char sex; }; char sex; }; int char name[20]; age; struct student stu[ ]={{100,“WangLin”,„M‟,20, int char sex; age; struct student stu[ ]={100,“Wang Lin”,„M‟,20}, }stu[ ]={{……},{……},{……}}; {101,“LiGang”,„M‟,19, int age; }stu[ ]={{……},{……},{……}}; 101,“Li Gang”,„M‟,19}, strcpy(stu[0].name,”ZhaoDa”); {110,“LiuYan”,„F‟,19}; }str[3]; 110,“Liu Yan”,„域
PB11简介PPT课件
2021/7/22
23
谢谢大家!
个人观点供参考,欢迎讨论
2021/7/22
17
2.9 应用程序开发及发布
创建一个应用调试 利用开发工具编译成Dll或PBD 发布EXE、Dll(PBD) + Pb的支持动态库,类
似于Java的虚拟机
2021/7/22
18
3.1 Dw数窗的详细介绍
不同风格数窗使用介绍(12种风格) 如何设计数窗 数窗检索数据,正常检索、带参数检索 数窗更新数据 数窗的数据源介绍(无数据源、SQL语句组
PowerBuilder是著名的数据库应用开发工具生产 厂商PowerSoft公司推出的产品(PowerSoft现已 被数据库厂商Sybase所收购),它完全按照客 户机/服务器体系结构研制设计,在客户机/服 务器结构中,它使用在客户机中,作为数据库 应用程序的开发工具而存在。由于PowerBuilder 采用了面向对象和可视化技术,提供可视化的 应用开发环境,使得我们利用PowerBuilder,可 以方便快捷地开发出利用后台服务器中的数据 和数据库管理系统的数据库应用程序。
*.Pbl,*.PBD,*.Pbw,*.pbt,*.pbr,*.dll的介绍。
2021/7/22
15
2.7 PB开发工具与Sql语句
嵌入式SQL语句 4种动态游标 代码中直接写Sql语句 数窗与视图 数窗与存储过程
2021/7/22
16
2.8 应用程序开发及发布
创建一个应用调试 利用开发工具编译成Dll或PBD 发布EXE、Dll(PBD) + Pb的支持动态库
2021/7/22
pb的主要控件函数及其作用
函数返回值AcceptText Integer CanUndo Boolean CategoryCount Integer CategoryName StringClear IntegerClearValues Integer Clipboard Integer Copy IntegerCopyRTF String Create Integer CrosstabDialog Integer Cut Integer DataCount Long DBCancel Integer DBErrorCode Long DBErrorMessage String DeletedCount Long DeleteRow Integer Describe String Drag Integer Filter Integer FilteredCount IntegerFind Long FindCategory Integer FindGroupChange Long FindNext Integer FindRequired Integer FindSeries Integer GenerateHTMLForm Integer GetBandAtPointer StringGetBanderStyle Border GetChild Integer GetClickedColum Integer GetClickedRow Long GetColum Integer GetColumnName StringGetContextService Integer GetData Double GetDataPieExplode IntegerGetDataStyle IntegerGetDataValue Integer GetFormat String GetItemDate Date GetItemDateTime DateTime GetItemDecimal DecimalGetItemNumber Double GetItemStatus dwItemStatus GetItemString String GetItemTime Time GetMessageText String GetNextModified Long GetObjectAtPointer String GetParent PowerObject GetRow Long GetSelectedRow Integer GetSeriesStyle Integer GetSQLPreview String GetSQLSelect String GetText String GetTrans Integer GetUpdateStatus Integer GetValidate String GetValue String GroupCalc IntegerHide Integer ImportClipboard Long ImportFile Long ImportString Long InsertDocument IntegerInsertRow Long IsSelected Boolean LineCount Integer ModifiedCount LongModify StringMove Integer ObjectAtPointer grObjectTypeOLEActivate Integer Paste Integer PasteRTE Long PointerX Integer PointerY IntegerPosition IntegerPostEvent Boolean Print Integer PrintCancel Integer ReplaceText Integer ReselectRow Integer Reset Integer ResetDataColors Integer ResetTransObject Integer ResetUpdate Integer Resize Integer Retrieve LongRowCount Long RowsCopy Integer RowsDiscard Integer RowsMove Integer SaveAs Integer Scroll Integer ScrollNextPage Long ScrollNextRow Long ScrollPriorPage Long ScrollPriorRow Long ScrollToRow Integer SelectedLength Integer SelectedLine Integer SelectedStart Integer SelectedText String SelectRow IntegerSelectText Integer SelectTextAll Integer SelectTextLine Integer SelectTextWord IntegerSeriesCount Integer SeriesName String SetActionCode Integer SetBorderStyle Integer SetColumn Integer SetDataPieExplode IntegerSetDataStyle IntegerSetDetailHeight Integer SetFilter Integer SetFocus Integer SetFormat Integer SetItem Integer SetItemStatus Integer SetPosition IntegerSetRedraw Integer SetRow Integer SetRowFocusIndicatorInteger SetSeriesStyle IntegerSetSort Integer SetSQLPreview Integer SetSQLSelect Integer SetTabOrder Integer SetText Integer SetTrans Integer SetTransObject Integer SetValidate Integer SetValue Integer ShareData Integer ShareDataOff Integer Show Integer ShowHeadFoot IntegerSort Integer TextLine String TriggerEvent Integer TypeOf Object Undo Integer Update Integer功能将数据窗口控件中“漂浮”在当前行/列上的编辑框内的内容放入数据窗口缓冲区的当前项中(编辑框的内容必须通过数据有效性规则检查)检测最近一次编辑操作能否被取消.放回值为Ture时表示能够撤消,为False时表示不能撤消返回数据窗口控件指定统计图的数据类别数返回数据窗口控件的名称删除数据窗口控件的编辑框中所选内容,对RichText风格的数据窗口来说,删除数据窗口中所选内容删除数据窗口控件指定列的代码表中的所有值,该函数不影响指定列的数据值将数据窗口控件中指定的统计图复制到系统剪贴板将数据窗口控件当前行列上编辑框中的所选内容复制到系统剪贴板.对RichText风格的数据窗口来说,把数据窗口控件中所选内容复制到系统剪贴板将数据窗口控件中所选的文本,图像,输入字段作为一个超文本格式的字符串返回,位图和输入字段包括在字符串中使用指定的源代码创建窗口对象,并用新的数据窗口对象取代数据窗口控件中原有的数据窗口对象显示Crosstab Definition对话框,这样用户能够在运行时修改Crosstab风格的数据窗口对象的定义将数据窗口控件当前行列上编辑框中的所选内容复制到系统剪贴板.对RichText风格的数据窗口来说,把数据窗口控件中所选内容复制到系统剪贴板返回数据窗口控件指定图形,指定序列的数据点数取消数据库数据检索进程得到数据库访问出错时的错误编号(即将废弃)得到数据库访问出错时的错误信息(即将废弃)返回数据窗口控件中已经被删除但尚未做数据库更新的行的数量删除数据窗口控件中的指定行返回数据窗口控件的指定信息开始或结束数据窗口控件的拖动在数据窗口控件中显示满足当前过滤条件的行返回过滤缓冲区中数据行数在数据窗口控件中查找满足条件的下一行.对RichText风格的数据窗口来说,在该控件中查找满足条件的文本,搜索到后将其加亮.可以指定查找方向以及指定是否需要大小写匹配和单词匹配返回数据窗口控件中指定图形,指定类别的类别号从指定行开始,在数据窗口控件中查找指定分组的第一个分组位置使用Find()函数的条件继续查找,该函数只适用于RichText风格的数据窗口标识用户未填充的所需列返回数据窗口控件中指定图形,指定序列的号根据数据窗口的内容生成HTML Form语法返回一个字符串,字符串由带名,Tab字符(~t)和行号组成,指示当前鼠标指针位于哪个带的那个行上返回数据窗口控件指定列的边框类型,有效值为Box!, Lowered!, NoBorder!, Raised!, ResizeBorder!, ShadowBox!, Underline!得到指定列子数据窗口的名称并将其保存到变量中返回用户在数据窗口控件中单击或双击列的列号(即将废弃)返回用户在数据窗口控件中单击或双击列的行号(即将废弃)返回数据窗口控件当前列的列号返回数据窗口控件当前列的列名创建指定服务(包括ContextInformation, Internet以及Keyword)的上下文相关实例返回数据窗口控件指定图形,指定序列和指定数据点的值返回饼图中切开部分所占的百分比得到统计图中数据点的外观数据.序列中的每一个数据点都可以有不同的外观设置.该函数有3种语法形式得到数据窗口控件指定统计图,指定序列和指定数据点的值返回数据窗口控件指定列的显示格式返回数据窗口控件中指定行,指定列的Date型(日期型)数据值返回数据窗口控件中指定行,指定列的DateTine型(日期时间型)数据值返回数据窗口控件中指定行,指定列的Decimal型(十进制数字型)数据值返回数据窗口控件中指定行,指定列的数值型(包括decimal,double,Integer,Long或real)数据值返回数据窗口控件中指定行,指定列数据型的状态,有效值为 DataModified!, New!, NewModified!和NotModified!返回数据窗口控件中指定行,指定列的String型(字符串型)数据值返回数据窗口控件中指定行,指定列的Time型(时间型)数据值得到数据窗口控件中crosstab风格的数据窗口对象产生的消息文本(即将废弃)返回数据窗口控件指定缓冲区中位于指定行之后的第一个被修改过的行的行号返回一个字符串,字符串由列名或统计图对象名,tab字符(~t)和行号组成,指示当前鼠标指针位于哪个列或统计图对象的哪个行上返回父对象的名称返回数据窗口当前行的行号返回数据窗口控件中指定行之后的第一个被选行的行号返回统计图中某个序列的风格,该函数有四种语法格式返回当前数据窗口控件提交给数据库的SQL语句(即将废弃)返回数据窗口控件当前的SELECT语句返回数据窗口控件中悬浮在当前行,列之上的编辑框中的文本返回数据窗口事务对象的值将要被更新的行的行号保存在一个变量中,将缓冲区的类型保存在另一个变量中(即将废弃)返回数据窗口控件指定列的有效性规则得到数据窗口中指定列的值或代码表指定项的值让数据窗口控件重新计算分组隐藏数据窗口控件把系统剪贴板中的数据复制到数据窗口控件中把文件中的数据复制到数据窗口控件中把字符串中的数据复制到数据窗口控件中将超文本格式的文件或普通文件的内容插入到数据窗口控件中.利用该函数的参数可以指定下述插入方法:在插入点位置插入,取代现有的所有内容.这个函数只能应用与RichText风格的数据窗口在数据窗口控件指定行前面插入一行 返回值为当前行的行号当数据窗口控件中指定行被选择时返回Ture,当指定行未被选择或指定的行号大于数据窗口控件中的行数时返回False得到悬浮于当前行列上编辑框中数据的行数返回数据窗口控件中已经修改但尚未给新相应数据库表的行数修改数据窗口控件的属性将数据窗口移动到指定位置返回当前鼠标指针位于统计图的哪个区域并将相应的序列和数据点值保存到指定变量中将系统剪贴板的内容插入到数据窗口中"悬浮"于当前行/列的编辑框中将字符串中的超文本数据粘贴到RichText风格的数据窗口控件中返回当前鼠标指针离数据窗口控件左边缘的距离返回当前鼠标指针离数据窗口控件上边缘的距离返回数据窗口控件中悬浮在当前行/列的编辑框的插入点位置,对RichText风格的数据窗口控件返回当前插入点的行/列位置或所选文本的起始与结束位置将某个事件添加到数据窗口控件消息队列的尾部将数据窗口控件的内容发送到打印机上,这个函数有几种语法格式当数据窗口控件的内容发送到打印机后,该函数检查是否有要取消打印工作,查找到后,删除对应的脱机打印文件用指定字符串代替编辑框中所选内容访问数据库,重新选择所有被修改的列。
PB之常用函数
Return1
//不允许关闭
EndChoose //用户所有的选择情况处理完毕
通过上面的脚本,可以为用户提供一个很健壮的数据处理窗口。即使直接关闭该窗口,在数据窗口中所做的数据修改也不会丢失,除非用户 自己想放弃。
另外,需要注意的是,在其他事件中调用或者触发(使用TriggerEvent函数、PostEvent函数或者是对象名称.Event 事件名称格式调用事 件)Close事件,都只是执行该事件中的脚本,并不真正关闭窗口。也就是说,应该区别事件和事件处理脚本,这两者虽然有很多的联系但 并不相同。 PB中的所有事件和事件处理脚本都是有区别的。
row:要设置数据的行,为long类型。
column:要设置数据的列,可以是string类型的列名称,也可以是integer类型的列号。
插入空行:insertrow(0) dw_name.insertrow(0) 通常配合插入行使用的是滚动行 dw_name.scrolltorow(dw_name.insertrow(0)) \\滚动到插入行 比如:int row
row = dw_1.insertrow(0)
//显示
dw_1.scrolltorow(row)
该函数有返回值,1,2,3对选择的按键。
基本写法事例: MessageBox('此处为标题,'此处为内容') 完整写法事例: if MessageBox('提示信息','是否删除?',&Question! ,OKCancel! , 1 ) = 1 then//选择确定 MessageBox('提示信息', '你选择了删除') else//选择取消
//使用
pb的基本函数
1、Open 两种格式:一个是带参数的还有一个是不带参数的不带参数的是不确定具体的数据类型的2、Opensheet() opensheet(指定窗口名,{指定要打开的窗口的类型},指定要放置的工作表的框架窗口名,所打开的窗口是在第几个菜单下生产默认值为倒数第二个,打开方式arrangeopen。
)打开方式分为三种:cascade、layered、original。
Cascade:向右下方偏移。
默认值如果缺少的话Layered:最大化Original:与cascade相同。
只是打开的时候与原来的一样大3、Close4、Setfocus() 将焦点设置到指定控件上Objectname.setfocus() 如果objectname是列表框的话则控件将指向列表框的第一列表项上。
5、SelectText()返回该控件所选的文本。
返回值为long Singlelineeditname.selecttext(start,length)6、GetColumn()和GetColumnname()两个都没有返回值:第一个是返回当前列的列好,第二个则是返回当前列名7、Update()8、DeleteRow()Dwcontrol.deleteRow(row) row表示要删除的行数,当该值为0时则表示删除该行1、insert row 在数据窗口控件指定行前面插入一行dwcontrol.insertrow(row) scrolltorow():使新插入的行成为当前行。
2、ScrollToRow() 使用方法:rtename .scrolltorow(row)Rtename超文本编辑框的名称。
如果row的值为0的话则就回滚到第一行,如果row的值大于超文本的行数则回滚到最后一行3、selectedColumn()返回插入点后第一个字符的位置rtename.selectedcolumn()4、setcloumn5、print() 以当前字体在打开的打印作业中打印一行或多行文本print(printjobnumber,{tabl},string{,tab2})tab1为文本开始打印的位置,以千分之一英寸为单位。
《PB程序设计》第9章用户自定义事件
返回本节 录
9.4 触发用户事件
Static和Dynamic选项只能选择一个,缺省时为 Static。Static表示编译时指定事件必须存在,系统 要进行返回值类型检查;Dynamic表示编译时指定事 件可以不存在,系统把返回值类型检查推迟到应用 程序运行时进行。 Event是关键字,表示后面的Event Name是个事 件名而不是函数。Para list是事件的参数,有多个 参数时参数之间用逗号分隔。 如果用户事件定义了参数,只能使用上述格式触 发事件,而不能使用函数TriggerEvent()或 PostEvent()。
返回章目录
9.1用户自定义事件在应用中的作用
在下列情况下经常使用用户事件: (1)解决对象与窗口之间的通信问题。用 户事件可以通过参数进行信息传递。 (2)响应特殊操作。这些操作没有相应的 PowerBuilder预定义事件 (3)支持用户通过多种多样的方式完成同 一个功能
返回本节 录
返回本节 录
9.5 用户自定义事件应用实例
为了测试,我们在表中添加几条记录如图9ˉ12 所示
返回本节 录
9.5 用户自定义事件应用实例
运行程序:单击“显示记录”按钮,结果如图 9ˉ13所示
9.1用户自定义事件在应用中的作用
用户事件在许多地方与用户定义函数十分相似,用 户事件运用的灵活程度很大程度上反映出应用程序 的灵活性和适用性。PowerBuilder开始将事件和函 数同化,统称为方法。事件也可以带输入参数,并 有返回值。有时形式上难以区分事件和函数。不过, 函数一般是由用户调用,在编程时就已决定,而事 件除了可以由用户触发外,还可以由系统触发。大 多数的事件,都是由系统触发的。因此,事件比函 数更为灵活,应用范围更广
第11章 类
在面向对象程序设计中,算法与数据结构被捆绑成一个类。现实世界本 身就是一个对象的世界,任何对象都具有一定的属性和操作,也就总能用数 据结构与算法两者合一地描述,此时,程序定律再次改写: 对象=(算法+数据结构) 程序=(对象+对象+......)
【11.3 类的声明与定义成员函数】
类也是一种用户自定义数据类型。它不仅包含不同数据类型的变量,还可 以包含对这些变量数据进行操作的函数。 类是一组变量及其相关函数的组合。类中的变量称为类的成员变量或数据 成员;函数称为类的函数成员或方法。
类的定义举例
struct Savings { public: //可以省略 unsigned deposit(unsigned amount) { balance+=amount; return balance; } unsigned accountNumber; float balance; }; class Savings { public: unsigned deposit(unsigned amount) { balance+=amount; return balance; } private: unsigned accountNumber; float balance; };
注:1、关键字class表示类,Savings是类名,一般首字母大写,以示与对 象名的区别,关键字public和private表示存储控制。 2、C++中类与结构的唯一区别是:类定义中默认情况下的成员是private 的 ,而结构定义中默认情况下是public的;在C中,结构中不允许有成员函 数,而在C++中有成员函数。
在声明类时,一般来说应该把类的所有数据成员都声明为私有的,同时声明 公有成员函数来访问这些数据成员。 在类的声明中,关键字public、protected和private的出现顺序是任意的, 可以不出现或多次出现。类中的每个成员只能有一种特定的访问属性。
PB 11第11章 自定义函数和结构
1.选择目标
2.选择pbl源文件
3. 在 ObjectType 中 选 择 Functions或All Objects
图11-5 打开自定义全局函数
11.1.3删除自定义全局函数
打开Library库管理器,打开要删除的自定义全局函数所在的PBL,选择 要删除的自定义全局函数,右击,出现弹出式菜单,选择Delete将删除 所选的自定义全局函数。
点击该图标,将显示 /隐 含函数属性定义
图11-8定义对象函数的属性
11.2.1 创建自定义对象函数
在定义函数的下面窗口内编辑代码。若函数有返回值,立即输入代码,即必须 写一条return语句,否则产生错误。 对象函数的返回值的类型、参数名、个数及类型能随时更改,系统会给出一个 提示信息,以确认是否更改。 在其它对象的程序中调用时,应在函数名前加上函数所在的对象名如 w_pipe.wf_error(num),当然w_pipe必须已被打开。
1.选择Functions 2.选择New Function
图11-7 定义对象函数
11.2.1 创建自定义对象函数
Access缺省值为“public” 。 访问属性Access有三个选择: l public:在整个程序中都可访问。 l private:只能在当前对象的程序中使用,不能在该对象的后代的程序中使用。 l protected:只能在当前对象的程序以及该对象的后代的程序中使用。 对象函数的命名规则一般与对象有关,如应用对象Application Object的函数一般 以“af_”作前缀,窗口对象Window的函数一般以“wf_”作前缀,菜单对象menu 的函数一般以“mf_”作前缀,用户自定义对象的函数一般以“uf_”作前缀。这些 规则清楚地表明了函数所在对象的类型,便于程序的维护。
PB 函数大全(3)
PB 函数大全(3)默认分类2009-11-11 17:30:49 阅读839 评论0 字号:大中小订阅SetNull()功能将指定变量的值设置为NULL。
这里的变量可以是除数组、结构、自动实例化对象之外的任何数据类型。
语法SetNull ( anyvariable )参数anyvariable:要将其值设置为NULL的变量返回值Integer。
函数执行成功时返回1,发生错误时返回-1。
如果任何参数的值为NULL,SetNull()函数返回NULL。
用法PowerBuilder应用程序在说明变量时,并不自动地将其初值设置为NULL,而是根据类型的不同而设置不同的初值,比如,数值类型的变量自动初始化为0,字符串型变量自动初始化为空字符串("")。
因此,如果需要将某个变量的值设置为NULL,就需要使用SetNull()函数来完成任务了。
一般来说,NULL值往往应用在数据库值未确定的列上。
SetPointer()功能设置鼠标指针。
语法SetPointer ( type )参数type:Pointer枚举类型,指明要设置为哪种鼠标指针返回值Pointer。
返回更换前的鼠标指针,以便于应用程序恢复原有指针。
如果参数type的值为NULL,SetPointer()函数返回NULL。
用法type参数的可能取值为:Arrow!、Cross!、Beam!、HourGlass!、SizeNS!、SizeNESW!、SizeWE!、SizeNWSE!、UpArrow!。
SignalError()功能以编程方式触发应用对象的SystemError事件。
语法SignalError ( { number }, { text } )参数number:integer类型,可选项,指定出错编号,该编号将保存到Error对象的number属性中text:string类型,可选项,指定出错信息,该信息将保存到Error对象的text属性中返回值Integer。
PB11简介
2.5 窗口、用户对象之间的消息传递
Pb8.Pdf用户手册中1.2.7的详细介绍 PostEvent 参看Pb8.pdf用户手册中3.1.9小节详 解 邮寄执行 随机空闲执行 TriggerEvent 参看PB8.Pdf用户手册中3.1.16小节 详解 立即执行 按消息队列顺序执行 使用Send消息传递(窗口之间的通讯)参看 Pb8.Pdf中2.14.12小节 窗体打开可以通过OpenwithParm传递参数 响应窗体可以通过ClosewithReturn 截取返回值 全局消息对象Message 的三个常用属性。 DoubleParm、StringParm 、PowerObjectParm
pro_treeviewclass 非可视化的用户对象 uo_treeview 可视化的用户对象
2.4.4 如何使用用户对象
可视化用户对象
所谓可视用户对象就是可重用的具有某种行为的一个或一 组控件。换句话说,也就是为了重复调用,将逻辑封装成 一个整体。
类用户对象
它也具有非常广泛的应用领域。比方说,在制作一个商用数据 库软件的时候,经常会使用某些商业规则对数据进行重复地计 算和处理。如果我们定义一个用户对象,由它来管理这套数据 处理的办法,那就会使程序的设计工作方便很多。类用户对象 也叫非可视化用户对象,与可视化用户对象用法基本类似。在 Pb11中来看一下。
2.9 应用程序开发及发布
创建一个应用调试 利用开发工具编译成Dll或PBD 发布EXE、Dll(PBD) + Pb的支持动态库,类 似于Java的虚拟机
3.1 Dw数窗的详细介绍
不同风格数窗使用介绍(12种风格) 如何设计数窗 数窗检索数据,正常检索、带参数检索 数窗更新数据 数窗的数据源介绍(无数据源、SQL语句组 合、视图、存储过程) 数窗四个缓冲区的介绍 Primary,Delete,Filter, Original(隐式的)
PB中文件操作函数大全
PB中文件操作函数大全()功能关闭先前用()函数打开的文件。
语法( fileno )参数fileno:integer,指定要关闭文件的文件句柄,该句柄使用()函数打开文件时得到返回值Integer。
函数执行成功时返回1,发生错误时返回-1。
如果fileno参数的值为NULL,那么()函数返回NULL。
()功能删除指定的文件。
语法( )参数:string类型,指定要删除文件的文件名,其中可以包含路径返回值Boolean。
函数执行成功时返回TRUE,发生错误时返回FALSE。
如果参数的值为NULL,那么()函数返回NULL。
()功能检查指定的文件是否存在。
语法( )参数:string类型,指定要检查存在性的文件的文件名,其中可以包含路径返回值Boolean。
如果指定文件存在时返回TRUE,不存在时返回FALSE。
如果参数的值为NULL,那么()函数返回NULL。
用法如果参数指定的文件被另一个应用加锁锁住,那么()函数也将返回FALSE。
()功能得到指定文件的长度(以字节为单位)。
语法( )参数:string类型,指定要得到其长度的文件的文件名,其中可以包含路径返回值Long。
函数执行成功时返回指定文件的长度(以字节为单位)。
如果指定的文件不存在,函数返回-1。
如果参数的值为NULL,那么()函数返回NULL。
()功能以指定的读写方式打开指定的文件,同时返回该文件的句柄。
语法({,{,{,{,writemode,{creator,}}}}})参数:string类型,指定要打开文件的名称,其中可以包含路径:枚举类型,可选项,指定文件打开方式。
有效取值为:?LineMode! - 缺省值,行模式;?StreamMode! - 流模式:枚举类型,可选项,指定文件访问方式。
有效取值为:?Read! - 缺省值,只读方式,这样打开的文件只能进行读操作;?Write! - 只写方式,这样打开的文件只能进行写操作?:枚举类型,可选项,指定文件加锁方式。
PB11数据库技术及应用
PocketBuilder的Sybase® PB®11.5版本已投入使用。为开发带来很多 帮助包括:增强的.NET支持、创建具有丰富可视化效果的数据驱动型应 用程序的全新DataWindow创新功能、
8.1 PowerBuilder简介
n (2)增强的数据库支持
n 支持MS SQL Server 2008和Oracle 11g。 n (3)DataWindow 和美化增强 n 1)支持PNG n 2)菜单、工具栏、树状图、DataWindows、图片、图片按钮
3)透明度 n 4)背景:渐变梯度、图片 n 5)控件:渐变梯度、透明度(以百分比表示)、工具提示 n 6)列:Rich text 编辑格式 n 7)图形:三维图形风格(也在独立图形控件中)。包括使用 3D技术渲染饼状图、柱状图、条状图、线形图和范围图表,
8.1 PowerBuilder简介
n 能极大地提高开发效率的全新本地关系型数据库管理系统(RDBMS)驱动 器、带有应用程序服务器接口,允许第三方应用程序服务器直接在PB整合 式开发环境中进行相关部署和简化的安全系统等。
n 4.其他新功能
n 此外,PB新版本增强了.NET的互操作性、提供了创新的DataWindow ,以及其他大量的新功能,使工作变得更简单、应用程序更稳健,也提高 了开发速度。PB将继续利用现有代码、技术投资和专门技术,整合最新的 开发模式,用于解决业务和IT问题。 n (1)增强的.NET支持 n 1)Strong-named assemblies; n 2)对原语和枚举类的函数调用; n 3)静态成员访问; n 4)对.NET的功能性、支持度和互操作性随着Windows的普及而强化 ,所以PB不断进行更新,与Microsoft最新技术保持同步。
c语言第11章-结构体与共用体
}
§11.6 构造体和指针
ma指in向() 构造体变量旳指针
{ s❖tr定uc义t st形ud式en:t struct 构造体名 *构造体指针名; { 例lonsgtruicntt sntuudmen;t *p; char name[20]; ❖使str用ucch构tars造tsued体xe;n指t 针变存量储引构用造组体p员变形量式在内存旳起始地址
struct student stu1={112,“Wang Lin”,‘M’,19, “200 Beijing Roa
形式二:
struct 构造体名
{ 类型标识符 组员名; 类型标识符 组员名;
……………. }构造体变量={初始数据};
例 struct student { int num; char name[20]; char sex; int age; char addr[30]; }stu1={112,“Wang Lin”,‘M’,19, “200 Beijing Road”
❖用构造体变量旳组员作参数----值传递 ❖用指向构造体变量或数组旳指针作参数----地址传递 ❖用构造体变量作参数----多值传递,效率低
例 用构造体变量作函数参数
(main)
struct data { int a, b, c; };
accacbbb::::::::2332333370070
main()
}
指向构造体数组旳指针
例 指向构造体数组旳指针
struct student { int num;
char name[20]; char sex; int age;
p num
name
sex
p+1
age
C语言章节教案
章节教案章节名称第1章 C语言概述授课类型理论课(√)、实践课(√)、实习()教学时数1、了解C语言的发展历程教学目的要求2、了解C语言的特点3、掌握C程序的组成结构4、掌握C程序的上机操作环境1.1 C语言出现的历史背景1.2 C语言的特点主要知识点1.3简单的C程序介绍1.4 C程序的上机步骤3教学重点、重点:C语言的组成结构及程序书写规范。
难点难点:C语言实验环境的操作。
教学内容的衡接及学时分配问题:不能及时熟练的掌握TC集成环境的操作,对程序出错时的英文提示信息看不懂。
教学后记教法:对集成环境操作先只介绍精简操作,而后再不断的扩展操作。
而对英文提示信息方面应引导学生先要有耐心的看这些信息,而后养成积累这些提示信息的习惯。
理论内容2学时,实验2学时。
章节名称第2章程序的灵魂——算法授课类型理论课(√)、实践课(√)、实习()教学时数1、了解程序的组成要素教学目的要求2、理解算法的概念和特性3、掌握用算法描述工具来描述算法4、了解结构化程序设计方法2.1算法的概念2.2简单算法举例主要知识点2.3算法的特性2.4怎样表示一个算法2.5结构化程序设计方法4教学重点、重点:C语言程序的组成要素和使用各种算法描述工具描述算法。
难点难点:运用算法和结构化程序设计方法解决实际问题。
教学内容的衡接及学时分配引导学生选择一种适合自己习惯的算法描述工具,而后利用该工教学后记具来分析和解决各类问题,并逐步的培养自己分析问题、解决问题的能力。
基本理论概念2学时,各种算法描述工具2学时,实验2学时。
章节名称第3章数据类型、运算符与表达式授课类型理论课(√)、实践课(√)、实习()教学时数1、掌握基本数据类型及其定义方法教学目的要求2、掌握运算符的种类、运算优先级、结合性。
3、掌握不同类型数据间的转换与运算。
4、掌握表达式类型和求值规则。
3.1 C的数据类型3.2常量与变量3.3整型数据3.4实型数据主要知识点3.5字符型数据3.6变量赋初值3.7各类数值型数据间的混合运算3.8算术运算符和算术表达式3.9赋值运算符和赋值表达式3.10逗号运算符和逗号表达式教学重点、难点重点:C语言的数据类型、常量概念与特性、变量的定义与特性、运算符的优先级与结合性,各类数值型数据间的混合运算。
PB事件和自定义事件
create by amu on 2012-08-16----------------------------------------------------------------------------------------1.window中的事件事件名触发的时机01.Activate 在窗口激活之前触发02.Clicked 当用户用鼠标单击窗口的空白区域(没有控件的区域)时触发03.Close 当关闭窗口时触发04.CloseQuery 当清除或关闭窗口时触发。
然后检查Message.ReturnValue的值,若为1,则窗口不能关闭05.Deactivate 当窗口变为非活动状态时触发06.DoubleClicked 当用户双击窗口的空白区域时触发07.DragDrop 当一个可拖动的控件被拖动到窗口上时触发08.DragEnter 当一个可拖动的控件进入窗口时触发09.DragLeave 当一个可拖动的控件离开窗口时触发10.DragWithin 当一个可拖动的控件在窗口内部拖动时触发11.Hide 在窗口被隐藏时触发12.HotLinkAlarm 在DDE中服务器应用已经发送了新的数据,客户DDE应用已经接收到这些数据时触发13.Key 当用户击了一个键且插入点不在RichTextEdit编辑控件或数据窗口控件时触发14.MouseDown 当用户在窗口的空白区域按下鼠标左键时触发15.MouseMove 当鼠标在窗口内移动时触发16.MouseUp 当用户在窗口的空白区域释放鼠标左键时触发17.Open 当程序调用以此窗口为参数的Open函数时,此事件在该窗口打开之后,显示之前触发18.Help .........19.Other 当一个非PowerBuilder事件的Windows信息发生时触发20.RButtonDown 在窗口的空白区域单击鼠标右键时触发21.RemoteExec 当一个DDE客户应用发送了一个命令时触发22.RemoteHotLinkStart 当一个DDE客户应用开始一个热连接时触发23.RemoteHotLinkStop 当一个DDE客户应用结束一个热连接时触发24.RemoteRequest 当一个DDE客户应用请求数据时触发25.RemoteSend 当一个DDE客户应用已经发送了数据时触发26.Resize 当用户或程序打开或重设窗口大小时触发27.Show 当程序运行此窗口的show函数时,此事件在窗口显示之前触发28.SystemKey 当插入点不在某个行编辑中且用户按了ALT或ALT加其它键时触发29.Timer 在调用Timer函数后,经过了Timer函数指定的时间后触发30.ToolBarMoved 当MDI窗口的工具条移动时触发以上是我新建一个window是window的事件原来的顺序,下面是我自己常用的排序:01.window打开时发生的事件事件名触发的时机Activate 在窗口激活之前触发Resize 当用户或程序打开或重设窗口大小时触发Open 当程序调用以此窗口为参数的Open函数时,此事件在该窗口打开之后,显示之前触发Show 当程序运行此窗口的show函数时,此事件在窗口显示之前触发02.window关闭时发生的事件Deactivate 当窗口变为非活动状态时触发CloseQuery 当清除或关闭窗口时触发。
pb常用函数
pb常用函数弹出窗口:messagebox()基本写法:Messagebox('标题','内容')完整写法: MessageBox ( '标题','内容',图标,按键,默认值)设置焦点:setfocus()对象名.setfocussle_1.setfocus()用format菜单下的tab order命令可以修改焦点顺序。
把用户名和密码框分别设为10,20,确定按钮设为30就行了。
也可以用控件的setfocus()方法设置焦点。
触发事件:triggerevent()对象名.triggerevent()(1)函数作用:触发指定对象的指定事件,并且立即执行该事件中的脚本。
注意该函数和PostEvent的区别。
PostEvent不是立即执行,TriggerEvent 是立即执行触发事件的脚本。
(2)函数语法:objectname.TriggerEvent ( event{, word, long } )关闭窗口:Close()和CloseQuery()默认数据库链接变量:sqlcadw_name.settransobject(sqlca)链接数据库sqlca.sqlcode = 0 有数据\\ = 100 无数据链接数据库connect;一般用于程序open的时候,跟在数据库链接代码后面打开窗口:open( )open(win downame)关闭应用:halt close()halt closehalt 直接结束应用程序从ini配置文件中提取string数据profilestring('文件名,可以包含路径','主要字节','在主要字节下的关键字','如果找不到数据则返回的数据')断开链接disconnect;一般用于程序close的时候是否修改过:isrowmodified()if dw_1.modifiedcount()+dw_1.deletedcount()>0 then.......//数据窗口处于修改状态end if是否新增的:isrownew()数据窗口中的if函数if(true\false,'为true时返回的值','为false时返回的值',)如:if(isrownew(),'新',if(isrowmodified(),'改','旧'))插入空行:insertrow(0)dw_name.insertrow(0)通常配合插入行使用的是滚动行dw_name.scrolltorow(dw_name.insertrow(0)) \\滚动到插入行比如:int rowrow = dw_1.insertrow(0)//显示dw_1.scrolltorow(row)//使用dw_1.object.column[row]从数据窗口中提取数据:getitem( )dw_name.getitem\\string\date\......(row,'数据来源控件名')string dwcontrol.GetItemString ( long row,integer column {, DWBuffer dwbuffer, boolean originalvalue } )String dwcontrol.GetItemString ( long row, string column {,DWBuffer dwbuffer, boolean originalvalue } )getitem首先根据数据窗口不同的字段类型,有不同的函数。
PB 11第11章 自定义函数和结构
图11-2定义全局函数的属性 定义全局函数的属性
11.1.1创建自定义全局函数 创建自定义全局函数
参数传递方式有三种: 参数传递方式有三种: Value:值传递---将实际参数的值传递给函数参数 : Reference:地址传递---把实际参数的地址传递给函数,此时,如果 函数修改了形式参数的值,那么实际参数的值也就被修改了。 Readonly:地址传递---把实际参数的地址传递给函数,不过不允许 : 修改参数的值。 要 增 加 或 删 除 参 数 , 可 在 图 11-2 中 右 击 , 出 现 弹 出 式 菜 单 。 Add Parameter增加参数,Insert Parameter插入参数,Delete Parameter 删除参数
[access] FUNCTION return_type function_name([REF][type1 arg1,。。。,typen ,。。。, argn]) LIBRARY lib_name
用Subroutine的格式:
[access] SUBROUTINE sub_name([REF][type1 arg1 , 。 。 。 , typen argn]) LIBRARY lib_name
11.1.1创建自定义全局函数 创建自定义全局函数
Object页的Function,双击Function项或点击OK按钮,进入全局函 数的定义。 在图中,Function Name项中输入函数名、Return Type下拉框中选择 函数返回值的类型、Argument Name中输入函数参数名、Argument Type下拉框中选择函数参数类型、PassBy下拉框中选择参数传递方 式。
PB系统函数
事件已经编写了事件处理程序,那么执行这些事件处理程序,从屏幕
上删除要关闭的窗口、关闭窗口、之后执行调用Close()函数语句后面
的语句。当窗口被关闭后,应用程序就不能再访问已经关闭窗口的属 性、实例变量、对象函数、以及窗口上的控件了。如果关闭窗口后应 用程序依然访问上述特性,那么将引发运行错误。当然,应用程序也 可以阻止窗口被关闭,方法很简单,只要在欲阻止关闭窗口的
Pointer。返回更换前的鼠标指针,以便于应用程序恢复原有指针。如
果参数type的值为NULL,SetPointer()函数返回NULL。用法type参数
的可能取值为:Arrow!、Cross!、Beam!、HourGlass!、SizeNS!、
SizeNESW!、SizeWE!、SizeNWSE!、UpArrow!。
标的当前位置开始打印string:string类型,指定要打印的字符串。如果字 符串中包括回车换行字符(~r~n),那么该字符串将被分成多行输出,
但是(dànshì),除第一行之外,其它行忽略tab1参数指定的起始打印位置 tab2:Integer类型,可选项,指定字符串打印结束后打印光标移动到 的位置,从打印区的左边界开始计算,以千分之一英寸为单位。如 果打印光标已经超过了指定位置,那么Print()函数忽略该参数,打印 光标位于已打印字符串的尾部。如果省略了该参数,Print()函数把打
第五页,共四十一页。
Open()
功能:打开窗口。 语法一:打开编程时已知数据类型的窗口对象Open ( windowvar {,
parent } )
参数:windowvar:要打开窗口的窗口名,可以使用窗口画笔定义的 窗口对象名,也可以使用该窗口对象的某个变量(biànliàng)。Open()函数 把打开窗口的引用放置到windowvar变量中parent:可选项,指定要
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
图11-17
定义外部函数
输入下面的代码: // 定义外部函数,即声明外部函数的语法格式与来源 Function Long ShellExecuteA(Long hwindow, String lpOperation, String lpFile, String lpParameters, String lpDirectory, Long nShowCmd) Library 'shell32.dll' Function Long GetDesktopWindow() Library 'user32.dll' 在“设置口令”的命令按钮cb_setpw的clicked事件中输入以下代码: //在PowerBuilder中调用Windows控制面板中的口令管理程序 String cpl_name String ls_null SetNull(ls_null) cpl_name = "Password.cpl" ShellExecuteA(GetDesktopWindow(), ls_null, 'rundll32.exe', "shell32.dll,Control_RunDLL " + cpl_name + ",", ls_null, 0) //调用外部函数
[access] FUNCTION return_type function_name([REF][type1 arg1,。。。,typen ,。。。, argn]) LIBRARY lib_name
用Subroutine的格式:
[access] SUBROUTINE sub_name([REF][type1 arg1 , 。 。 。 , typen argn]) LIBRARY lib_name
图11-4 编辑函数代码
点击该图标,将显示 点击该图标,将显示/ 隐含函数属性定义
11.1.2修改自定义全局函数 修改自定义全局函数
在开发环境的主窗口中, 选 择 工 具 栏 的 Open 图 标或选择主菜单File的 子 菜 单 Open , 将 出 现 标题为“Open”的窗口, 在ObjectType下拉框中 选 择 Functions , 在 Object中选择要打开的 Object 4.选择要打 选择要打 函数, 开的函数 双击或点击OK按钮,进 入全局函数的定义,如 前图11-4所示。可以更 改函数返回值的类型、 参数名、个数及类型和 函数代码。
1.选择 选择Functions 选择 2. 选 择 要 修 改 的 函数 点 击 该图 标 , 将显 示 /隐含函数属性定 隐含函数属性定 义 , 可以 更改 返回 更改返回 值类型及参数等
3.输入或修 输入或修 改代码
图11-10 修改对象函数
11.2.3 删除自定义对象函数
要删除自定义对象函数,首先打开自定义函数所在的对象,然后 选择主菜单View的子菜单Function List。
图11-12 列出所有对象函数
图11-13删除对象函数 删除对象函数
11.3.1外部函数的定义 外部函数的定义
使用外部函数之前,必须先对其进行说明。根据作用范围分为两种类型:全局外部 函数Global External Functions和局部外部函数Local External Functions。全局外部 函数可在应用程序的任何地方使用;局部外部函数只能在所定义的对象中使用。 打开要定义外部函数的对象,再打开Script代码编辑窗口,选择Declare,再选择 Global External Functions或Local External Functions,最后输入函数定义。
点击该图标, 点击该图标, 将显示/隐含 将显示 隐含 函数属性定义
图11-2定义全局函数的属性 定义全局函数的属性
11.1.1创建自定义全局函数 创建自定义全局函数
参数传递方式有三种: 参数传递方式有三种: Value:值传递---将实际参数的值传递给函数参数 : Reference:地址传递---把实际参数的地址传递给函数,此时,如果 函数修改了形式参数的值,那么实际参数的值也就被修改了。 Readonly:地址传递---把实际参数的地址传递给函数,不过不允许 : 修改参数的值。 要 增 加 或 删 除 参 数 , 可 在 图 11-2 中 右 击 , 出 现 弹 出 式 菜 单 。 Add Parameter增加参数,Insert Parameter插入参数,Delete Parameter 删除参数
第11章 自定义函数和结构 章
11.1 11.2 11.3 11.4 创建自定义全局函数 创建自定义对象函数 外部函数 结构
11.1.1创建自定义全局函数 创建自定义全局函数
在开发环境的主窗口中,选择工具栏的New图标或选择主菜单 File的子菜单New,将出现标题为“New”的窗口。
图1 定义全局函数
1.选择目标 选择目标
2.选择 源文件 选择pbl源文件 选择 3. 在 ObjectType 中 选 择 Functions或All Objects 或
图11-5 打开自定义全局函数
11.1.3删除自定义全局函数 删除自定义全局函数
打开Library库管理器,打开要删除的自定义全局函数所在的PBL,选择 要删除的自定义全局函数,右击,出现弹出式菜单,选择Delete将删除 所选的自定义全局函数。
图11-11 列出全部函数
11.2.3 删除自定义对象函数
选择Function List后将列出该对 象的全部函数,如图11-12,右 击要删除的函数,出现一个弹出 式菜单,图11-13,选择Delete将 删除所选的对象函数。 注意: 注意 : 一旦选择Delete将立刻删 除所选的对象函数,系统对删除 操作不作提醒。 在图11-13中,选择弹出式菜单 中的Script,或双击所选的函数, 将打开Script代码编辑窗口,以 便查看与修改所选的对象函数, 包括函数返回值的类型、参数名、 参数个数、参数类型及函数代码 等。
1.选择 选择Functions 选择 2.选择New Function .选择
图11-7 定义对象函数
11.2.1 创建自定义对象函数
Access缺省值为“public” 。 访问属性Access有三个选择: public:在整个程序中都可访问。 : private:只能在当前对象的程序中使用,不能在该对象的后代的程序中使用。 : protected:只能在当前对象的程序以及该对象的后代的程序中使用。 : 对象函数的命名规则一般与对象有关,如应用对象Application Object的函数一般 以“af_”作前缀,窗口对象Window的函数一般以“wf_”作前缀,菜单对象menu 的函数一般以“mf_”作前缀,用户自定义对象的函数一般以“uf_”作前缀。这些 规则清楚地表明了函数所在对象的类型,便于程序的维护。
11.3.3外部函数使用实例 外部函数使用实例
在Windows的控制面板中的有一个口令管 理程序,用来设置和修改Windows和其它 系统口令,如图11-15。如何调用这个口 令管理程序呢? 步骤如下: 步骤如下: (1) 创建一个setpassword.pbl,其应用对 象名为password,再创建一个窗口w_pw, 窗口上放一个“设置口令”的命令按钮 cb_setpw,如图11-16所示。
图11-6 删除自定义全局函数
11.2.1 创建自定义对象函数
可以为Application Object对象、窗口对象、用户对象创建自定义 函数,这种函数称为对象函数。 先打开要定义函数的对象,再打开Script代码编辑窗口,先选择 Functions,再选择New Function,将出现函数定义窗口。
点击该图标, 点击该图标 , 将显 示/隐含函数属性定 隐含函数属性定 义
图11-9编辑函数代码 编辑函数代码
11.2.2 修改自定义对象函数
打 开 自 定 义 函 数 所 在 的 对 象 , 打 开 Script 代 码 编 辑 窗 口 , 选 择 Functions,再选择要修改的函数。对象函数的返回值的类型、参数名、 个数及类型都能随时更改。系统会给出一个提示信息,以确认是否更 改。可以输入或更改函数代码。
2. 选择 Global External Functions 或 Local External Functions 1.选择 选择Declare 选择
3.输入函数定义 输入函数定义
图11-14定义外部函数 定义外部函数
11.3.1外部函数的定义 外部函数的定义
定义外部函数时使用两种关键词:有返回值用Function,无返回值用Subroutine。 用Function的格式:
其中: access:访问级别。是可选项,只用于局部外部函数Local External Functions, : return_type:返回值类型。必须是一个合法的PowerBuilder数据类型。 : function_name和sub_name:外部程序的函数名或子程序名储存在DLL库中。 和 : REF:参数通过地址传递。 : typei:参数的数据类型。 : argi:参数名 : lib_name:包含外部函数或子程序的DLL/EXE文件名。 :
图11-15 Windows口令管理窗 口令管理窗 口
图11-16 调用外部函数示例
11.3.3外部函数使用实例 外部函数使用实例
(2) 编写代码 在应用对象password的open事件中编写代码: open(w_pw) 在窗口w_pw中定义外部函数。先打开w_pw的Script代码编辑窗 口,再选择Declare,然后选择Local External Functions。
增加、插入、 图11-3 增加、插入、删除参数
11.1.1创建自定义全局函数 创建自定义全局函数
函数名及参数定义好 后,在定义函数的下 面窗口内编辑代码。 或选择主窗口View菜 单 的 Script 子 菜 单 , 打开函数代码编辑窗 口。函数返回值的类 型、参数名、个数及 类型可以随时更改。 若函数有返回值,必 须立即输入代码,即 必 须 写 一 条 return 语 句,否则产生错误。 定义好的全局函数和 标准函数一样使用。