PB中一些技巧
PB窗口使用技巧之增强窗口显示效果
PB窗口使用技巧之增强窗口显示效果一、窗口最小化时设置动态图标二、放置闪烁文字三、提高窗口的打开速度四、移动不带标题栏的窗口五、闪烁窗口标题栏六、给窗口添加自动滚动条功能窗口是应用程序中一个非常重要的界面,界面设计的大部分工作体现在窗口界面的设计中。
所以,在不影响功能的前提下,提倡给用户提供更有提示性的、更美观的界面。
常用的手段是动画、声音等,下面介绍这些常用的方法。
一、窗口最小化时设置动态图标当应用程序最小化时,程序的图标如果是动画的,肯定更能吸引用户的注意,视觉效果会更好。
方法是通过动态修改程序的图标来实现。
当程序最小化时打开timer(在deactive中加入timer(1)语句),并在timer事件中编写如下程序:If This.Icon = 'appico.ico' ThenThis.Icon = 'reverse.ico'ElseThis.Icon = 'appico.ico'End If程序激活时关闭Timer事件(在Active事件中加入timer(0)语句)。
需要注意,要将上面用到的两个ico文件放到当前应用程序的目录中。
二、放置闪烁文字以闪烁文字显示重要信息可以吸引用户的注意力,避免这些重要信息被忽略。
通过周期性修改visible属性,可以实现闪烁效果。
在窗口中,假设放置一个静态文本st_1,在窗口的Open事件中定义Timer事件的间隔:Timer(1)然后,在窗口的Timer事件中定期修改静态文本的visible属性:If Mod(Second(Now()),2) = 1 Thenst_1.visible = FalseElsest_1.Visible = TrueEnd If这样就可以实现闪烁效果。
当然也可以在适当的时候使用timer(1),并在适当的时候关闭Timer事件。
三、提高窗口的打开速度在窗口的Open事件中经常编写脚本来进行初始处理工作,如果这些工作花费的时间比较长,在窗口显示之前用户就得等待很长的时间。
PB数据窗口绝对技巧
PB数据窗口绝对技巧PB数据窗口绝对技巧是指通过使用PowerBuilder开发环境的数据窗口对象实现高效数据处理的技巧。
数据窗口是PowerBuilder中最重要和最常用的对象之一,它可以用于显示和操作数据库中的数据。
下面将介绍一些PB数据窗口的绝对技巧。
1.使用绑定数据窗口:绑定数据窗口是将数据窗口与数据库表绑定在一起,这样可以方便地进行数据的读取、修改和保存操作。
使用绑定数据窗口可以避免手动编写SQL语句或存储过程,大大提高了开发效率。
2.优化数据窗口的性能:数据窗口的性能优化是开发过程中非常重要的一环。
可以通过以下方法来提高数据窗口的性能:-只选择需要的列:只选择需要的列可以减少网络传输的数据量,提高数据检索的速度。
-使用约束和过滤器:可以在数据窗口中使用约束和过滤器来限制返回结果集的大小,进一步提高性能。
-使用预检索:可以在打开数据窗口之前使用预检索功能,先将数据加载到缓存中,减少后续操作对数据库的访问次数。
3.自定义数据窗口的样式:可以通过数据窗口的属性和事件来自定义数据窗口的样式。
例如,可以设置列的显示格式、颜色和字体等属性,还可以通过事件来实现数据窗口的验证和计算逻辑。
4.使用数据窗口的分组功能:数据窗口的分组功能可以将数据按照指定的列进行分组,并对每个分组进行汇总计算。
这样可以方便地进行数据的统计和报表生成。
5.使用数据窗口的嵌套功能:数据窗口可以嵌套在其他数据窗口中,形成复杂的数据结构。
通过使用数据窗口的嵌套功能,可以实现多层次的数据展示和操作,提高用户体验和数据处理的灵活性。
6.使用数据窗口的插入和更新语句:数据窗口可以使用自动生成的插入和更新SQL语句来实现数据的插入和修改操作。
这样可以避免手动编写大量的SQL语句,简化开发过程。
7.使用数据窗口的事务处理:数据窗口的事务处理功能可以保证一系列的操作要么全部成功,要么全部失败。
可以通过使用数据窗口的事务处理功能来实现数据的批量插入和更新,提高数据处理的效率和数据的一致性。
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.如何使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数据窗口技巧
pb中datawindow常用技巧一(2009-04-16 17:09:07)转载▼分类:PowerBuilder标签:杂谈pb中datawindow常用技巧一1、如何让存储文件目录的列,显示图片?答:选择对应的column的display as picture属性为true2、如何复制grid类型的所选择的行的数据到系统剪切板?答:string ls_selectedls_selected=dw_1.Object.DataWindow.Selected.Dataclipbord(ls_selected)4、如何设置的DW底色?在DW的editsource中改变color的值5、如何将Grid风格改成自由格式?在DW的editsource中将processing=1的1改为06、要新建一个表A但风格和现有表格B风格一样,怎么将A表快速设置成表B风格?复制B表C,在C表的DW中的editsource中将表名和字段名改成A表的,即可7、如何实现gird风格的datawindow的多栏表头?答:添加text到header带区,并设置band属性为foreground保存,edit source 修改text的x和width属性表达式如下:x="100~t integer(describe('firstcol.x')" width="100~tinteger(describe('lastcol.x')) - integer(describe('firstcol.x')) +integer(describe('lastcol.width'))8、如何过滤dddw编辑风格的显示值为指定值的记录?答:dw_1.setfilter("lookupdisplay('column_name')='"+ls_display_value_your+"'") dw_1.filter()9、如何设置datawindow的某一列为空?答:string ls_temp[]setnull(ls_temp)dw_1.object.columnname.primary.current=ls_temp10、如何设置datawindow的单双行不同颜色间隔?答:在detail带区的color属性表达式中写上if(mod(getrow(),2)=1 ,rgb(255,0,0),rgb(0,255,0)),如果是当前行以第三种颜色表示,表达式如下:if(getrow()=current(),rgb(255,0,0),if(mod(getrow(),2)=1 ,rgb(0,0,255),rgb(0,255,0)))11、如何获取指定名称的datawindowobject?答:DWObject ldwo_use,ldwo_abc ldwo_use = dw_1.Object ldwo_abc =ldwo_use.__get_attribute("t_1",FALSE)//t_1为datawindow中text对象的名称12、如何缩放datawindow的打印大小?答:dw_1.object.datawindow.zoom=150 or dw_1.object.datawindow.zoom=75 13、如何在已过滤后的数据基础上对datawindow进行过滤?答:dw_1.setfilter(dw_1.describe("datawindow.table.filter")+your_join+your_new_filt er)dw_1.filter()14、如何在datawindow中显示动态时间?答:建立一个计算域,表达式为string(datetime(today(),now()),'yyyy年mm月dd日hh点mm分ss秒'),同时设置datawindow的属性dw_1.Object.DataWindow.Timer_Interval=50015、如何让带用title bar的datawindow控件的标题栏诚活动窗口的颜色?答:外部函数定义:funcation logn SetActiveWindow(long hwnd ) Library "user32.dll" datawindow控件的clicked事件代码:setactivewindow(handle(this))16、如何设置datawindow的当前行指示图标?答:在datawindow中建立一个计算列,expression为'',并将该计算列移动为datawindow的第一个列,在datawindow控件的rowfocuschanged事件中写入代码:SetRowFocusIndicator(hand!)或setrowfucsindicator(p_1)//p_1为窗口上的picture控件名17、如何通过代码打开dddw?答:定义外部函数引用声明SUBROUTINE keybd_event( int bVk, int bScan, int dwFlags, int dwExtraInfo) LIBRARY "user32.dll"代码如下:[constant integer VK_F4 = 115dw_1.SetFocus()dw_1.SetColumn( "dept_head_id" ) //设置当前dddwkeybd_event( VK_F4,0,0,0 ) // 按下F4键keybd_event( VK_F4,0,2,0 ) // 释放F4键18、如何打印datawindow的内容到文件中?答:dw_1.object.datawindow.print.fileName ="c:\temp.prn"dw_1.print()19、如何设置dddw的初始值?答:dw_1.object.columnname.Initial="your_initial_value"20、如何只显示不同的数据?答:dw_1.filter("isnull(columnname[-1]) and columnname<>columnname[-1]") dw_1.filter()21、如何让带有title bar的datawindow不可以移动?答:在datawindow的自定义事件ue_nchittest(pbm_nchittest)中写入如下代码:return 122、如何在N-UP显示风格中建立基于第N栏中的列的计算列?答:如column有两列,number和price ,并显示为两栏,则第一栏的cost计算列的expression为number*price,第二栏的cost_1计算列的expression为number[1]*price[1]23、如何清空ddlb或edit.codetable中项目?答:dw_1.Object.columnname.Values=""24、如何实现指定的column的字体旋转90度?答:dw_1.object.columnname.font.Escapement ="900"25、如何获取datawindow的sql代码?答:可以通过以下四种方法获取sql代码:string szselectszselect=dw_1.describe("datawindow.table.select")szselect=dw_1.describe("datawindow.table.sqlselect")szselect=dw_1.describe("datawindow.table.select.attribute")szselect=dw_1.getsqlselect()27、如何获取datawindow对象占有的虚拟存储的容量?答:使用datawindow.storage属性举例:在datawindow控件的retrieverow事件中,写如如下代码:long lstoragelstorage=long(dw_1.object.datawindow.storage)if lstorage>50000 then dbcancel()28、如何连续在同一张纸打印两个数据窗口?答:dw_1.object.datawindow.print.filename="temp.prn"dw_2.object.datawindow.print.filename="temp.prn"dw_1.print()dw_2.print()29、如何设置datawindow分组后每个分组中的记录号?答:建立一个计算列,expression为getrow() - first(getrow() for group 1)+1 30、如何实现在datawindow中只有新增的行,才可以编辑?答:在所有的column的protect属性表达式中写入以下表达式:if(isrownew(),'0','1')31、除了循环以外,有没有更好的方法统计数据窗口中处于选中状态的行数?一般习惯于使用循环来统计数据窗口中处于选中状态的行数,有没有更好的方法?其实此问题在应用上用处不大,讨论一下,活跃一下思维还是有好处的。
在PB中操作BLOB数据的技巧
在PB中操作BLOB数据的技巧在PowerBuilder(PB)中操作BLOB数据是一项常见任务,可以用于存储和检索二进制数据,例如图像、文档和多媒体文件。
下面是操作BLOB数据的一些技巧:1.插入BLOB数据:要插入BLOB数据,首先需要创建一个BLOB变量。
使用Blob类型来声明变量,然后使用Create方法为其分配内存空间。
接下来,使用FileOpen函数打开要插入的文件,并使用ReadFile函数将文件内容读取到BLOB变量中。
最后,使用Insert方法将BLOB数据插入到数据库表中。
以下是一个示例代码片段,演示如何插入BLOB数据:```Blob lb_blobFile ld_fileInteger li_filelb_blob = CREATE Blobli_file = FileOpen("C:\image.jpg", StreamMode!, Read!,Denied!)FileRead(ld_file, lb_blob)FileClose(li_file)dw_1.SetItemBlob(1, lb_blob)dw_1.InsertRow(0)```2.检索BLOB数据:要检索BLOB数据,首先需要从数据库中获取BLOB列的值。
可以使用Retrieve方法检索数据行,然后使用GetItemBlob方法获取BLOB数据并保存到BLOB变量中。
接下来,可以将BLOB数据保存为文件。
以下是一个示例代码片段,演示如何检索并保存BLOB数据:```Blob lb_blobFile ld_fileInteger li_filedw_1.RetrieveRow(0)lb_blob = dw_1.GetItemBlob(1)li_file = FileOpen("C:\image.jpg", StreamMode!, Write!, Shared!)FileWrite(ld_file, lb_blob)FileClose(li_file)```3.更新BLOB数据:要更新BLOB数据,可以使用相同的方法来检索和插入BLOB数据。
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中一些技巧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数据窗口是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技巧八则
设置完毕后在左下角预览窗口中将显示图例的结果。
在进行列自动折行显示的时候,还要注意一点,系统判断自动折行的断点是以空格或标点符号为依据的,如果我们输入一长串字符且中间没有任何标点符号或空隔的话,即使该字符串再长也无济于事。因此,我们一定要提醒用户在录入时适当的加入一些空格或回车。
本文介绍的方法和技巧都是笔者在实践中的一点积累,在此拿出来与大家一起分享。希望在阅读本文后会对您有所帮助或启发。文中如有任何不足之处还望同行们给予指教。在此,我先道声谢。
一、实现运行窗口居中
众所周知,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数据窗口技巧问答
PB数据窗口技巧问答PB(PowerBuilder)是一种集应用程序开发、部署和维护于一体的集成开发环境(IDE)。
PB数据窗口是PB的核心组件之一,用于与数据库交互和显示数据。
以下是一些PB数据窗口技巧的问答,帮助您更好地理解和使用PB数据窗口。
1.什么是PB数据窗口?PB数据窗口是PB的一个重要组件,用于与关系型数据库进行交互和显示数据。
它提供了丰富的功能,包括数据检索、修改、删除和插入等。
数据窗口可以通过自动生成的SQL语句或手动编写的SQL语句来实现与数据库的交互。
2.PB数据窗口有哪些类型?PB数据窗口有多种类型,包括查询数据窗口(Browse DataWindow)、单行数据窗口(Single Row DataWindow)、自由形式数据窗口(Freeform DataWindow)和图表数据窗口(Graph DataWindow)等。
每种类型都适用于不同的数据交互和显示需求。
3.如何创建一个PB数据窗口?创建PB数据窗口可以通过PB的IDE界面进行操作。
首先,打开PB的设计视图,在对象树中选择需要添加数据窗口的PBL或PBT文件。
然后,在菜单栏中选择 File -> New -> DataWindow,根据需要选择数据窗口类型并完成相关设置。
最后,设计数据窗口的外观和布局,并与数据库进行绑定。
4.PB数据窗口如何与数据库交互?PB数据窗口可以与数据库进行交互,并对数据进行增、删、改、查操作。
在设计视图中,可以绑定数据窗口的SQL语句或存储过程,通过调用数据窗口的相应方法或事件触发数据库操作。
数据窗口还可以设置过滤器、排序、分组和连接等功能,实现更复杂的数据处理逻辑。
5.如何在PB数据窗口中显示数据?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.在数据窗口的列头右键单击,可以选择“拆分”,将合并的单元格拆分回原来的单元格。
2024年PB培训教程(提高篇)-(多场景)
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框是不会自动变化大小,可以有两种方法处理此问题。
pb10个技巧
5. 控制由Run运行的程序(简称Run程序)
在PB程序设计中,可以用Run()来运行一些程序。但Run程序无法与PB主程序协调
工作,若用户多次调用,就会启动Run程序的多个实例,主程序退出时,Run程序
依然运行。可以用如下函数使它们协调工作:
Function Ulong FindWindowA(Ulong classname, String windowname)
Exit //退出循环
End if
Next
3. 在PB中如何获取目录信息
(1) 获取当前目录。通过GetCurrentDirectory函数可以获取当前目录,该函数
声明为:
Function Ulong GetCurrentDirectory(Ulong buflen,ref String dir)
参数2取-1表示在最顶层显示窗口,取1表示在最底层显示;最后一个参数若取1,
表示窗口大小保持不变,取2表示保持位置不变,因此,取3(=1+2)表示大小和
位置均保持不变,取0表示将窗口的大小和位置改变为指定值。
2. 在PB中如何获得光盘盘符
通过GetDriveType函数可以获取驱动器(如:软驱、硬盘、光驱、网络映像驱动
Library kernel32.dll”
Function Uint GetSystemDirectoryA(ref String dir,Uint buflen)
Library "kernel32.dll”
4. 在PB中如何注销当前用户、关闭计算机、重启计算机
通过ExitWindowsEx函数可实现这三个功能,首先作如下声明:
//查找Run程序是否已经运行,wtitle为Run程序的窗口标题
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的小技巧范文PB(Picture Book)是一种以图画为主的儿童读物,具有浓厚的艺术性和故事性。
它通过精美的插图和简洁的文字,以简单的方式传递信息和故事,让孩子们在阅读中获得乐趣和启迪。
下面是一些提高PB阅读和创作的小技巧。
1.选择适合的PB:要选择适合孩子年龄和阅读水平的PB。
对于年幼的孩子,重点应该放在绘画上,插图要色彩丰富,简洁明了。
对于年长的孩子,可以尝试一些具有深意和复杂主题的PB。
还要考虑孩子的兴趣爱好和性格特点,选择能引起共鸣的题材。
2.注意节奏和韵律:PB的文字通常很简洁,但也要注意文字的流畅性和韵律感。
可以使用一些有节奏感的词语和句子,增强整个故事的节奏感,使其更富有吸引力。
3.强调视觉效果:PB最大的特点是图画,因此要注意插图与文字之间的配合,使两者相辅相成,相得益彰。
插图要突出故事的关键情节和主题,形象鲜明,引人入胜。
文字要简洁明了,突出主要信息,以便与插图相得益彰。
4.愿意留白:PB的画面不需要填满整个页面,留一些空白会给孩子留下想象的空间。
这种留白可以让孩子集中注意力,也可以激发他们的想象力,让他们更好地理解和体味故事。
5.提供多样性:PB的世界应该是多样的,向孩子展示不同种族、性别、文化和背景的人物。
这种多样性有助于培养孩子的包容心和理解力,让他们能够更好地适应多元化的社会。
6.创造细节:PB的插图和文字应该注重细节,细节能够丰富故事的内涵和表达。
可以通过增加一些有趣的细节来吸引孩子的注意力,使故事更加生动有趣。
7.激发情感:PB是孩子们接触艺术的一种途径,它不仅可以提供知识和信息,还可以激发情感和情绪。
通过插图和文字的细腻表达,可以引发孩子的思考和感受,增强他们的情感体验。
8.互动性:可以在PB中设置一些互动元素,如折页、粘贴和拖拉。
这些互动元素可以提高孩子的参与度,让他们更加投入阅读和探索的过程中。
9.创新思维: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常用操作技巧
这是刚毕业时在某一“大”公司使用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、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
PB中一些技巧1.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))。
在这个条件中,如果此列已改变,则显示红色字体,否则显示黑色字体。
这个表达式主要用column_name < > column_name.Original比较当前列的值和原始列的值是否相同来达到判断的目的。
11.在数据窗口的clicked或doubleclicked事件中写上注释//可解决一些意外的bug!12.如何屏蔽上下鍵触发新建一个事件:id为pbm_dwnkeyIF KeyDown(KeyDownArrow!) OR KeyDown(KeyUpArrow!) ThenReturn 1End IF13.你注意到没有,数据窗口画板里面,在写表达式的时候,试着用一些用户自定义的全局变量和全局函数,你会发现在某些特殊的场合,这个小窍门还是很有用的。
14.有些程序员在窗口的右键pop菜单里面写了很多代码,在菜单里面有很多w_windowname.controlname等等引用,如果这个窗口被继承,很容易就会出毛病,别忘了在菜单里面可以引用parentwindow哦,有了它我的pop菜单里面的代码和具体窗口无关,随便继承。
当然强烈建议最好还是把所有和窗口相关的逻辑都转移到窗口的函数和事件中去,在pop菜单中触发调用。
15.whichdw.describe("evaluate('lookupdisplay("+colname+")',"+string(r ow)+")")这个表达式可以得到指定列的显示值。
(这个知识点有滥竽充数之嫌,但是一时间我真是想不起来太多的东西)16.在数据窗口画板里面我们如果想要比较当前行和上一行或者下一行的值,怎么比较呢,哈哈,看这个就知道了if ( yw_bc_circuit_dlcode = yw_bc_circuit_dlcode [-1]and yw_bc_circuit_dlname = yw_bc_circuit_dlname [-1]and yw_bc_circuit_xtno = yw_bc_circuit_xtno [-1] ,0,1)这个表达式就是比较当前行和上一行是否相同的。
其他的依此类推就行了。
17.两个结构相同的数据窗口之间快速复制数据dw_1.object.data = dw_2.object.data18.根据条件改变记录颜色if ( Mod(getrow(),2)=0,rgb(0,255,255),rgb(255,255,255)) //奇偶行不同色if (currentRow()=getrow(),rgb(0,255,255),rgb(255,255,255)) //当前行不同色19.使窗口总位于所有打开窗口的最上面w_main.SetPosition(Topmost!)20.取数据窗口中列的总数string ls_countls_count = dw_1.describe("datawindow.column.count")21.取数据窗口中可列新的表名。
string ls_tablels_table = dw_1.describe("datawindow.updatetable.table")22.取数据窗口对象中列的名称及类型string ls_cols[],ls_types[]int li_count,ili_count = integer(ls_count)for i = 1 to li_countls_cols[i] = dw_1.describe("#"+string(i)+".name")ls_types[i] = dw_1.describe("#"+string(i)+".coltype")next23.Case( dealintype WHEN 0 THEN RGB(254,251,235) WHEN 2 THEN rgb(254,251,235) ELSE RGB(0,0,255))写道字段的protect中不仅仅是颜色改变的问题看看24.dw.Object.col[n] : 直接获得数据窗口的col列第n 行的数据。
25.在做数据窗口时,我们有时候希望能够多一些字段来作一些特殊的用处,但是在数据窗口中又不能乱加字段,因为已有的字段必须是数据库中有的或者是他们的组合,呵呵,大家不妨看看这个sql用产生什么样的数据窗口select colname1,colname2,1,''from tablename是不是多出了两个字段阿,一个是字符串字段,一个是数字字段别忘了要convert syntax 哦26.清空数组string a[],b[]a[1] = '1';a[1] = '2';a[1] = '3'a = b//即可以清空a27.只允许修改第n行的name列:dw_1.modify("name.protect = '1 ~t if((getrow()=n),0,1)'")28.让run程序和主程序一起关闭:function ulong findwindowA(...).."user32.dll"function long setparent(..."user32.dll"handle = findwindowA(nul,win_title)setparent(handle,handle(w_main))29.取得某一天以前或以后n天的函数RelativeDate(date, n)例:取得当天前10天的日期RelativeDate(Today(),10)取得当天后10天的日期RelativeDate(Today(),-10)30.不想做排序窗口?调用PB自身的好了。
string ls_nullSetNull(ls_null)dw_1.SetSort(ls_null)dw_1.Sort()31.调用PB自身的过滤窗口:dw_1.SetFilter(ls_null)dw_1.Filter()32.增量输入定位代码或名称记录位置:定义一个窗口,放一个SLE_1,在它的MODIFY程序中写:long ll_findstring value0value0=sle_1.textif not (isnull(sle_1.text) or sle_1.text='') thenif left(sle_1.text,1)='0' or integer(sle_1.text)<>0 then //输入的为代码ll_find=jwl_dmxz.dw_1.find('dm like"'+value0+'%"',1,jwl_dmxz.dw_1.rowcount())//jwl_dmxz为主窗口,dm为查询的字段名,这里是代码。
else //输入的为名称ll_find=jwl_dmxz.dw_1.find('mc like"'+value0+'%"',1,jwl_dmxz.dw_1.rowcount())//end ifif ll_find>0 thenjwl_dmxz.dw_1.scrolltorow(ll_find)//为了避免首次目标记录为第一条,无法选中。
if ll_find=ll_find0 thenjwl_dmxz.dw_1.selectrow(ll_find,true)elseif ll_find<>ll_find0 thenjwl_dmxz.dw_1.selectrow(ll_find,true)jwl_dmxz.dw_1.selectrow(ll_find0,false)ll_find0=ll_findend ifend ifend if33.然后在查询窗口中的TIMER事件中写:timer(0.05)sle_1.triggerevent(modified!)34.判断计算器是否存在:string is_fileExistsboolean is_Existsis_fileExists='c:/windows/calc.exe'is_Exists=fileExists(is_fileExists)if is_Exists thenrun("c:/windows/calc.exe")elsemessagebox("提示信息","本机的WINDOWS没有计算器!",stopsign!) end if35.得到硬盘序例号String ls_Rootpath, ls_volumnename ,ls_return,softpath GetCurrentDirectoryA(256,softpath)softpath=left(softpath,2)if softpath='C:' thenls_Rootpath = 'D:' // 指定要得到序列号的硬盘,// 一般情况都是C盘,除非你能保证用户存在其它逻辑盘或物理盘elsels_Rootpath = 'C:'end ifls_volumnename = Space(256) // 分配足够的空间,下同Ulong lul_VolumeNameSizelul_VolumeNameSize = 256Ulong lul_VolumeSerialNumber, lul_MaximumComponentLength,lul_FileSystemFlagslul_MaximumComponentLength = 256String ls_FileSystemNameBufferls_FileSystemNameBuffer = space(256)Ulong lul_FileSystemNameSizelul_FileSystemNameSize = 256int ilong ls_num,ls_gnum,ls_dnumi=GetVolumeInformation(ls_Rootpath, ls_volumnename,lul_VolumeNameSize, lul_VolumeSerialNumber, lul_MaximumComponentLength, lul_FileSystemFlags, ls_FileSystemNameBuffer, lul_FileSystemNameSize) ls_return=string(lul_VolumeSerialNumber)return ls_returnPB问答:1.如何让存储文件目录的列,显示图片?答:选择对应的column的display as picture属性为true2、如何复制grid类型的所选择的行的数据到系统剪切板?答:string ls_selectedls_selected=dw_1.Object.DataWindow.Selected.Dataclipboard(ls_selected)3、如何复制graph风格的datawindow中的图形到剪切板?答:dw_1.clipbord("gr_1")4、如何设置的DW底色?在DW的editsource中改变color的值5、如何将Grid风格改成自由格式?在DW的editsource中将processing=1的1改为06、要新建一个表A但风格和现有表格B风格一样,怎么将A表快速设置成表B 风格?复制B表C,在C表的DW中的editsource中将表名和字段名改成A表的,即可7、如何实现gird风格的datawindow的多栏表头?答:添加 text到header带区,并设置band属性为foreground保存,edit source 修改text的x和width属性表达式如下:x="100~t integer(describe('firstcol.x')"width="100~tinteger(describe('lastcol.x')) -integer(describe('firstcol.x')) +integer(describe('lastcol.width'))8、如何过滤dddw编辑风格的显示值为指定值的记录?答:dw_1.setfilter("lookupdisplay('column_name')='"+ls_display_value_your +"'")dw_1.filter()9、如何设置datawindow的某一列为空?答:string ls_temp[]setnull(ls_temp)dw_1. O B J E C T.columnname.primary.current=ls_temp10、如何设置datawindow的单双行不同颜色间隔?答:在detail带区的color属性表达式中写上if(mod(getrow(),2)=1 ,rgb(255,0,0),rgb(0,255,0)),如果是当前行以第三种颜色表示,表达式如下:if(getrow()=current(),rgb(255,0,0),if(mod(getrow(),2)=1 ,rgb(0,0,255) ,rgb(0,255,0)))11、如何获取指定名称的datawindow O B J E C T?答:DWObject ldwo_use,ldwo_abcldwo_use = dw_1.Objectldwo_abc = ldwo_use.__get_attribute("t_1",FALSE)//t_1为datawindow中text对象的名称12、如何使用datawindow的查询模式?答:dw_1.Object.DataWindow.QueryMode='yes'将datawindow改变为查询模式后,接收用户的输入,再使用一下代码获取结果:dw_1.accepttext()dw_1.retrieve()13、如何缩放datawindow的打印大小?答:dw_1. O B J E C T.datawindow.zoom=150 or dw_1. O B J E CT.datawindow.zoom=7514、如何在已过滤后的数据基础上对datawindow进行过滤?答:dw_1.setfilter(dw_1.describe("datawindow.table.filter")+your_join+your_new_filter)dw_1.filter()15、如何在datawindow中显示动态时间?答:建立一个计算域,表达式为string(datetime(today(),now()),'yyyy年mm 月dd日 hh点mm分ss秒'),同时设置datawindow的属性dw_1.Object.DataWindow.Timer_Interval=50016、如何让带用title bar的datawindow控件的标题栏诚活动窗口的颜色?答:外部函数定义:funcation logn SetActiveWindow(long hwnd ) Library "user32.dll"datawindow控件的clicked事件代码:setactivewindow(handle(this))17、如何设置datawindow的当前行指示图标?答:在datawindow中建立一个计算列,expression为'',并将该计算列移动为datawindow的第一个列,在datawindow控件的rowfocuschanged事件中写入代码:SetRowFocusIndicator(hand!)或setrowfucsindicator(p_1)//p_1为窗口上的picture控件名18、如何通过代码打开dddw?答:定义外部函数引用声明SUBROUTINE keybd_event( int bVk, int bScan, int dwFlags, int dwExtraInfo)LIBRARY "user32.dll"代码如下:[constant integer VK_F4 = 115dw_1.SetFocus()dw_1.SetColumn( "dept_head_id" ) //设置当前dddwkeybd_event( VK_F4,0,0,0 ) // 按下F4键keybd_event( VK_F4,0,2,0 ) // 释放F4键19、如何打印datawindow的内容到文件中?答: dw_1. O B J E C T.datawindow.print.fileName ="c:/temp.prn"dw_1.print()20、如何设置dddw的初始值?答:dw_1. O B J E C T.columnname.Initial="your_initial_value"21、如何只显示不同的数据?答:dw_1.filter("isnull(columnname[-1]) and columnname<>columnname[-1]")dw_1.filter()22、如何让带有title bar的datawindow不可以移动?答:在datawindow的自定义事件ue_nchittest(pbm_nchittest)中写入如下代码:return 123、如何在N-UP显示风格中建立基于第N栏中的列的计算列?答:如column有两列,number和price ,并显示为两栏,则第一栏的cost计算列的expression为number*price,第二栏的cost_1计算列的expression为number[1]*price[1]24、如何清空ddlb或edit.codetable中项目?答:dw_1.Object.columnname.Values=""25、如何实现指定的column的字体旋转90度?答:dw_1. O B J E C T.columnname.font.Escapement ="900"26、如何获取datawindow的sql代码?答:可以通过以下四种方法获取sql代码:string szselectszselect=dw_1.describe("datawindow.table.select")szselect=dw_1.describe("datawindow.table.sqlselect")szselect=dw_1.describe("datawindow.table.select.attribute")szselect=dw_1.getsqlselect()27、如何获取datawindow对象占有的虚拟存储的容量?答:使用datawindow.storage属性举例:在datawindow控件的retrieverow事件中,写如如下代码:long lstoragelstorage=long(dw_1. O B J E C T.datawindow.storage) if lstorage>50000 then dbcancel()28、如何控制打印横向:dw_control. O B J E C T.datawindow.print.orientation= 129、如何进行预览:dw_control. O B J E C T.datawindow.print.preview = "yes"30、如何连续在同一张纸打印两个数据窗口?答:dw_1. O B J E C T.datawindow.print.filename="temp.prn"dw_2. O B J E C T.datawindow.print.filename="temp.prn"dw_1.print()dw_2.print()31、如何将pb9.0 的datawindow转化为pb 8.0版本的datawindow? 答:edit source 将release 9;改为release 8;并删除以下内容:print.printername=""print.canusedefaultprinter=yesprint.cliptext=no print.overrideprintjob=nohidegrayline=noencodeselflinkargs="1"export.xml(headgroups="1" includewhitespace="0" metadatatype=0 savemetadata=0 )import.xml()export.pdf(method=0 distill.custompostscript="0"xslfop.print="0" )32、如何设置datawindow分组后每个分组中的记录号?答:建立一个计算列,expression为 getrow() - first(getrow() for group 1)+133、如何实现在datawindow中只有新增的行,才可以编辑?答:在所有的column的protect属性表达式中写入以下表达式:if(isrownew(),'0','1')34、保存datawindow数据到excel中// ... Init docname// ... GetFileOpenName or any other methodif dw_1.SaveAs(docname, HTMLTable!, True) = -1 thenMessageBox("Warning", "Unable to export data. Error writi ng to file!", Exclamation!)returnend if// Convert HTML file to Excel native formatOLEObject excelexcel = CREATE OLEObjectif excel.ConnectToObject(docname) = 0 thenexcel.application.DisplayAlerts = FALSEexcel.application.workbooks(1).Parent.Windows(excel.application .workbooks(1).Name).Visible = Trueexcel.application.workbooks(1).saveas(docname, 39)excel.application.workbooks(1).close()end ifDESTROY excel// done35、除了循环以外,有没有更好的方法统计数据窗口中处于选中状态的行数?一般习惯于使用循环来统计数据窗口中处于选中状态的行数,有没有更好的方法?其实此问题在应用上用处不大,讨论一下,活跃一下思维还是有好处的。