PB操作技巧

合集下载

PB系列简易操作手册

PB系列简易操作手册

PB简易操作手册辉泉机电设备(上海)有限公司沈阳分公司B 系列简易操作手册※ 运行开机状态:可以喷印※ 清洗停机荧屏熄灭关机※ 变更喷印内容1状态:输入模式2、 可以喷印 执行 字符输入 状态:可以喷印 执行※ 紧急停机约1分钟控制 快速停机 墨线停止 状态:停止(无清洗停机)※ 打开墨线约1分钟运行 打开墨线 状态:待机(墨线喷出,但未加高压) ※ 可以喷印控制 可以喷印 执行 状态:可以喷印※ 待机控制 待机 喷印中断 状态:待机※ 调用设定内容※登录设定内容※变更字宽,字高,延迟等喷印设置※警报/异常讯息排除确认警报/参照技术手册(异常/警容及可能发生的原因告)的简易排除故障如尚未排除请尽快联络维修工程师前往维修※印字中,变更设定内容移动光标至需要修改处输入※印字中,变更字宽,字高,延迟等喷印设置※印字中,调用设定内容选择所需条款状态:可以喷印※印字中,登录设定内容可以喷印※印字中,变更行数设定※行数设定※ 一般故障处理1. 开机故障墨水从喷嘴喷出,如果开机过程中出现异常屏幕,轻按触摸屏右上角“控制”,屏幕提示再按“快速停机”。

一般情况墨线喷出瞬间会散布一些墨点,设备不会提示警告,但如果操作开始时设备提示警告或异常(喷头内有污垢、无法充电、墨线未进回收管),执行以下措施:1) 将设备转为“停止”状态2) 旋松喷头罩锁紧螺丝,卸下喷头罩3)4) 安装喷头罩,轻按 屏幕提示再按5) 确认墨线喷射在回收管中心(垂直方向,水平方向)6) 安装喷头罩,如果设备提示“喷头罩未装”警告,轻按“删除信息”7) 设备转为“待机”状态,进而转为“可以喷印”状态2.运行中故障喷印过程中出现“无法充电”“充电量过高”“充电量过低”“无法充电”的异常警报,执行以下措施:1) 检查墨线是否射在回收管中央,采取的措施:● 检查喷头是否受到撞击,导致螺丝松动产生的墨线偏,若是就参照说明书调整墨线 ● 检查是否是喷嘴赌塞,堵塞就执行喷嘴逆清洗、添加溶剂清洗的程序(执行程序不能超过三次)● 若偏转不多可以先调整墨线,维持使用,待有超声波清洗器将喷嘴片拆下清洗 打开墨线2)检查喷头内是否有污垢或潮湿,采取的措施:用洗壶将喷头内墨水冲洗干净,再用吹球吹干,重新启动就可以3)墨点分离不良,采取的措施:●进入保养操作●调整减压阀,将压力调小(标注压力0.245)看压力表。

PB操作手册

PB操作手册

PB 操作手册创建连接1.正常安装即可2.打开PB,点击database按钮3.在左侧选择ODB ODBC,右单击,选择New profile,弹出如下对话框4. 在profile name输入要创建的库名5. 在data source下选择要连接的ODBC连接6. 在user ID和password分别输入要连接的数据库的用户名和密码7. 在Driver-Specific parameters中输入驱动的路径,如下图8.创建ODBC连接,控制面板-管理工具-数据源-添加9.根据数据库,选择匹配的驱动程序,如连接SQL2005,请选择SQL Server,点击完成10. 选择数据库的服务器,点击下一步,选择“使用用户输入登录ID和密码的SQL Server 验证”;勾选”连接SQL Server以获得其他配置选项的默认设置”;分别输入连接数据库的用户名和密码点击下一步、下一步点击测试数据源,如果测试成功,则表明连接成功11. 在Database profile setup-ODBC框内,选择“preview”,点击test connection,如果提示连接成功,则可以对库进行操作对库进行操作1.选择一个已创建的库,右单击,选择connect2.选择一张表,右单击,选择edit data-grid,即可查看数据3.选择一条数据,右单击,选择delete/insert row,可以进行删除/添加数据,修改后需要保存4.选择ISQL session,可以编写、执行SQL5.选择一条数据,右单击,选择save row as,可以将所选数据存为指定格式的数据,如CSV,TXT等6.选择一张表,使其处于grid状态,在菜单栏,选择rows-import,可以选择数据源,将数据导入表内,导入后需要保存。

PB使用小技巧

PB使用小技巧

PB使用小技巧1. 如何使PB窗口总在最上层通过SetWindowPos函数把窗口的显示层次修改为HWND_TOPMOST,就可以使指定窗口永远不会被其他窗口覆盖,该函数声明为:Function Long SetWindowPos(Long hwnd, Long ord, Long x, Long y, Long dx, Long dy, Long uflag) Library “user32.dll”参数1为要顶层显示的窗口句柄,参数2指定显示的层次,参数7为附加选项,其余参数指定窗口位置和大小,均可忽略。

在窗口的Open或Activate事件中加入如下函数调用:SetWindowPos(Handle(This),-1,0,0,0,0,3)参数2取-1表示在最顶层显示窗口,取1表示在最底层显示;最后一个参数若取1,表示窗口大小保持不变,取2表示保持位置不变,因此,取3(=1+2)表示大小和位置均保持不变,取0表示将窗口的大小和位置改变为指定值。

2. 在PB中如何获得光盘盘符通过GetDriveType函数可以获取驱动器(如:软驱、硬盘、光驱、网络映射驱动器等)的信息,该函数声明为:Function Unit GetDriveTypeA(String drive) Library “kernel32.dll”参数为一个盘符(如“C:”),返回值:1表示未知,2表示软驱,3表示本地硬盘,4表示网络驱动器,5表示光驱。

因此如下代码可以获得光盘的盘符:For I=Asc(‘D’) to Asc(‘Z’)//列举所有可能的CDROM的驱动器If GetDriveTypeA(Char(i)+”:”) = 5 Then//若找到CDROMMessagebox(“CDROM”,Char(i)+”:”)//显示光盘盘符Exit //退出循环End ifNext3. 在PB中如何获取目录信息(1)获取当前目录。

通过GetCurrentDirectory函数可以获取当前目录,该函数声明为:Function Ulong GetCurrentDirectory(Ulong buflen,ref String dir)Library “kernel32.dll”参数2为接受当前目录的字符缓冲区,前面必须加ref表示地址引用;参数1用来指定字符缓冲区的长度。

PB数据窗口绝对技巧

PB数据窗口绝对技巧

PB数据窗口绝对技巧PB数据窗口绝对技巧是指通过使用PowerBuilder开发环境的数据窗口对象实现高效数据处理的技巧。

数据窗口是PowerBuilder中最重要和最常用的对象之一,它可以用于显示和操作数据库中的数据。

下面将介绍一些PB数据窗口的绝对技巧。

1.使用绑定数据窗口:绑定数据窗口是将数据窗口与数据库表绑定在一起,这样可以方便地进行数据的读取、修改和保存操作。

使用绑定数据窗口可以避免手动编写SQL语句或存储过程,大大提高了开发效率。

2.优化数据窗口的性能:数据窗口的性能优化是开发过程中非常重要的一环。

可以通过以下方法来提高数据窗口的性能:-只选择需要的列:只选择需要的列可以减少网络传输的数据量,提高数据检索的速度。

-使用约束和过滤器:可以在数据窗口中使用约束和过滤器来限制返回结果集的大小,进一步提高性能。

-使用预检索:可以在打开数据窗口之前使用预检索功能,先将数据加载到缓存中,减少后续操作对数据库的访问次数。

