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常用操作技巧
这是刚毕业时在某一“大”公司使用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中下拉列表使用的若干技巧于红聂尚宇摘要对PB中下拉列表的使用方法进行了研究,并提出了几种使用下拉列表的实现方法,实践表明这些方法具有简单实用的特点。
关键词下拉列表;动态;控件;事件;Some Skills in the Use of DDLB of PBYu Hong Nie ShangyuDepartment of Electronic Engineering, DFUAbstract The use of DDLB in PB is studied and some skills are proposed. The results show that these skills are simple and practical.Key words DDLB; dynamic; control; event随着科学技术的不断发展,计算机已经应用于社会的各个领域,相应的管理软件的编制工作显得尤为重要。
现有的编程工具中,PowerBuilder 是数据库管理软件设计比较理想的工具,但如何合理地选用控件和灵活地使用每一个控件,以充分发挥PB的优势,是人们在编程过程中常遇到的难题。
作者对PB中的控件之一——下拉列表的使用[1]进行了研究,并提出几个灵活使用下拉列表的方法。
1 下拉列表及其相应的事件①下拉列表是在窗口中定义的一个控件,与之相应的事件如下表所示:件,还会触发Modified事件。
2 动态使用下拉列表传统的下拉列表使用是静态的,它在一定程度上满足了编程的需要,但是不能满足所有需要。
例如,有时希望下拉列表中的选项在程序运行过程中可以变化,这用静态下拉列表定义选项是不能实现的,这就促使人们去思考如何使用动态下拉列表。
有两种情况需要使用动态下拉列表。
1)下拉列表中的选项与数据库中某列的内容相关联②实际应用中,在对数据库表中的数据按名称进行查询时,为了减少输入量,可以将库中某列的内容(如单位名称)列在下拉列表中供用户选择,这样既可以保证选中的项目一定是库中的项目,而且不用输入汉字;又使下拉列表的使用具有一定的灵活性,动态下拉列表选项的确定必须在下拉列表被使用之前进行,可以在下拉列表所在窗口的Open事件中确定,也可以在下拉列表的Getfocus事件中确定,相应的script为string id,icint i-op=1declare c1 cursor forselect hotelid from hotelid-dangan using SQLCA;open c1;fetch c1 into: id;do while sqlca.sqlcode=0select p1602 into :ic from p16 where p1601=:id using sqlca;if finditem(ddlb-1,ic,1)=-1 thenddlb-1.insertitem(ic,+i-op)i-op=i-op+1end iffetch c1 into :id;loopclose c1;其中,下拉列表中的项目取自数据库表hotelid-dangan 的hotelid 列所对应的p16表中的p1602(即单位名称)。
PB经验总结4
2、在打印一个数据窗口时,如果在数据窗口中用函数PAGECOUNT()可以得取该数据窗口的打印页数,但该打印页数跟打印机实际的打印页数并不一样,如何能取得打印机实际的打印页数?3、在打印一个数据窗口时,如果在数据窗口中用函数PAGECOUNT()可以得取该数据窗口的打印页数,但该打印页数跟打印机实际的打印页数并不一样,如何能取得打印机实际的打印页数?4、PB + Sql Anywhere 应用程序,请问如何脱离开发环境运行?用户是否需要安装sqlanywhere?如何编写脚本配置ODBC数据源?请举一例好吗?谢谢!5、复杂报表另存为的技巧一例6、在程序中管理和控制MS SQLServer7、数据窗口中怎样实现旧的数据不可修改8、建立和配置web datawidnow9、建立一个通用的报表处理系统10、转换日期和时间11、比较日期和时间12、鼠标移到数据窗口上时所在行字段改变颜色一页?首先将datawindow的print输出到一个打印文件中,把其他的print也输入这个prn,然后,打印这个打印文件就行了。
如:datawindow_control1.object.datawindow.print.filename="c:\printfilepath\exam_1.prn" datawindow_control2.object.datawindow.print.filename="c:\printfilepath\exam_1.prn"dw_1.print()dw_2.print()run("print //d:\\printservename\sharename "c:\printfilepath\exam_1.prn")//d:\\printservename\sharename打印机名14、在打印一个数据窗口时,如果在数据窗口中用函数PAGECOUNT()可以得取该数据窗口的打印页数,但该打印页数跟打印机实际的打印页数并不一样,如何能取得打印机实际的打印页数?请先预览datawindowdw_1.Modify("DataWindow.Print.preview = true")再用pagecount()就是了。
pb 进度条用法
pb 进度条用法
1. 嘿,你知道 pb 进度条咋用吗?就好比你跑步的时候,进度条就像那计步器,能清楚告诉你跑了多少!比如说你下载个大文件,看着进度条慢慢往前挪,心里就有底啦!
2. pb 进度条用法可重要啦!这不就跟你爬山一样嘛,看着进度条就知道自己爬到哪儿啦!比如说玩游戏做任务,进度条显示 80%了,那你就知道快完成啦,兴奋不?
3. 哟,pb 进度条的用法你还不晓得啊?这就好像你搭积木,看着进度条一格一格填满多有成就感啊!比如视频加载的时候,盯着进度条走就不那么着急啦!
4. 哎呀呀,pb 进度条咋用可得搞清楚哇!这就跟走迷宫似的,进度条指引你找到出口呀!像等待快递配送,看着进度条你就知道离收到宝贝不远啦,期待吧?
5. 嘿呀,pb 进度条的用处大着呢!像你导航去一个地方,进度条就是告诉你走了多少路啦!比如软件更新的时候,看着它慢慢动,你会盼着赶紧完成呀!
6. 哇塞,pb 进度条的用法超简单的哟!就好像你数星星,看着一颗颗变多超有意思的!比如说做一个大项目,进度条能让你清楚每个阶段的进展呢,是不是超棒?
7. pb 进度条就是你的小助手呀!跟你数数一样,告诉你到哪个阶段啦!比
如文件传输时,盯着进度条你就知道还有多久完成啦,着急不着急呀?总之,学会用 pb 进度条,能让你对很多事情都心中有数呢!。
PB窗口使用技巧
[PB]-窗口使用技巧**在打开和关闭窗口时进行数据传递OpenWithParm(windowvar,parmeter{,parent})其中windowvar是要打开的窗口名称,可以是window画板中定义的窗口,也可以是脚本中定义的窗口变量;parameter是要传递的参数,只能是String,Numeric或者PowerObject类型,该参数根据类型保存在Message的成员变量中传递个要打开的窗口;parent是一个已经打开的窗口名称,该窗口要成为windowvar窗口的父窗口。
函数执行成功返回1,否则返回-1,如果有参数为null 则返回null。
对象Message是一个结构类型的全局变量,并有很多的成员变量。
在传递参数时三个成员变量用来读取传递的数据,它们是:Message.DoubleParm:用来传递Numeric类型的数据。
Message.PowerObjectParm:用来传递PowerObject对象类型的数据,象数据窗口、按键、列表框和拥护自定义的结构等都可以使用该变量进行传递。
Message.StringParm:用来传递String类型的数据。
当使用函数OpenWithParm打开窗口后,应该在进行其他操作之前首先读取传递过来的参数,以免其他操作修改Message中的成员变量。
CloseWithReturn(windowname,Returnvalue)其中,windowname是要关闭的窗口的名称,一般是脚本所在的窗口的名称;Returnvalue是要返回的数值,和上述函数OpenWithParm的完全相同。
函数正确执行返回1,否则返回-1,当有参数为null时则返回null。
*只要是response类型的窗口,使用该函数就能有效地传递参数;该窗口不一定非得是用OpenWithParm打开的。
在打开该response的窗口中可以读取传递过来的参数。
总之,使用CloseWithReturn函数时一定要注意,只有被关闭的窗口是response 类型才能有效地获取返回参数。
pb业务_精品文档
PB业务一、介绍PB业务,全名Product Backlog业务,是一种敏捷项目管理方法中的工具和技术之一。
PB业务主要用于对产品需求进行管理和优化,与Scrum框架中的Product Backlog紧密相关。
二、PB业务的作用PB业务的作用主要有以下几个方面:1. 需求管理PB业务通过建立和维护Product Backlog来管理产品需求。
Product Backlog是一个动态的需求列表,里面包含了所有产品需求的详细描述、优先级和估时等信息。
通过PB业务,团队成员可以清楚地了解产品需求的整体情况,帮助团队进行需求管理,及时调整和优化需求。
2. 优先级确定PB业务可以帮助团队确定需求的优先级。
在Product Backlog中,每个需求都有一个优先级,依据需求的重要性和紧急程度进行评估和排序。
通过这种方式,团队可以清楚地知道下一步要做的工作是什么,有助于优化团队的工作流程,提高工作效率。
3. 预估工作量PB业务也可以帮助团队对需求的工作量进行预估。
在Product Backlog中,每个需求都有一个估时,表示完成该需求所需要的时间。
通过对需求的估时,团队可以更好地安排工作计划,合理分配资源,避免工作量过载或者资源浪费的问题。
4. 迭代规划PB业务有助于团队进行迭代规划。
通过对Product Backlog中的需求进行优先级和工作量的评估,团队可以更好地确定迭代的目标和计划。
团队可以根据需求的优先级和工作量,选择适合的需求进行开发,合理安排迭代周期和资源,确保项目的顺利进行。
三、PB业务的流程PB业务的主要流程包括需求收集、需求整理、需求评估和需求排序等步骤。
1. 需求收集在需求收集阶段,团队成员与项目相关人员进行沟通,了解项目的需求和目标。
团队会记录下来所有收集到的需求,并将其记录在Product Backlog中。
2. 需求整理在需求整理阶段,团队会对收集到的需求进行整理和组织,将其转化为可执行的任务。
pb中很实用的小技巧
1.RGB函数计算公式: 颜色值= (65536 * Blue) + (256* Green) + (Red)2.控件可拖动:send(handle(t his),274,61458,0)3.如何用程序控制下拉子数据窗口的下拉和收起用modify或者直接用dw_1.o bject.col1.dddw.show list = true4.检索参数有些不需要传入则传%.5.如何屏蔽鼠标滚轮触发在控件的other事件写if message.number = 522 then return 16.得到数据窗口的语法:string ls_dwsyntaxls_dwsyntax=dw_1.describe("data window.syntax")7.得到数据窗口中各列及标题:long ll_count,istring ls_v alue,ls_colnamell_colnum = Long(dw_1.o bject.datawindow.col umn.count)for i =1 to ll_colnum//得到标题头的名字ls_colname = d w_1.describe('#' + s tring(i) + ".name")+ "_t"ls_value = dw_1.describe(ls_colna me + ".text")next8.在程序中动态设置初始值:ex:dw_contro.object.colum nName.initial = 'xxx x'9.如何在DataWindow的SQL语法中不使用SELECT DIST INCT实现删除重复的行---- 起先对你要显示唯一值的列进行排序:"cit y A",然后增加如下过滤字符串:" c ity < > city [-1] or GetRow () = 1"10.如何改变列的字体颜色,提醒用户此列已做修改---- 在列的Color属性中,输入如下表达式IF (column_na me< >column_name.Or iginal, RGB(255, 0,0), RGB(0, 0, 0))。
Pb设计应注意的问题
图片:图片:图片:请教:PB-design,最陡爬坡实验,CCD等中的响应面分析的相关问题请教:PB-design中的相关问题在实验设计的过程中,通过阅读文献了解到了很多的,但是同时也积累了很多问题解决不了,希望各位高手们指点一二不胜感激.1 在PB设计中出现的dummy variable的具体含义到底是什么?是对照组吗?如果不是应该遵循什么样的原则去设计呢?2 在PB中实验组数应该是变量数加1,那么在相关的文献中看到15个变量设计为:15+ 1+4,其中4是dummy variable,但是表格中这4个变量也是有高低水平的变化的,那么设计时是作为15个变量来考虑还是19个呢?3 想问问在最陡爬坡实验中,步长的选择有什么要求吗?纯经验还是有公式的?4 在设计CCD试验那的时候是否要包括全因子实验设计?5 什么是中轴点?各位高手帮帮忙啊,谢谢了小妹我也正在做这块试验,是培养基优化的刚做完单因素试验正在想下面该怎么设计呢?是PB?还是最陡爬坡?还是两个都要做??反正最后是要做响应面的~~希望大虾们多多多指点一下下……另外,关于PB,我也在想,是不是必须要做空白项的呢?那么空白项里面的+1,-1是没有具体的水平值的亚,那么在实验中具体该怎么操作呢??谢谢各位不吝指教了……我自己是怎么想的:单因子实验只是为了保险使PB实验的结果更加明显而进行的预实验,PB 实验本身就是有筛选单因子的功能,如果有把握是可以直接做PB的.而我的实验是先进行单因子,然后是PB,根据PB的实验分析数据做最陡爬坡实验,否则不能很好的确定爬坡的方向以及步长.最陡爬坡实验的步长的选择:根据前面PB实验的结果,做一阶方程的法线,法线方向就是爬坡方向,步长就根据回归系数和规范变量的比值在通过自然变量来换算,算到的结果在综合实际的情况就可以基本确定步长了这个是最近看文献理解到的一些,希望哪位高手指点一下dummy variable 不是对照组。
PB培训教程(提高篇)
PB培训教程(提高篇)一、引言随着我国经济的快速发展,企业对人才的需求日益增长,专业技能培训成为了提升员工素质的重要途径。
PB(PowerBuilder)作为一款优秀的客户端/服务器应用程序开发工具,具有强大的数据处理能力和灵活的界面设计功能,广泛应用于企业级应用开发。
为了帮助广大PB爱好者提高开发技能,本教程将从实战角度出发,详细讲解PB的高级应用技巧。
二、PB开发环境介绍1.PB简介PowerBuilder(简称PB)是美国Sybase公司推出的一款客户端/服务器应用程序开发工具。
它采用面向对象的编程思想,支持多种数据库,具有强大的数据处理能力和灵活的界面设计功能。
PB在我国的企业级应用开发领域具有广泛的应用。
2.PB开发环境搭建(1)安装PB开发工具:并安装PB开发工具,根据提示完成安装过程。
(2)配置数据库连接:安装并配置数据库软件(如Oracle、SQLServer等),建立数据库连接。
(3)创建PB项目:在PB开发环境中创建新项目,配置项目属性,为后续开发做好准备。
三、PB高级应用技巧1.数据窗口应用(1)数据窗口简介:数据窗口是PB中用于数据显示和编辑的重要组件,具有强大的数据处理能力。
(2)数据窗口设计:掌握数据窗口的设计方法,包括数据源设置、列属性设置、样式设置等。
(3)数据窗口事件处理:了解数据窗口的事件处理机制,掌握常见事件(如Click、DoubleClick等)的编写方法。
(4)数据窗口与数据库交互:学习如何使用数据窗口进行数据的增、删、改、查操作。
2.PB与Web技术结合(1)Web开发简介:了解Web开发的基本概念,掌握、CSS、JavaScript等基本技术。
(2)PBWeb应用程序:学习如何使用PBWeb应用程序,包括Web数据窗口的使用、Web事件处理等。
(3)PB与WebService交互:掌握PB调用WebService的方法,实现PB与WebService的数据交互。
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编程技巧五则
调用控制面板:
Run("rundll32.exe shell32.dll,Control_RunDLL")
注意:大小写
其他的控制举例如下:
设置时间/日期:
Run("rundll32.exe shell32.dll,Control_RunDLL timedate.cpl,,0")
进行拨号连接:
long hrgn
long lres
tagPOINT l_pointapi[]
l_pointapi[1].x = 173
l_pointapi[1].y = 112
l_pointapi[2].x = 412
l_pointapi[2].y = 66
l_pointapi[3].x = 478
(2)你可以设定returnvalue:0或1。
如果是在DataWindow上,可参考以下的方式:
在DataWindow宣告一userevent:
(1)如ue_enter,将EventID参考至pbm_dwnprocessenter;
(2)在ue_enter加入以下的程式码
FUNCTION ulong SetWindowRgn(ulong hWnd,ulong hRgn,boolean bRedraw) LIBRARY "user32.dll"
在窗口上定义
Structure
tagpoint
{ long x
long y}
在窗口的open事件中加上:
你将获得所传的参数key(按键代码)、keyflags(复合键代码),当所按的是Enter时,你就把焦点切换到下一元件或下一栏位。
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学习心得
PB编程实例点滴(4)- -| 回首页| 2005年索引| - -PB编程实例点滴(6) PB编程实例点滴(5)- -(41)把键盘中断送给控件[Function declaration]SUBROUTINE keybd_event( int bVk, int bScan, int dwFlags, int dwExtraInfo) & LIBRARY \"user32.dll\"[powerscript]li_vkey = 65 // the character \"A\"sle_1.setfocus() // the target controlkeybd_event( li_vkey, 1, 0, 0 )下面代码把BACKSPACE送给SingleLineEdit控件,并删除了上一个字符。
[powerscript]integer li_vkeyinteger ll_posll_pos = len(sle_1.Text) + 1sle_1.selectText(ll_pos,0) // set the cursor at the endli_vkey = asc(\"~b\") // backspacekeybd_event( li_vkey, 1, 0, 0 )(42)在一个控件使用“MOUSE-OVER”在本例中,使用一个静态文本控件。
当鼠标移在文本控件上时,控件的前景色为红色;当鼠标离开时,控件的前景色为黑色。
Suppose you have a static text on a Window. When the mouse is over it, the s tatic textforeground color change to red. When the mouse quit the static text, the for eground coloris black.[window mousemove event]// just to display somethingst_1.text = string(xpos) + \", \" + string(ypos)IF xpos >= st_1.X AND (xpos <= st_1.x + st_1.Width) AND &ypos >= st_1.y AND (ypos <= st_1.y + st_1.Height) THENst_1.textcolor = 255ELSEst_1.textcolor = 0END IF(43)查询临时目录变量如果在PB6以上,调用环境变量TEMP的值。
在学习和使用PB时候所进行的知识总结
在学习和使用PB时候所进行的知识总结******************dw1.processing:0:-group or form or tabular1:-grid2:-label3:-graph4:-crosstab*******************************8oracle9i和以上版本才支持case()用法,一般建议使用更方便的等效函数decode();1. caseSELECT UserID,(casewhen OperateType = 0then '新增'when OperateType=1then '修改'else '删除'end ) FROM LOG2.DECODE的写法:SELECT UserID,decode(OperateType,0,'新增',1,'修改','删除') OperationName FROM LOG************************//==PB获取主板BIOS ID信息//==适用系统: Win 9x//==作者Kila 2003.1.14string ls_mbid//==说明1043569即16进制FEC71,就是主板BIOS ID 开始地址。
前11为是主板BIOS的日期信息。
ls_mbid = String(1043569 + 11, "address") //把字符指针 1043569 + 11,转成字符串。
@#我可是第一次用哦。
//==ls_mbid中存的就是主板BIOS ID信息了。
messagebox("",ls_mbid)****************************************************88888888888888888 8888888888888888888在使用describe()计算数据窗口表达式时语法为:dw1.describe("evaluate('expression',rownumber)")其中,expression:是我们要计算的数据窗口表达式,rownumber:行号,它指明针对哪一行计算表达的值。
PB开发经验总结
//通过代码更改数据窗口对象的方法string error_syntaxfromSQL, error_createstring new_sql, new_syntaxnew_sql = 'SELECT emp_data.emp_id,emp_data.emp_name from emp_data ' &+ 'WHERE emp_data.emp_salary>45000'new_syntax = SQLCA.SyntaxFromSQL(new_sql,'Style(Type=Form)', error_syntaxfromSQL)IF Len(error_syntaxfromSQL) > 0 THEN // Display errorsmle_sfs.Text = error_syntaxfromSQLELSE // Generate new DataWindowdw_new.Create(new_syntax, error_create)IF Len(error_create) > 0 THENmle_create.Text = error_createEND IFEND IFdw_new.SetTransObject(SQLCA)dw_new.Retrieve()//打开动态窗口的方法:window newarray[3]string win[3]int iwin[1] = "w_employee"win[2] = "w_customer"win[3] = "w_sales"for i = 1 to 3Open(newarray[i], win[i])next//显示一个与Windows操作系统风格一致的About对话框。
首先声明如下外部函数:function int ShellAboutA(ulong al_hWnd, string as_szApp, string as_szOtherStuff, ulong hIcon) library"shell32"ShellAboutA(handle(parent),"关于...#摆渡人工作室","欢迎光临摆渡人工作室",0)//如何将COLUMN的显示风格在EDIT、DDDW、DDLB之间相互切换:(1)切换成DDDW:dw_1.Modify("#='dddw_jg'")dw_1.Modify("#1.dddw.DisplayColumn='name_jg'")dw_1.Modify("#1.dddw.DataColumn='id_jg'")(2)切换成DDLB:dw_1.Modify("#1.ddlb.case='any'")dw_1.Object.#1.Values ="red~t1/white~t2"(3)切换成EDIT:dw_1.Modify("#1.edit.case='any'")dw_1.Modify("#1.edit.AutoSelect='Yes'")(4)获取当前风格:dw_1.Describe("#1.Edit.Style")(5)如果还不行,可能得要如下操作:dw_1.Modify("#=''")一下;//在dw_1中选定想要打印的几条记录long ll_posdataStore lds_dslds_ds = create dataStorelds_ds.dataObject = dw_1.dataObjectfor ll_pos = 1 to dw_1.rowCount()if dw_1.IsSelected(ll_pos) thendw_1.RowsCopy(ll_pos,ll_pos,Primary!,lds_ds,lds_ds.rowCount()+1,Primary!) end ifnextlds_ds.print()//实现在循环时可以通过点击按钮终止循环integer n//sb_interrupt 是共享变量sb_interrupt=falsefor n=1 to 3000yield()if sb_interrupt then //sb_interrupt的值在"取消”按纽的Clicked事件中修改为true MessageBox("我不干了","你真坏!")sb_interrupt=falseexitelse //其它处理,在单行编辑器中显示当前n值sle_1.text = string(n)end ifnext//SQL语句调用规范INTEGER li_customer_id = 1STRING ls_city_code = '501'PREPARE SQLSA FROM "DELETE bb_customer_info_t WHERE city_code =? AND customer_id = ?" ;EXECUTE SQLSA USING :ls_city_code,:li_customer_id;//通过modify函数来同时修改多个表1、新建一个数据窗口d_grid_dep_emp,它的Select语句为SELECT department.dept_id,department.dept_name,employee.emp_id,employee.emp_fname,employee.emp_lnameFROM department, employeeWHERE employee.dept_id = department.dept_id2、设置数据窗口d_grid_dep_emp的属性,将列的taborder改为非0值;并点击菜单Rows ——>UpdateProperties,设置此数据窗口Allow Updates,Table to Update设为department,Updateable Columns为department.dept_id,department.dept_name。
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数据窗口技巧38个 收藏
pb数据窗口技巧38个收藏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中定义大于零的值就有定时器(可以精确到毫秒),有了这个定时器就可以实现动画了。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
1.RGB函数计算公式: 颜色值 = (65536 * Blue) + (256 * Green) + (Red)
2.控件可拖动:
send(handle(this),274,61458,0)
3.如何用程序控制下拉子数据窗口的下拉和收起
用modify或者直接用dw_1.object.col1.dddw.showlist = true
7.得到数据窗口中各列及标题:
long ll_count,i
string ls_value,ls_colname
ll_colnum = Long(dw_1.object.datawindow.column.count)
for i = 1 to ll_colnum
//得到标题头的名字
---- 在列的Color属性中,输入如下表达式IF (column_name < >column_name.Original, RGB(255, 0, 0), RGB(0, 0, 0))。在这个条件中,如果此列已改变,则显示红色字体,否则显示黑色字体。这个表达式主要用column_name < > column_name.Original比较当前列的值和原始列的值是否相同来达到判断的目的。
ls_colname = dw_1.describe('#' + string(i) + ".name") + "_t"
ls_value = dw_1.describe(ls_colname + ".text")
next
8.在程序中动态设置初始值:
ex:dw_contro.object.columnName.initial = 'xxxx'
11.在数据窗口的clicked或doubleclicked事件中写上注释//可解决一些意外的bug!
9.如何在DataWindow的SQL语法中不使用SELECT DISTINCT实现删除重复的行
---- 起先对你要显示唯一值的列进行排序:"city A",然后增加如下过滤字符串:" city < > city [-1] or GetRow () = 1"
10.如何改变列的字体颜色,提醒用户此列已做修改
4.检索参数有些不需要传入则传%.
5.如何屏蔽鼠标滚轮触发
在控件的other事件写
if message.number = 522 then return 1
6.得到数据窗口的语法:
string ls_dwsyntax
ls_dwsyntax=dw_1.describe("datawindow.syntax")