3.自定义数据窗口的样式:可以通过数据窗口的属性和事件来自定义数据窗口的样式。

例如,可以设置列的显示格式、颜色和字体等属性,还可以通过事件来实现数据窗口的验证和计算逻辑。

4.使用数据窗口的分组功能:数据窗口的分组功能可以将数据按照指定的列进行分组,并对每个分组进行汇总计算。

这样可以方便地进行数据的统计和报表生成。

5.使用数据窗口的嵌套功能:数据窗口可以嵌套在其他数据窗口中,形成复杂的数据结构。

通过使用数据窗口的嵌套功能,可以实现多层次的数据展示和操作,提高用户体验和数据处理的灵活性。

6.使用数据窗口的插入和更新语句:数据窗口可以使用自动生成的插入和更新SQL语句来实现数据的插入和修改操作。

这样可以避免手动编写大量的SQL语句,简化开发过程。

7.使用数据窗口的事务处理:数据窗口的事务处理功能可以保证一系列的操作要么全部成功,要么全部失败。

可以通过使用数据窗口的事务处理功能来实现数据的批量插入和更新,提高数据处理的效率和数据的一致性。

PB 数据窗口高级( DataWindow)应用37个技巧

PB 数据窗口高级( DataWindow)应用37个技巧

PB 数据窗口高级( DataWindow) 37个技巧1. 使DataWindow列只能追加不能修改如何使DataWindow中的数据只能追加新记录而不能修改,利用Column 的Protect 属性可以很方便的做到这一点,方法如下:将每一列的Protect 属性设置为:If( IsRowNew(), 0, 1) )在PowerScript 中可以动态修改Protect 属性:dw_1.Modify("column_name_here.Protect='1~tIf(IsRowNew(),0,1)'")这样,DataWindow 中只有新追加的记录可修改,而其他记录是只读的。

2 .如何在DataWindow中实现列的自动折行我们在PowerBuilder应用程序的开发过程中, 使用DataWindow时, 经常会遇到某列的数据太长, 不能同时全部显示的情况. 若采用自动水平滚动, 操作起来又不够简便. 下面介绍一种方法, 实现列数据多行显示, 即实现列数据的自动折行.具体步骤如下:1) 在DataWindow Painter中打开此DataWindow.2) 在需设定自动折行的列上双击鼠标, 弹开此列的属性窗口.3) 选择Position标签, 选中Autosize Height 多选框.4) 选择Edit标签, 不选中Auto Horz Scroll多选框.5) 单击OK按钮, 保存所做的修改.6) 点中Detail Band (即写有Detail的灰色长带), 单击鼠标右键, 选择Properties... 菜单项.7) 选中Autosize Height多选框.8) 单击OK按钮, 保存所做的修改.9) 保存此DataWindow.注意:连在一起的汉字(中间没有标点或空格分隔), 系统将认为是一个单词, 不会自动进行折行.3. 在数据窗口中实现动画要实现动画,必须要有定时器,在数据窗口中已经有了一个定时器,双击数据窗口将弹出的对话框,在Timer Interval中定义大于零的值就有定时器(可以精确到毫秒),有了这个定时器就可以实现动画了。

pb手势操作

pb手势操作
手势 1:划屏解锁 从边框向屏幕划动超过 2/3 即可,如图中任一箭头划动手势 Leabharlann :缩小程序从底框向屏幕划动
手势 3:关闭已缩小的程序
手势 4:在任意程序调出虚拟键盘
如图,从左下角向右上划动
手势 5:任意程序中,调出 pb 设置栏
除了主屏幕,在任何软件运行中,在右上角或者左上角斜向下滑动,可以调出主屏幕中上边条。
手势 6:调出程序的设置栏
上边框向下划动
手势 7:安卓中的返回操作
斜向上的箭头方向,离底框近一点,就行了
手势 8:多个程序间切换
手势 9:基本的放大、缩小

PB的小技巧

PB的小技巧

PB的小技巧1.如何使DataWindow中的数据只能追加新记录而不能修改。

利用Column 的Protect 属性可以很方便的做到这一点,方法如下:将每一列的Protect 属性设置为:If( IsRowNew(), 0, 1) )在PowerScript 中可以动态修改Protect 属性:dw_1.Modify("column_name_here.Protect='1~tIf(IsRowNew(),0,1)'")2. 允许从空的非字符字段跳离string ss = this.dwDescribe(this.GetColumnName()+".coltype")//s = this.dwDescribe("#"+String(this.GetColumn())+".coltype")CHOOSE CASE sCASE "number"IF Trim(this.GetText()) = "" THENint null_numSetNull(null_num)this.SetItem(this.GetRow(),this.GetColumn(),null_num)this.SetActionCode(3)END IFCASE "date"IF Trim(this.GetText()) = "" THENdate null_dateSetNull(null_date)this.SetItem(this.GetRow(),this.GetColumn(),null_date)this.SetActionCode(3)END IFCASE "time"IF Trim(this.GetText()) = "" THENtime null_timeSetNull(null_time)this.SetItem(this.GetRow(),this.GetColumn(),null_time)this.SetActionCode(3)END IFCASE "datetime"IF Trim(this.GetText()) = "" THENdate null_datetimeSetNull(null_datetime)this.SetItem(this.GetRow(),this.GetColumn(),null_datetime)this.SetActionCode(3)END IFEND CHOOSE3. 当我们为Datawindow的每一行显示行号时可以简单的放一个表达式为GetRow() -- 计算列。

pb的ddlb技巧

pb的ddlb技巧

pb的ddlb技巧在数据库管理中,DDL(数据定义语言)用于定义数据库的结构,其中包括创建、修改和删除数据库对象。

而PB(PowerBuilder)是一种集成开发环境,用于构建企业级应用程序。

在PB中操作数据库时,可以使用DDL语句来创建、修改和删除数据库对象。

以下是一些PB中使用DDL的技巧:1. 创建表:在PB中,可以使用CREATE TABLE语句来创建数据库表。

可以指定表的名称、列的数据类型、约束等信息。

例如:CREATE TABLE employee (。

emp_id INT PRIMARY KEY,。

emp_name VARCHAR(50),。

emp_salary DECIMAL(10,2)。

);2. 修改表:如果需要修改已存在的表结构,可以使用ALTER TABLE语句。

例如,添加新的列或修改列的数据类型:ALTER TABLE employee.ADD emp_department VARCHAR(50);3. 删除表:如果需要删除已存在的表,可以使用DROP TABLE 语句。

例如:DROP TABLE employee;4. 创建索引:在PB中,可以使用CREATE INDEX语句来创建索引,以提高查询性能。

例如:CREATE INDEX idx_emp_name ON employee (emp_name);5. 删除索引:如果不再需要某个索引,可以使用DROP INDEX 语句来删除它。

例如:DROP INDEX idx_emp_name ON employee;6. 使用事务,在执行DDL语句时,建议使用事务来确保数据的一致性。

可以使用BEGIN TRANSACTION和COMMIT TRANSACTION语句来控制事务的范围。

7. 错误处理,在执行DDL语句时,需要考虑可能出现的错误情况。

可以使用TRY...CATCH块来捕获并处理异常情况,以确保程序的稳定性。

总之,在PB中使用DDL语句需要谨慎对待,确保在操作数据库结构时不会造成数据丢失或不一致。

PB中一些技巧

PB中一些技巧

PB中一些技巧PB中一些技巧11.RGB函数计算公式: 颜色值= (65536 * Blue) + (256 * Green) + (Red)2.控件可拖动:send(handle(this),274,61458,0)3.如何用程序控制下拉子数据窗口的下拉和收起用modify或者直接用dw_1.object.col1.dddw.showlist = true4.检索参数有些不需要传入则传%.5.如何屏蔽鼠标滚轮触发在控件的other事件写if message.number = 522 then return 16.得到数据窗口的语法:string ls_dwsyntaxls_dwsyntax=dw_1.describe("datawindow.syntax")7.得到数据窗口中各列及标题:long ll_count,istring ls_value,ls_colnamell_colnum = Long(dw_1.object.datawindow.column.count)for i = 1 to ll_colnum//得到标题头的名字ls_colname = dw_1.describe('#' + string(i) + ".name") + "_t"ls_value = dw_1.describe(ls_colname + ".text")next8.在程序中动态设置初始值:ex:dw_contro.object.columnName.initial = 'xxxx'9.如何在DataWindow的SQL语法中不使用SELECT DISTINCT 实现删除重复的行---- 起先对你要显示唯一值的列进行排序:"city A",然后增加如下过滤字符串:" city < > city [-1] or GetRow () = 1"10.如何改变列的字体颜色,提醒用户此列已做修改---- 在列的Color属性中,输入如下表达式IF (column_name < >column_name.Original, RGB(255, 0, 0), RGB(0, 0, 0))。

PB数据窗口技巧大全

PB数据窗口技巧大全

PB数据窗口技巧大全PB数据窗口是PowerBuilder语言中的一种常用控件,用于显示和操作数据。

在实际项目开发中,掌握一些PB数据窗口的技巧能够提高开发效率和用户体验。

下面是一些常用的PB数据窗口技巧的详细介绍,包括动态数据源、处理数据更新、格式化数据、控制数据窗口行为等方面。

1. 动态数据源:PB数据窗口支持通过修改SQL语句和参数实现动态查询。

可以通过修改dw_1.sqlsyntax和dw_1.settransobject等属性实现动态数据源切换或过滤。

2. 处理数据更新:PB数据窗口提供了一些方法来处理数据的插入、更新和删除。

可以使用dw_1.insertrow、dw_1.updaterow和dw_1.deleterow等方法来实现数据的增删改操作。

3. 格式化数据:PB数据窗口提供了一些格式化数据的方法,可以通过修改数据窗口列的format属性来实现对数据的格式化。

例如,可以使用dw_1.modify表示列的format属性来自定义数据的显示格式。

4. 排序和过滤数据:PB数据窗口提供了排序和过滤数据的功能。

可以通过修改dw_1.setsort和dw_1.setfilter等方法实现对数据的排序和过滤。

5. 控制数据窗口行为:PB数据窗口提供了一些属性和方法来控制数据窗口的显示效果。

例如,可以使用dw_1.retrieve来重新检索数据,使用dw_1.setitemstatus来设置数据窗口的状态等。

6.多表连接查询:PB数据窗口支持多表连接查询,可以通过在SQL 语句中使用连接符号和条件来实现多表连接查询的功能。

7.数据窗口插入计算列:PB数据窗口支持插入计算列,可以通过在SQL语句中使用函数和表达式来插入计算列实现对数据的计算和处理。

8.数据窗口多级分组:PB数据窗口支持多级分组,可以通过在数据窗口中设置分组列和聚合函数来实现数据的分组和统计。

9.数据窗口嵌套:PB数据窗口支持嵌套,可以在一个数据窗口中插入另一个数据窗口,实现数据的嵌套显示和处理。

pb常用操作技巧

pb常用操作技巧

这是刚毕业时在某一“大”公司使用PB6.5开发联通营帐系统时的笔记虽然好久没有也许以后也不会再使用pb开发程序了但这算是我使用过的唯一一个前端专业开发工具把笔记记录下来权当作纪念吧_ //PB中标准调用sql语句ls_sql quotselectroad_name from bb_data_wide_bus_temp_t where register_number quotls_register_number quotquot declare cur_get dynamic cursor for sqlsa prepare sqlsa from :ls_sql open dynamic cur_get fetch cur_get into :ls_value if sqlca.sqlcode ltgt 0 then messagebox操作信息提取失败exclamation end if close cur_get //PB中标准循环调用sql语句DECLARE cur_sql DYNAMIC CURSOR FOR SQLSA PREPARE SQLSA FROM :ls_sql OPEN DYNAMIC cur_sql do while sqlca.sqlcode 0 FETCH cur_sql INTO :ls_register_number:ls_complete_note ll_sqlcode sqlca.sqlcode if ll_sqlcode lt 0 then CLOSE cur_sql af_disconnect messagebox错误提示检索受理编号错误StopSign return elseif ll_sqlcode 100 then exit end ifddlb_register_number.additemtrimls_register_number ls_complete_note loop CLOSE cur_sql //窗口open事件通用脚本//置窗口居中af_center_windowthis //连接数据库af_connect //定义变量dataWindowChild dwc //获取城市代码下拉列表并取值dw_city_code.getChildcity_codedwc dwc.setTransObjectsqlcadwc.Retrievegs_citycodegi_citylevel dw_city_code.setTransObjectsqlcadw_city_code.Retrieve dw_city_code.setItem1city_codedwc.getItemString1city_codeis_city_code dw_city_code.getItemStringdw_city_code.getRowcity_code //获取业务类型下拉列表并取值dw_service_kind.getChildservice_kinddwcdwc.setTransObjectsqlca dwc.Retrieve dw_service_kind.setTransObjectsqlcadw_service_kind.Retrieve dw_service_kind.setItem1service_kind10 ii_service_kinddw_service_kind.getItemNumberdw_service_kind.getRowservice_kind //获取申请事项下拉列表并取值dw_apply_event.getChildapply_eventdwc dwc.setTransObjectsqlca dwc.Retrieveii_service_kind dw_apply_event.setTransObjectsqlcadw_apply_event.Retrievedw_apply_event.setItem1apply_eventdwc.getItemNumber1apply_event ii_apply_event dw_apply_event.getItemNumberdw_apply_event.getRowapply_event //激发查询事件cb_query.TriggerEventclicked //断开数据库af_disconnect //查询按钮通用脚本//连接数据库af_connect //定义变量dataWindowChild dwc //dw_1检索数据dw_1.setTransObjectsqlca dw_1.Retrieveii_service_kind //dw_2检索数据intli_rowli_row_temp dw_2.getChildactiondwc dwc.setTransObjectsqlcadwc.Retrieveii_service_kind dw_2.setRowFocusIndicatorhand dw_2.setTransObjectsqlca li_row_temp dw_2.Retrieveii_apply_eventii_service_kindis_city_codedw_2.scrollToRowli_row_temp //如果未检索到数据插入一空行有数据就过滤string ls_filter int li_action if li_row_temp 0 then dw_2.insertRow0 else for li_row 1 todw_2.rowCount li_action dw_2.getItemNumberli_rowaction ls_filter action ltgt stringli_action dw_1.setFilterls_filter dw_1.filter next end if //断开数据库af_disconnect //增加按钮通用脚本//变量定义int li_stepli_actionli_auto_statusli_row //确认选择要增加的记录if dw_1.getSelectedRow0 0 then MessageBox提示信息请选择要添加的记录exclamation return end if //取出要增加的信息li_stepdw_2.getItemNumberdw_2.getRowstep li_actiondw_1.getItemNumberdw_1.getSelectedRow0action li_auto_statusdw_1.getItemNumberdw_1.getSelectedRow0auto_status //添加信息li_rowdw_2.insertRow0 dw_2.setItemli_rowstepli_step dw_2.setItemli_rowactionli_actiondw_2.setItemli_rowauto_statusli_auto_status dw_2.scrollToRowli_row //删除按钮通用脚本//删除前先确认IF dw_2.GetRow 0 THEN MessageBox提示信息请选择要删除的记录exclamation Return ELSE IF MessageBoxquot提示信息quotquot确实要删除指定的记录quotQuestionYesNo2 2 THEN Return dw_2.DeleteRowdw_2.getRow END IF //保存按钮通用脚本//连接数据库af_connect //定义变量stringls_city_codels_error int li_service_kindli_apply_eventli_rowli_step dataWindowChild dwc //检测数据是否发生变化dw_2.AcceptText IF dw_2.ModifiedCountdw_2.DeletedCount 0 THEN MessageBoxquot操作提示quotquot数据未发生变化无需保存quotexclamation return END IF //检测是否为空或零dw_2.setSortstep adw_2.sort FOR li_row 1 TO dw_2.RowCount li_stepdw_2.GetItemNumberli_rowstep IF IsNullli_step OR li_step 0 THEN MessageBox操作提示步骤不能为空或零请重新输入exclamation dw_2.setRowli_row Return END IF NEXT //保存dw_2.SetTransObjectsqlca if dw_2.update 1 then commit messageboxquot提示信息quotquot保存成功quot dw_2.ScrollToRowdw_2.RowCount else ls_error sqlca.sqlErrText rollback messageboxquot提示信息quotquot保存失败quot char13 ls_errorstopSign return end if //断开数据库af_disconnect //打印按钮通用脚本if dw_1.rowCount gt 0 then if PrintSetup -1 then messagebox提示信息打印机设置出错Exclamation return else if dw_1.printtrue 1 then //显示可以取消打印的对话框Messagebox提示信息quot打印成功quot else Messagebox提示信息quot打印失败quotstopSign end if end if else Messagebox提示信息quot没有数据可以打印请先查询数据quotexclamation return end if //导出按钮通用脚本if dw_1.rowcount lt 0 then messageBox提示信息没有数据可以导出请先查询exclamation return end if ifdw_1.SaveAStexttrue 1 then messageBox提示信息导出成功end if //导入按钮通用脚本//变量定义string ls_pathfilels_filels_titlels_extls_filter int li_posli_fileid longll_buffer //变量赋值ls_title quot请选择数据文件quot ls_ext quottxtquot ls_filter quot文本文件.txt.txt全部文件..quot li_fileidGetFileOpenNamels_titlels_pathfilels_filels_extls_filter ifli_fileid 0 or ls_file quotquot then return end if sle_file_name.text ls_pathfile cb_ok.enabled true //退出按钮通用脚本closeparent 或closeWithReturnparentreturnvalue //调用过程通用脚本if dw_wp.rowcount lt 0 then return //变量定义string ls_sqlls_err_info stringls_register_numberls_accept_cityls_departmentls_oper_person integerli_err_codeli_apply_event //变量赋值ls_register_numberdw_wp.getitemstring1register_number ls_accept_city gs_citycode li_apply_eventdw_wp.getitemnumber1apply_event ls_department gl_dealerid ls_oper_persongs_workerid //连接数据库af_connect //调用配号撤单过程ls_sql quotexecutebb_pstn_assign_no_repeal_pquot declare proc_assign_no_repeal dynamic cursor for sqlsa prepare sqlsa from :ls_sql open dynamic proc_assign_no_repealusing :ls_register_number:ls_accept_city:li_apply_event:ls_department:ls_oper_person if sqlca.sqlcode -1 then ls_err_info sqlca.sqlErrText close proc_assign_no_repeal Rollback Messageboxquot错误信息1quotquot执行异常quot ls_err_infostopSignaf_disconnect return End if fetch proc_assign_no_repeal into :li_err_code:ls_err_info if li_err_code lt 0 then close proc_assign_no_repeal Rollback Messageboxquot错误信息2quotquot执行异常quot ls_err_infostopSign af_disconnect return end if closeproc_assign_no_repeal commit //断开数据库af_disconnect //撤单成功后打印工单dw_wp.print //PB某些控件的中文显示问题假如PB 的ListView 不能正常显示中文则应该将ListView 的FontCharSet 属性设置成其他类型。

pb技巧八则

pb技巧八则

设置完毕后在左下角预览窗口中将显示图例的结果。
在进行列自动折行显示的时候,还要注意一点,系统判断自动折行的断点是以空格或标点符号为依据的,如果我们输入一长串字符且中间没有任何标点符号或空隔的话,即使该字符串再长也无济于事。因此,我们一定要提醒用户在录入时适当的加入一些空格或回车。
本文介绍的方法和技巧都是笔者在实践中的一点积累,在此拿出来与大家一起分享。希望在阅读本文后会对您有所帮助或启发。文中如有任何不足之处还望同行们给予指教。在此,我先道声谢。
一、实现运行窗口居中
众所周知,PowerBuilder 7.0在以前的版本中提供了图形化的预览工具,可以很方便的在设计阶段实现窗口居中。但是,到了7.0似
2、在它的表达式栏中写上“ '(' + PC + ' )' + Province + City + Address ”
3、单击确定完成。
很容易是不是。需要提醒大家的是,计算域只能用来显示,不能对它进行修改,因为它没有TAB属性,不能得到焦点。
三、数据窗口中的条码显示
在数据窗口中显示条码是不是很神秘?这对于没有接触过条码的人来说也许是这样。其实,它简单的不能再简单了。别忘了我们在写文稿时是如何使文稿看上去更有艺术化。没错我们会给它用上各种字体。问题不就解决了吗?条码也是种字体,只不过我们看不懂罢了。我们只要将需要用条码显示的字段的字体换上相应的条码字体就行了,比如,常用的3 of 9条码字
str_MyTime.iYear = 2000 // 2000年
str_MyTime.imonth = 8 / /8月
str_MyTime.iDay = 10 // 10日

PB 数据窗口高级( DataWindow)应用37个技巧

PB 数据窗口高级( DataWindow)应用37个技巧

PB 数据窗口高级( DataWindow) 37个技巧1. 使DataWindow列只能追加不能修改如何使DataWindow中的数据只能追加新记录而不能修改,利用Column 的Protect 属性可以很方便的做到这一点,方法如下:将每一列的Protect 属性设置为:If( IsRowNew(), 0, 1) )在PowerScript 中可以动态修改Protect 属性:dw_1.Modify("column_name_here.Protect='1~tIf(IsRowNew(),0,1)'")这样,DataWindow 中只有新追加的记录可修改,而其他记录是只读的。

2 .如何在DataWindow中实现列的自动折行我们在PowerBuilder应用程序的开发过程中, 使用DataWindow时, 经常会遇到某列的数据太长, 不能同时全部显示的情况. 若采用自动水平滚动, 操作起来又不够简便. 下面介绍一种方法, 实现列数据多行显示, 即实现列数据的自动折行.具体步骤如下:1) 在DataWindow Painter中打开此DataWindow.2) 在需设定自动折行的列上双击鼠标, 弹开此列的属性窗口.3) 选择Position标签, 选中Autosize Height 多选框.4) 选择Edit标签, 不选中Auto Horz Scroll多选框.5) 单击OK按钮, 保存所做的修改.6) 点中Detail Band (即写有Detail的灰色长带), 单击鼠标右键, 选择Properties... 菜单项.7) 选中Autosize Height多选框.8) 单击OK按钮, 保存所做的修改.9) 保存此DataWindow.注意:连在一起的汉字(中间没有标点或空格分隔), 系统将认为是一个单词, 不会自动进行折行.3. 在数据窗口中实现动画要实现动画,必须要有定时器,在数据窗口中已经有了一个定时器,双击数据窗口将弹出的对话框,在Timer Interval中定义大于零的值就有定时器(可以精确到毫秒),有了这个定时器就可以实现动画了。

PB数据窗口技巧问答

PB数据窗口技巧问答

PB数据窗口技巧问答一、控制数据窗口的显示方式1.使用数据窗口的打开方式:数据窗口可以在工具栏上选择打开方式,如:只读、可更新、可插入等。

3.使用数据窗口对象属性:在对象属性中设置数据窗口的显示方式,如设置为只读或可更新。

二、使用过滤器1. 使用过滤器自动过滤:在PowerBuilder中,可以通过在数据窗口对象的过滤器属性中设置过滤条件,自动过滤查询结果。

2.使用过滤器窗口:在运行时,可以使用过滤器窗口手动设置过滤条件,实时过滤查询结果。

三、使用计算列1.创建计算列:计算列用于在数据窗口中显示计算结果。

可以通过在数据窗口对象的计算列属性中设置计算表达式来创建计算列。

2. 使用计算列函数:PowerBuilder提供了一系列的计算列函数,可以通过在计算列属性中设置函数来实现复杂的计算操作。

四、使用排序功能1.使用数据窗口控制台进行排序:在数据窗口控制台中,可以使用排序按钮对查询结果进行排序。

2.使用数据窗口对象属性进行排序:在数据窗口对象的排序属性中设置排序条件,可以在运行时自动对查询结果进行排序。

五、使用数据窗口查询功能1.使用查询按钮:在数据窗口中添加查询按钮,可以方便用户执行查询操作。

2.使用自定义查询功能:可以在数据窗口对象的SQL属性中设置自定义查询语句,从而实现更高级的查询操作。

七、使用导航功能1.使用导航按钮:在数据窗口中添加导航按钮,可以方便用户浏览查询结果。

2. 使用导航函数:PowerBuilder提供了一系列的导航函数,可以通过调用这些函数实现数据的导航操作。

八、使用图形功能1.添加图形控件:可以在数据窗口中添加图形控件,用于显示图形数据。

2. 使用图形函数:PowerBuilder提供了一系列的图形函数,可以通过调用这些函数实现图形数据的处理和显示。

九、使用数据窗口布局功能1.使用数据窗口布局:可以在数据窗口对象的布局属性中设置布局方式,实现不同的显示效果。

2.使用数据窗口常规属性:在常规属性中,可以设置数据窗口的大小、位置、标题等。

60个PB数据窗口技巧

60个PB数据窗口技巧

60个PB数据窗口技巧数据窗口是一种用于展示数据的工具,它可以帮助用户更好地理解和分析数据。

下面是60个PB数据窗口技巧,帮助您更高效地使用数据窗口。

1.在数据窗口左下角的栏中输入关键词,可以快速筛选显示您所需的数据。

2.使用鼠标右键单击数据窗口的列头,可以自定义列的显示与隐藏。

3.在数据窗口的列头拖动可以更改列的顺序和宽度。

4.在数据窗口的列头双击,可以按该列进行排序。

5. 使用Ctrl键与鼠标左键选择多列,可以同时对这些列进行操作。

6.点击数据窗口的行头,可以选择整行。

7. 使用Shift键与鼠标左键选择多行,可以同时对这些行进行操作。

8.双击数据窗口的行头,可以自动调整该行的高度,使其适应内容。

9.在数据窗口的列头右键单击,可以进行更多的列操作,如冻结列、设置列格式等。

10. 使用Ctrl+Enter键,可以在当前单元格中插入换行符。

11. 使用Ctrl+D键,可以复制当前单元格的内容到下一个单元格。

12.在数据窗口的列头左键单击,可以选择一整列。

13. 使用Ctrl+Shift键与鼠标左键选择多个非连续的列。

14.在数据窗口的列头上方的空白区域右键单击,可以选择整个数据窗口。

15.在数据窗口左上角的复选框,可以选择或取消选择整个数据窗口。

16. 使用Ctrl+C键,可以复制选中的单元格或整行到剪贴板。

17. 使用Ctrl+V键,可以粘贴剪贴板中的内容到当前单元格或行。

18. 使用Shift+Enter键,可以在当前单元格下方插入一行。

19. 使用Ctrl+K键,可以在当前单元格中插入一个链接。

20. 使用Ctrl+Space键,可以选择整列。

21. 使用Shift+Space键,可以选择整行。

22.在数据窗口的列头右键单击,可以选择“筛选”,进行高级筛选操作。

23.在数据窗口的列头右键单击,可以选择“合并”,将相邻的相同内容的单元格合并为一个。

24.在数据窗口的列头右键单击,可以选择“拆分”,将合并的单元格拆分回原来的单元格。

pb精彩技巧

pb精彩技巧

PB应用技巧1、需要打印发票,但每页的行数是固定的,怎么办?第一步:增加一个计算列,此计算列必须放在Detail段,Expression中输入:ceiling(getrow()/20) <--这里20还可以用全局函数取代,这样可以允许用户任意设置每页打印多少行。

第二步:定义分组,选择菜单Rows->Create Group...按计算列字段分组,并一定将check box-->New Page On Group Break选中。

第三步:将此计算列设为不可视。

另外,如果需要最后一页不足补空行。

也很简单,如下:long ll_pagerow = 6 //每页打印行数long ll_count, ll_rowll_count = dw_report.retrieve(...) //取得现有报表的总行数ll_count = ll_pagerow - mod(ll_count, ll_pagerow)If ll_count < ll_pagerow Thenfor ll_row = 1 to ll_countdw_print.insertrow(0) //补足空行nextend If2、我想在表格型的Datawindow上放标题,但总是不成功?在国内企业的报表表现形式通常以表格居多,PowerBuilder提供了表格风格的DataWindow,但打印表头需要稍稍下一点功夫。

第一步:先放一个Text(文本框)对象到DataWindow的表头上,在此Text上点击鼠标右键选择Properties->Postion->layer,将layer改为Foreground,这样你就可以改变Text的位置和宽度,然后将此Text的内容改为正确的报表标题即可,注意还需要将此Text的背景改为非透明色,否则会看到表线。

第二步:按第一步做完以后,当用户拖动Column改变宽度时,Text框是不会自动变化大小,可以有两种方法处理此问题。

PB技巧大全

PB技巧大全

收集PB使用中的一些资料及技巧,请大家共同收集![转]自定义事件ID含义:Event ID 含义内容浅析单选或多选按钮消息(前缀:pbm_bm)pbm_bmgetcheck 单选按钮或多选按钮是否被选。

pbm_bmgetstate 按钮是否加亮。

pbm_bmsetcheck 将无线按钮或确认框的选中状态改为未选中状态,反之亦然。

pbm_bmsetstate 加亮或不加亮按钮。

pbm_bmchange 改变按钮的风格,例如,改为单选按钮或组合框。

单选或多选按钮通知消息(前缀:pbm_bn)pbm_bnclicked 按钮控件被点中。

pbm_bndisable 使按钮控件无效。

pbm_bndoubleclicked 按钮控件被双点。

pbm_bndragdrop 一个对象被放到按钮控件。

pbm_bndragenter 一个对象被拖到按钮控件。

pbm_bndragleave 一个对象被拖离按钮控件。

pbm_bndragover 一个对象被拖经按钮控件。

pbm_bnhilite 按钮控件被加亮。

pbm_bnpaint 按钮控件被绘制。

pbm_bnsetfocus 按钮控件获得聚焦。

pbm_bnunhilite 按钮控件不被加亮。

通用对话框消息(前缀:pbm_cb)pbm_cbaddstring 将字符串加到通用对话框。

pbm_cbdeletestring 从通用对话框删除一个字符串。

pbm_cbdir 加一个目录列表到通用对话框。

pbm_cbfindstring 搜索以一组字符开头的字符串。

pbm_cbfindstringexact 搜索与所提供的字符完全匹配的字符串。

pbm_cbgetcount 列表框中的项数。

pbm_cbgetcursel 当前被选项的数目。

pbm_cbgetdroppedcontrolset 列表框在屏幕上的坐标位置。

pbm_cbgeteditsel 编辑器控件中被选字符的范围。

pbm_cbgetextendedui 缺省或扩展的用户界面。

PB对excel的操作

PB对excel的操作

PB对excel的操作随着科技的发展,电子表格软件已经成为了工作和学习中不可或缺的工具。

而Excel作为最常用的电子表格软件之一,在个人和企业的日常操作中扮演着重要的角色。

本文将介绍PB(Peanut Butter)对Excel 的操作,包括基本操作、数据处理与分析、图表制作、公式运用等内容。

一、基本操作1. 打开与关闭工作簿PB可通过点击文件选项卡,选择“打开”命令来打开Excel工作簿。

在使用完成后,点击右上角的“关闭”按钮即可关闭工作簿。

2. 插入与删除工作表PB可在Excel中插入新的工作表,点击工作表选项卡后,在“工作表组”中选择“插入工作表”即可。

要删除工作表,PB只需选中要删除的工作表,然后点击右键选择“删除”。

3. 数据输入与编辑PB可将数据直接输入到单元格中,通过使用方向键或鼠标切换到需要编辑的单元格,然后键入相应的数据。

若需要编辑已有的数据,PB只需选中要编辑的单元格,然后直接键入新的数据。

二、数据处理与分析1. 数据筛选与排序PB可使用Excel提供的筛选功能,选择需要操作的数据范围,在“数据”选项卡中选择“筛选”按钮,然后根据需要进行筛选条件的设置。

对于数据排序,PB可通过选择需要排序的数据范围,在“数据”选项卡中选择“排序”按钮,按照指定的排序规则进行排序。

2. 数据透视表的制作PB需首先选中所要制作透视表的数据范围,然后在“插入”选项卡中点击“透视表”按钮。

在弹出的对话框中,PB可选择需要作为行、列和数据的字段,从而生成需要的透视表。

三、图表制作1. 制作柱状图PB需选中需要制作柱状图的数据范围,然后在“插入”选项卡中点击“柱状图”按钮。

在弹出的图表类型中,PB可选择适合的柱状图样式,并对图表效果进行调整。

2. 制作折线图PB需选中需要制作折线图的数据范围,然后在“插入”选项卡中点击“折线图”按钮。

在弹出的图表类型中,PB可选择适合的折线图样式,并进行必要的调整和编辑。

PB操作技巧

PB操作技巧

窗口与控件窗口与控件专题所涉及的范围比较广,如特殊功能控件的实现,友好漂亮界面的制作,这些都是PB程序员比较感兴趣的话题。

在PowerBuilder中,如果善于运用数据窗口与API技术,开发出的应用定将与众不同。

本章结合实例介绍如下专题:制作Splash窗口制作美观的状态条系统热键的实现创建图标栏应用MDI窗口显示背景图片定制有特色的图标按钮导航图界面的制作制作图文并茂的菜单窗口内控件大小与窗口大小同步动态创建控件控件融合技术窗口中控件显示ToolTips第章1PowerBuilder 8.0进阶篇·2·owerBuilder 编程离不开窗口与控件,从某种程度上可以说,现在的可视化编程无非就是将各种控件垒加到窗口中,再加上编写的一些代码,就构成了一个应用程序。

因此可以这么理解:窗口与控件是可视化编程的基础。

PowerBuilder 8.0提供了类型丰富的窗口及控件,灵活使用它们可以为应用开发提供极大的方便。

很多人认为,PowerBuilder 在界面制作方面功能不是很强,很难制作出Delphi 那样的漂亮界面。

其实只要肯思考,善于利用数据窗口及API 等技术,PowerBuilder 一样可以制作出美观、友好的用户界面。

本章将结合实例介绍在PowerBuilder 中如何制作Splash 启动窗口、美观的状态条、图文并茂的菜单以及如何使用系统热键、创建图标栏、用MDI 窗口显示背景图片、定制按钮、制作导航图界面、使窗口内控件大小与窗口大小同步、动态创建控件、使用控件融合、用窗口中控件显示ToolTips 等实用技术。

1.1 制作Splash 窗口现在很多商业软件如PowerBuilder 、Word 、金山词霸等都会在程序启动时呈现一个Splash 窗口,窗口上有软件名称、版本、图标等相关信息或“正在加载,请稍候…”等提示信息,该窗口显示一段时间后会自动关闭。

如果在自己开发的系统中启动时也加上一个Splash 窗口,虽然不会改善程序性能,但会使应用程序添色不少。

pb常用操作技巧

pb常用操作技巧

这是刚毕业时在某一“大”公司使用PB6.5开发联通营帐系统时的笔记,虽然好久没有也许以后也不会再使用pb开发程序了,但这算是我使用过的唯一一个前端专业开发工具,把笔记记录下来,权当作纪念吧,^_^//PB中标准调用sql语句ls_sql = "select road_name from bb_data_wide_bus_temp_t whereregister_number = '" + ls_register_number + "'"declare cur_get dynamic cursor for sqlsa ;prepare sqlsa from :ls_sql ;open dynamic cur_get;fetch cur_get into :ls_value;if sqlca.sqlcode <> 0 thenmessagebox('操作信息','提取失败!',exclamation!)end ifclose cur_get;//PB中标准循环调用sql语句DECLARE cur_sql DYNAMIC CURSOR FOR SQLSA;PREPARE SQLSA FROM :ls_sql;OPEN DYNAMIC cur_sql;do while sqlca.sqlcode = 0FETCH cur_sql INTO :ls_register_number,:ls_complete_note;ll_sqlcode = sqlca.sqlcodeif ll_sqlcode < 0 thenCLOSE cur_sql;af_disconnect()messagebox('错误提示','检索受理编号错误!',StopSign!) returnelseif ll_sqlcode = 100 thenexitend ifddlb_register_number.additem(trim(ls_register_number + '|' + ls_complete_note))loopCLOSE cur_sql;//窗口open事件通用脚本//置窗口居中af_center_window(this)//连接数据库af_connect()//定义变量dataWindowChild dwc//获取城市代码下拉列表并取值dw_city_code.getChild('city_code',dwc)dwc.setTransObject(sqlca)dwc.Retrieve(gs_citycode,gi_citylevel)dw_city_code.setTransObject(sqlca)dw_city_code.Retrieve()dw_city_code.setItem(1,'city_code',dwc.getItemString(1,'city_code')) is_city_code =dw_city_code.getItemString(dw_city_code.getRow(),'city_code')//获取业务类型下拉列表并取值dw_service_kind.getChild('service_kind',dwc)dwc.setTransObject(sqlca)dwc.Retrieve()dw_service_kind.setTransObject(sqlca)dw_service_kind.Retrieve()dw_service_kind.setItem(1,'service_kind',10)ii_service_kind =dw_service_kind.getItemNumber(dw_service_kind.getRow(),'service_kind') //获取申请事项下拉列表并取值dw_apply_event.getChild('apply_event',dwc)dwc.setTransObject(sqlca)dwc.Retrieve(ii_service_kind)dw_apply_event.setTransObject(sqlca)dw_apply_event.Retrieve()dw_apply_event.setItem(1,'apply_event',dwc.getItemNumber(1,'apply_eve nt'))ii_apply_event =dw_apply_event.getItemNumber(dw_apply_event.getRow(),'apply_event')//激发查询事件cb_query.TriggerEvent(clicked!)//断开数据库af_disconnect()//查询按钮通用脚本//连接数据库af_connect()//定义变量dataWindowChild dwc//dw_1检索数据dw_1.setTransObject(sqlca)dw_1.Retrieve(ii_service_kind)//dw_2检索数据int li_row,li_row_tempdw_2.getChild('action',dwc)dwc.setTransObject(sqlca)dwc.Retrieve(ii_service_kind)dw_2.setRowFocusIndicator(hand!)dw_2.setTransObject(sqlca)li_row_temp =dw_2.Retrieve(ii_apply_event,ii_service_kind,is_city_code)dw_2.scrollToRow(li_row_temp)//如果未检索到数据插入一空行,有数据就过滤string ls_filterint li_actionif li_row_temp = 0 thendw_2.insertRow(0)elsefor li_row = 1 to dw_2.rowCount()li_action = dw_2.getItemNumber(li_row,'action') ls_filter = ' action <> ' + string(li_action)dw_1.setFilter(ls_filter)dw_1.filter()nextend if//断开数据库af_disconnect()//增加按钮通用脚本//变量定义int li_step,li_action,li_auto_status,li_row//确认选择要增加的记录if dw_1.getSelectedRow(0) = 0 thenMessageBox('提示信息','请选择要添加的记录!',exclamation!) returnend if//取出要增加的信息li_step = dw_2.getItemNumber(dw_2.getRow(),'step')li_action = dw_1.getItemNumber(dw_1.getSelectedRow(0),'action')li_auto_status =dw_1.getItemNumber(dw_1.getSelectedRow(0),'auto_status')//添加信息li_row = dw_2.insertRow(0)dw_2.setItem(li_row,'step',li_step)dw_2.setItem(li_row,'action',li_action)dw_2.setItem(li_row,'auto_status',li_auto_status)dw_2.scrollToRow(li_row)//删除按钮通用脚本//删除前先确认IF dw_2.GetRow() = 0 THENMessageBox('提示信息','请选择要删除的记录!',exclamation!) ReturnELSEIF MessageBox("提示信息","确实要删除指定的记录?",Question!,YesNo!,2) = 2 THEN Returndw_2.DeleteRow(dw_2.getRow())END IF//保存按钮通用脚本//连接数据库af_connect()//定义变量string ls_city_code,ls_errorint li_service_kind,li_apply_event,li_row,li_stepdataWindowChild dwc//检测数据是否发生变化dw_2.AcceptText()IF dw_2.ModifiedCount() + dw_2.DeletedCount() = 0 THENMessageBox("操作提示","数据未发生变化,无需保存!",exclamation!)returnEND IF//检测是否为空或零dw_2.setSort('step a')dw_2.sort()FOR li_row = 1 TO dw_2.RowCount()li_step = dw_2.GetItemNumber(li_row,'step')IF IsNull(li_step) OR li_step = 0 THENMessageBox('操作提示','步骤不能为空或零,请重新输入!',exclamation!)dw_2.setRow(li_row)ReturnEND IFNEXT//保存dw_2.SetTransObject(sqlca)if dw_2.update() = 1 thencommit;messagebox("提示信息","保存成功!")dw_2.ScrollToRow(dw_2.RowCount())elsels_error = sqlca.sqlErrTextrollback;messagebox("提示信息","保存失败!" + char(13) +ls_error,stopSign!)returnend if//断开数据库af_disconnect()//打印按钮通用脚本if dw_1.rowCount() > 0 thenif PrintSetup() = -1 thenmessagebox('提示信息','打印机设置出错!',Exclamation!)returnelseif dw_1.print(true) = 1 then //显示可以取消打印的对话框Messagebox('提示信息',"打印成功!")elseMessagebox('提示信息',"打印失败!",stopSign!) end ifend ifelseMessagebox('提示信息',"没有数据可以打印,请先查询数据!",exclamation!)returnend if//导出按钮通用脚本if dw_1.rowcount() <= 0 thenmessageBox('提示信息','没有数据可以导出,请先查询!',exclamation!)returnend ifif dw_1.SaveAS('',text!,true) = 1 thenmessageBox('提示信息','导出成功!')end if//导入按钮通用脚本//变量定义string ls_pathfile,ls_file,ls_title,ls_ext,ls_filterint li_pos,li_fileidlong ll_buffer//变量赋值ls_title = "请选择数据文件"ls_ext = "txt"ls_filter = "文本文件(*.txt),*.txt,全部文件(*.*),*.*"li_fileid =GetFileOpenName(ls_title,ls_pathfile,ls_file,ls_ext,ls_filter)if(li_fileid = 0 or ls_file = "") thenreturnend ifsle_file_name.text = ls_pathfilecb_ok.enabled = true//退出按钮通用脚本close(parent) 或 closeWithReturn(parent,returnvalue)//调用过程通用脚本if dw_wp.rowcount() <= 0 then return//变量定义string ls_sql,ls_err_infostring ls_register_number,ls_accept_city,ls_department,ls_op er_personinteger li_err_code,li_apply_event//变量赋值ls_register_number = dw_wp.getitemstring(1,'register_number')ls_accept_city = gs_citycodeli_apply_event = dw_wp.getitemnumber(1,'apply_event')ls_department = gl_dealeridls_oper_person = gs_workerid//连接数据库af_connect()//调用配号撤单过程ls_sql = "execute bb_pstn_assign_no_repeal_p(?,?,?,?,?)"declare proc_assign_no_repeal dynamic cursor for sqlsa ;prepare sqlsa from :ls_sql ;open dynamic proc_assign_no_repealusing :ls_register_number,:ls_accept_city,:li_apply_event,:ls_departm ent,:ls_oper_person;if sqlca.sqlcode = -1 thenls_err_info = sqlca.sqlErrTextclose proc_assign_no_repeal ;Rollback;Messagebox("错误信息1","执行异常!" + ls_err_info,stopSign!) af_disconnect()returnEnd iffetch proc_assign_no_repeal into :li_err_code,:ls_err_info;if li_err_code < 0 thenclose proc_assign_no_repeal ;Rollback;Messagebox("错误信息2","执行异常!" + ls_err_info,stopSign!) af_disconnect()returnend ifclose proc_assign_no_repeal ;commit ;//断开数据库af_disconnect()//撤单成功后打印工单dw_wp.print()//PB某些控件的中文显示问题假如 PB 的 ListView 不能正常显示中文,则应该将ListView 的 FontCharSet 属性设置成其他类型。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

窗口与控件窗口与控件专题所涉及的范围比较广,如特殊功能控件的实现,友好漂亮界面的制作,这些都是PB程序员比较感兴趣的话题。

在PowerBuilder中,如果善于运用数据窗口与API技术,开发出的应用定将与众不同。

本章结合实例介绍如下专题:制作Splash窗口制作美观的状态条系统热键的实现创建图标栏应用MDI窗口显示背景图片定制有特色的图标按钮导航图界面的制作制作图文并茂的菜单窗口内控件大小与窗口大小同步动态创建控件控件融合技术窗口中控件显示ToolTips第章1PowerBuilder 8.0进阶篇·2·owerBuilder 编程离不开窗口与控件,从某种程度上可以说,现在的可视化编程无非就是将各种控件垒加到窗口中,再加上编写的一些代码,就构成了一个应用程序。

因此可以这么理解:窗口与控件是可视化编程的基础。

PowerBuilder 8.0提供了类型丰富的窗口及控件,灵活使用它们可以为应用开发提供极大的方便。

很多人认为,PowerBuilder 在界面制作方面功能不是很强,很难制作出Delphi 那样的漂亮界面。

其实只要肯思考,善于利用数据窗口及API 等技术,PowerBuilder 一样可以制作出美观、友好的用户界面。

本章将结合实例介绍在PowerBuilder 中如何制作Splash 启动窗口、美观的状态条、图文并茂的菜单以及如何使用系统热键、创建图标栏、用MDI 窗口显示背景图片、定制按钮、制作导航图界面、使窗口内控件大小与窗口大小同步、动态创建控件、使用控件融合、用窗口中控件显示ToolTips 等实用技术。

1.1 制作Splash 窗口现在很多商业软件如PowerBuilder 、Word 、金山词霸等都会在程序启动时呈现一个Splash 窗口,窗口上有软件名称、版本、图标等相关信息或“正在加载,请稍候…”等提示信息,该窗口显示一段时间后会自动关闭。

如果在自己开发的系统中启动时也加上一个Splash 窗口,虽然不会改善程序性能,但会使应用程序添色不少。

下面介绍在PowerBuilder 中如何实现启动时的Splash 窗口。

实例创建步骤如下:(1) 创建Splash 窗口。

选择工具栏中的New 图标,弹出New 对话框,选择PB Object 标签页,再选择Window 新建一个窗口。

(2) 设置Splash 窗口的属性。

其中窗口类型设为Popup!,Visible 属性、Enabled 属性和Center (居中)属性设为True ,其他属性都设为False 。

属性设置如图1-1所示。

(3)在Splash 窗口放置相关控件以显示信息如图标、软件名称、版本和公司名称等,可根据软件需要加以选择。

最后以“w_Splash ”名称保存该窗口。

P图1-1 Splash 窗口属性设置=====================================================================窗口在5秒钟后接收到Timer事件,关闭w_Splash窗口。

在w_Splash的Timer 事件中加入:Close(this)//关闭窗口在窗口的Close事件中关闭Timer事件:Timer(0,this)(5) 为了测试,另外创建一个菜单m_main和一个mdihelp!类型的窗口w_main,并将菜单m_main关联至w_main窗口。

w_main作为系统的主窗口。

(6) 调用Splash窗口。

程序启动时调用Splash窗口,并连接数据库,最后打开系统主窗口。

在Application的Open事件加入如下脚本:===================================================================== //调用Splash窗口Open(w_splash)//连接数据库// Profile EAS Demo DB V4SQLCA.DBMS = "ODBC"SQLCA.AutoCommit = FalseSQLCA.DBParm = "ConnectString='DSN=EAS Demo DB V4;UID=dba;PWD=sql'"Connect;If sqlca.sqlcode <> 0 thenMessagebox('连接数据库失败',sqlca.sqlerrtext)HaltElse//打开系统主窗口Open(w_main)End If=====================================================================1.2 制作美观的状态条一个程序的微帮助状态栏常用于显示该系统的一些重要信息或帮助信息,其重要性是PowerBuilder 8.0进阶篇·4·不言而喻的。

但PowerBuilder中的微帮助状态栏一直不尽如人意,单一并且不能定制,甚至连字体属性都不能修改,因此有必要自己创建状态栏,使之更加美观、漂亮。

下面通过实例给出两种定制状态条的方法。

1.2.1 利用Popup窗口这种方法的原理是利用一个Popup!类型的窗口来放置状态栏的有关信息,如操作员、系统时间等,并将此窗口显示在MDI窗口状态栏合适的位置。

这里给出一个在MDI窗口右下角实时显示系统时间的简单例子,运行效果如图1-2所示。

图1-2 状态栏右边显示系统时间实例创建步骤如下:(1) 创建一个Popup!类型的窗口w_popup_time,并将其Visible属性、Enabled属性设置为True,其他属性都设为False。

窗口大小、位置设置:X:0,Y:0,Width:230,Height:52。

(2) 在w_popup_time中放置两个控件:sle_time:单行编辑器,用于显示系统时间。

将Border的属性设为False,BorderStyle 设为StyleBox!。

st_1:静态文本框,用于分隔状态栏。

将Border的属性设为True,BorderStyle设为StyleRaised!。

(3) 在w_pouup_time窗口的如下事件中编写脚本。

Open事件===================================================================== //显示时间sle_time.text = string(now(),"hh:mm:ss")Timer (1)//设置分隔文本的大小、位置st_1.Move (5, 0)st_1.Resize (16, this.Height)========================================================================================================================================== //声明窗口w_Popup_Time iw_Popup_Time=====================================================================(5) 在w_main窗口的如下事件中编写脚本:Open事件===================================================================== long ll_wx,ll_wy,ll_wh,ll_wwll_wx = this.workspacex ( )ll_wy = this.workspacey ( )ll_wh = this.workspaceheight ( )ll_ww = this.workspacewidth ( )open(iw_popup_time)//设定位置iw_popup_time.move(ll_wx + ll_ww - iw_popup_time.width - 100 , &ll_wy + ll_wh - iw_popup_time.height - 6)===================================================================== Resize事件===================================================================== integer ll_wx ,ll_wy ,ll_wh ,ll_wwll_wx =this.workspacex ( )ll_wy =this.workspacey ( )ll_wh =this.workspaceheight ( )ll_ww =this.workspacewidth ( )//MDI窗口改变大小时,iw_popup_time的位置要随之改变if IsValid (iw_popup_time) theniw_popup_time.move(ll_wx +ll_ww - iw_popup_time.width - 100,&ll_wy +ll_wh - iw_popup_time.height - 6 ) end if=====================================================================PowerBuilder 8.0进阶篇·6·Ue_move事件(用户自定义事件,Event ID:pbm_move)MDI窗口移动时,iw_popup_time的位置要随之改变,并保持与MDI窗口的相对位置不变。

脚本同Resize事件。

1.2.2 利用窗口内控件利用窗口内控件制作状态条的原理很简单,就是在运行过程中保持该控件与窗口的相对位置不变,并把相关信息显示在该控件中。

本例利用数据窗口控件来显示状态栏信息。

(1) 创建一个Tabular风格,数据源为External的数据窗口d_status_bar。

各列定义参见表1-1。

表1-1 d_status_bar 定义(2) 为数据窗口对象d_status_bar增加位图及线条等控件,如图1-3所示。

这样做的目的是使定制的状态条更加美观。

图1-3 设计数据窗口d_status_bar其中,在sysdate字段的后面增加一个计算域week,用来根据日期显示星期。

计算域的表达式为:===================================================================== case( daynumber(sysdate ) when 1 then '星期天' when 2 then '星期一' when 3 then '星期二' when 4 then '星期三' when 5 then '星期四' when 6 then '星期五' when 7 then '星期六' else '')===================================================================== 计算域的文本字体(Text Color)设置为:case (daynumber(sysdate) when 1 then 255 when 7 then 255 else 0)Open事件===================================================================== //显示状态栏信息dw_status_bar.Insertrow(0)dw_status_bar.Setitem(1,'department', '部门:PowerBuilder编程俱乐部')dw_status_bar.Setitem(1, 'user',' 柜员:柯建勋' )dw_status_bar.Setitem(1, 'sysdate',now())//dw_status_bar.Setitem(1, 'other',' 其他信息' )dw_status_bar.Object.DataWindow.ReadOnly = True===================================================================== Resize事件===================================================================== integer li_height,li_width//状态栏li_height = this.workspaceHeight()li_width = this.workspaceWidth()mdi_1.x = this.workspacex()mdi_1.y = this.workspacey() - 4mdi_1.height = li_height - dw_status_bar.height + 8mdi_1.width = li_width//定位dw_status_bar.x = this.workspacex() - 4dw_status_bar.y = mdi_1.y + mdi_1.heightdw_status_bar.width = li_width + 4=====================================================================(6) 此状态条的运行效果如图1-4所示。

相关文档
最新文档