PB常用方法 下载本文

ar(34) + \ + \font.family=\et=\d.color=\列属性 sql_dw_columns_conf = sql_dw_columns_conf + \ment=\har(34) + \34) + \34) + \\l\char(34) + \\ background.color=\dw_columns_type + \char(34) + \ + \char(34) + \ sql_dw_columns_conf) dw.create(sql_dw_general + sql_dw_columns_type + sql_dw_headers_conf + sql_dw_columns_conf , ls_errors) return(ls_errors) end function40、如何让datawindow的heade带区r的内容只打印一次?答:1、制作两个数据窗口,第一个有表头,第二个没有。 2、用第一个有表头的数据读取数据库中的数据 3、打印有表头的数据窗口中的第一页,记住结束行号 4、将从结束行号开始的所有数据复制到第二个数据窗口中 5、打印第二个数据窗口41、交叉报表在retrieve后,其datawindow的宽度怎么获得啊?答://==================================================================== // [public] function wf_settitle_length 在 w_search_report inherited from window //-------------------------------------------------------------------- // 说明:设置表头长度 //-------------------------------------------------------------------- // 参数1:[reference] datawindow adw_1 // 说明:报表dw //-------------------------------------------------------------------- // 返回: (integer) 成功返回1,不成功返回0 //-------------------------------------------------------------------- // 作者: cwl 日期: 2001.12.15 //==================================================================== long row string list string token[] string tag_1 integer startpos = 1, endpos, top, i = 1 , index = 0 //取出dw中所有的对象存入token[]中 list = adw_1.describe(\s > 0 ) token[i] = mid(list, startpos, endpos - startpos) i ++ startpos = endpos + 1 endpos = pos(list, '~t', startpos) loop token[i] = mid(list, startpos) top = upperbound(token[]) //找出最后一列 string ls_lastcol int li_lastpos=0,li_thispos fori = 1 to top choose case upper(adw_1.describe(token[i] + '.type')) case 'column', 'compute' li_thispos = integer(adw_1.describe(token[i] + '.x')) if li_thispos>=li_lastpos then //这是目前最后一列 li_lastpos=li_thispos ls_lastcol=token[i] end if end choose next //设置表头长度 string ls_change ls_change=\ol +\

n 142、如何在数据窗中得到自动高的列的高度?答:desceibe(\获得第三行的row的高度42、如何使dw的列不可移动,不可调整列宽?答:在datawindow的cilcked事件写 if row=0 then return 1 end if43.光标跳转到数据窗口的某一行某一列dw_1.scrolltorow(ll_row) dw_1.setcolumn(ll_column)44 如何使光标指向每页第一行?long ll_firstrowonpage=long(dw_1.describe(\(ll_firstrowonpage)dw_1.setrow(ll_firstrowonpage)45. grid的窗口如何使第一列固定不动?①选上data object的hsplitscroll属性②在constructor事件中: dw_1.object.datawindow.horizontalscrollsplit=integer(dw_1.describe(\第一列的宽度③在scrollhorizontal事件中:int iif pane = 1 theni = integer(this.object.datawindow.horizontalscrollposition2)if i < 1 or isnull(i) then returnif scrollpos > 0 thenthis.object.datawindow.horizontalscrollposition = 0end ifelsei = integer(this.object.datawindow.horizontalscrollsplit)if i < 1 or isnull(i) then returnif i > scrollpos thenthis.object.datawindow.horizontalscrollposition2 = iend ifend if46. 怎样取子数据窗口的总列数ll_column_count=integer(dwc.describe(\为子窗口47.在数据窗口过滤以后,计算列值如何才能一起改变?dw_1.setfilter(filter_condition)dw_1.filter()dw_1.groupcalc()48.怎么改变某一列的背景颜色?dw_1.modify(\在数据窗口中如何delete选中的多行?long ll_rows , ll_rowll_rows=dw_1.rowcount()for ll_row = ll_rows to 1 step -1if dw_1.isselected(ll_row) thendw_1.deleterow(ll_row)end ifnext50.如何改变列的字体颜色,提醒用户此列已做修改在列的color属性中,输入如下表达式 if (column_name < >column_name.original, rgb(255, 0, 0), rgb(0, 0, 0))51.数据窗口中限定某列不可编辑用datawindow的clicked事件中的方法也可以实现列的保护。若某列不可更改,则可置protect=0。即: dw_1.modify(\或dw_1.modify(\若要将该列改为可更改,则置protect=1,即: dw_1.modify(:columnname.protect=1\或dw_1.modify(\此方法不影响tab键的移动,用户可以随意拉动列,还可在应用过程中自己决定哪一列可编辑,哪一列不可编辑。52.怎样去掉上图中数据窗口中的黑影?this.modify (\= false\实现逐行增加求和使用计算列:cumulativesum(field for all),即可达到逐渐递增求和的功能54 快速删除多行方法是把要删除的行从主缓冲区中移到删除缓冲区中。例如,删除缓冲区中所有的行:dw_1.rowsmove(dw_1, 1, dw_1.rowcount, primary!, dw_1, 1, delete!)58、在分组的header上加序号答:建立计算域,expression: cumulativesum( if (jlxm = jlxm[-1],0,1) for all)59、为什么varchar字段类型的列只能保存255个字符?答:设置事务处理对象的dbparm属性即可示例:.........sqlca.dbparm = \点击grid类型数据窗口的header,自动排序。(图片自己做)/* *args: i_str_oldcol *note:实例变量,纪录上次点击的列 */ string i_str_oldcolstring str_objectname, str_curcol, str_addpic integer int_pic_xstr_objectname =string (dwo.name) //对象名称 if row = 0 and this.describe(str_objectname+\ame+\是否点击列对象 str_curcol = left(str_objectname,len(str_objectname) - 2) //当前列对象名称 if str_curcol <> i_str_oldcol then //点击的是不同列对象 this.modify(\不管

有没有位图对象都删除 i_str_oldcol = str_curcol //保存上次点击的列对象 //画图 int_pic_x = integer(this.describe(str_objectname+\e+\+string(int_pic_x)+'\s.modify(str_addpic) //动态画个图 this.setsort(str_curcol + \头一次点击当然是升序了 this.sort() else //当前列已经点过了 if this.describe(\上次是升序 this.modify(\这次是降序 else this.modify(\ort() end if end if28、如何控制打印横向: dw_control.object.datawindow.print.orientation= 1 29、如何进行预览: dw_control.object.datawindow.print.preview = \、如何用代码取得数据窗口汇总带计算列的值?string ls_valuels_value = dw_1.describe(\、得到所有列标题ll_colnum = long(dw_1.object.datawindow.column.count)for i = 1 to ll_colnumls_colname = dw_1.describe('#' + string(i) + \、数据窗读取group分组列的方法在数第10/14页据窗中建立一计算列last_row ,计算公式为last(getrow() for group 1)compute_1是group 1中的计算列int n_row,p_row,i,j j=0 p_row=dw_1.getitemnumber(1,\row=dw_1.getitemnumber(i,\dw_2.rowcount(),\dw_2.insertrow(0) dw_2.setitem(dw_2.rowcount(),\_1\如何从*.txt 文件中导入数据到数据窗口?public function boolean wf_appendfromtxt (datawindow dw_acton, string str_filename, string str_filesegment, string str_columnsegment);integer int_filehandle,int_filenum,i,j string str_text,str_row,str_row_1,str_data[],str_columndatatype long lng_row,lng_column_count,lng_column_count1,lng_column_count2 int_filenum = fileopen(str_filename, streammode!, read!, lockread!) if int_filenum > 0 then fileread (int_filenum, str_text) str_text=trim(str_text)+str_filesegment do while pos(str_text,str_filesegment) <> 0 str_row=left(str_text,pos(str_text,str_filesegment) - 1) str_text=right(str_text,len(str_text) - pos(str_text,str_filesegment) - 1) if trim(str_row)='' then fileclose(int_filenum) end if str_row_1=trim(str_row)+str_columnsegment i=1 do while pos(str_row_1,str_columnsegment)<>0 str_data[i]=left(str_row_1,pos(str_row_1,str_columnsegment) - 1) str_data[i]=trim(str_data[i]) str_row_1=right(str_row_1,len(str_row_1) - pos(str_row_1,str_columnsegment)) i++ loop lng_row=dw_acton.insertrow(0) lng_column_count1=long(dw_acton. o b j e c t.datawindow.column.count) lng_column_count2=upperbound(str_data[]) lng_column_count=min(lng_column_count1, lng_column_count2) for j = 1 to lng_column_count str_columndatatype=dw_acton.describe(\n.setitem(lng_row,j,date(str_data[j])) case \_data[j]))) case \m(lng_row,j,integer(str_data[j])) case \number\me(str_data[j])) case \xt loop fileclose(int_filenum) return true else messagebox(\提示\打开文件失败\如何从*.xls 文件中导入数据到数据窗口?public function boolean wf_appendfromxls (datawindow dw_acton, string str_filename);oleobjec

t excelserver long excelok string str_savename excelserver = create oleobject excelok = excelserver.connecttonewobject( \连接excel失败,检查你的系统是否安装了office\=\第11/14页,3) excelserver.displayalerts=false excelserver.quit() excelserver.disconnectobject() destroy excelserver dw_acton.importfile(str_savename) filedelete(str_savename) return true end if end function72.如何去掉pb中的灰线dw中.modify(\可以让你去掉预览时讨厌的灰线条,以上只能在pb9.0以上版本中有效73.滚动水平条的设置第一段代码写在dw_1的scrollhorizontal事件的int i if pane=1 then i=integer(this.object.datawindow.horizontalscrollposition2) if i<1 or isnull(i) then return else i=integer(this.object.datawindow.horizontalscrollsplit) if i<1 or isnull(i) then return if i>scrollpos then this.object.datawindow.horizontalscrollposition2=i end if end if第二段代码写在窗口的open事件里string ls_colx ls_colx=dw_1.object.factory.x dw_1.object.datawindow.horizontalscrollsplit=ls_colx74.如何在dddw中敲入字母时dddw始终下拉状态?1、声明实例变量:boolean ib_show2、声明外部函数:subroutine keybd_event(int bvk,int bscan,ulong dwflags,ulong dwextrainfo) library \、新建自定义事件:pbm_dwnkey代码如下:if getcolumn() = 2 then //这里假设你的dddw是第2列,如果是其他列,则自行修改if not ib_show thenkeybd_event(18,0,0,0)keybd_event(40,0,0,0)keybd_event(40,0,2,0)keybd_event(18,0,2,0)ib_show = trueend ifelseib_show = falseend if4、在dw的clicked和doubleclicked事件中分别写入:ib_show = false5、测试一下吧,这样即可弹出下拉dddw,但是dddw自动滚动的代码我没有写,你自己完成吧!75.如何使鼠标单击item单元格(tab order为0)时黑色选中色变为其他颜色?1、首先将dw属性中的column moving 和mouse selection两项取消选中;2、在dw的clicked事件中写代码://此处声明所用到的相关变量;long ll_curcol,ll_pos,ll_colsstring ls_modstring,ls_colname,ls_color_1,ls_color_2,ls_curcolif row = 0 then return//此处给两个颜色变量赋值;ls_color_1 = string(rgb(255,255,255))ls_color_2 = string(15780518) //此处设置选中单元格为sky天蓝色//此处获取当前列号和总列数;//ll_curcol=dw_1.getcolumn()ls_curcol = left(dw_1.getobjectatpointer(),pos(dw_1.getobjectatpointer(),\此处将所有列的background的mode属性设为不透明;(注:下面两句其实可以放到form的open事件或dw的constructor里面执行,可以提高效率;)dw_1.setredraw(false)for ll_pos = 1 to ll_colsls_colname = dw_1.describe(\me\此处将所操作列的background.color属性设为带if判断的表达式,而除此之外的各列的背景表达式均设为恒值;for ll_po第12/14页s = 1 to ll_colsls_colname = dw_1.describe(\if ls_colname <> ls_curcol thenls_modstring = ls_colname+\lsels_modstring = ls_colname+\ls_color_2+\此处执行背景颜色修改;dw_1.modify(ls_modstring)next//刷新显示新的背景颜色;dw_1.setredraw(true)77.如何在使用

setitem后修改的各个单元格字体变成兰色,其他单元格仍保留黑色字体?string ls_modstring,ls_rows[]long ll_row,ll_col,ll_posfor ll_pos = 1 to long(dw_1.object.datawindow.column.count)ls_rows[ll_pos] = \假设此处要修改第2行、第1列

ll_row = 2ll_col = 1dw_1.setitem(ll_row,ll_col,\col] = string(ll_row)elsels_rows[ll_col] = ls_rows[ll_col] + \#\,0,0))'\假设此处要修改第4行、第2列ll_row = 4ll_col = 2dw_1.setitem(ll_row,ll_col,\_col] = string(ll_row)elsels_rows[ll_col] = ls_rows[ll_col] + \\0,0,0))'\一).describe 可以描述dw中某个对象的某个属性的取值,虽然函数describe可以获取对象的信息,但是表达式的取值就不能正常读取了,而这又是经常遇到的.(二).在describe 中添加上evaluate以后,具备了取值,判断以及计算的功能。 如果想获取数据窗口对象中由属性、函数等构成的表达式的取值时,必须在函数describe中使用函数evaluate。语法:evalute('expression',rowno)其中,expression是属性表达式,rowno是要描述的行号。该函数放置在describe的属性列表中。判断:例如,判断第3行的salary工资是否大于1 000,如果大于则返回1,否则返回0,可以使用下面的语句:dw_1.describe(\取值:dw_2.describe(\取'column_conn'中第一行的值计算:dw_1.describe(\可以避免从数据库中提取数据注意:表达式要有引号,evaluate()也要有引号。(三).lookupdisplay 在数据窗口控件上显示的值和字段实际得到的值并不相同,使用函数getitemx只能读取这样的字段的真实取值,而不是用户看到的值。如何才能读取用户看到的值?可以使用此函数,lo第13/14页okupdisplay函数不能直接从powerscript调用,可以在describe中和evaluate函数配合使用。因为函数lookupdisplay不能指定对哪行数据进行操作,它的参数只有一个字段名称,所以必须和evaluate函数配合使用。该函数的语法是:lookupdisplay(columnname)参数columnname是字段的名称,而不是一个字符串。函数执行错误则返回空字符串。注意:lookupdisplay()要有引号,evaluate()也要有引号。例一:ls_1 = dw_1.describe(\语法:value = datawindow.describe(string ls)例三:dw_1.describe(\在dw_1 里面有一个gxbm字段的edit属性页下面:datawindow:d_dmzd_gxbm,display column:dmmc,data column:gxbm.在显示时:不是显示gxbm的值,而是显示dmmc的值,但我们用getitemstring(row,\时,得到的是gxbm的值,而不是显示的dmmc值,如果我们想得到显示的dmmc值,那就用lookupdisplay来用:ls_1 = dw_1.describe( \ate('lookupdisplay(column_compare)',1)\修改列名1 getcolumnname 得到列名 col_name2 col_titlename = col_name+'_t\当然就是modify (col_titlename+\获取列名long ll_column_count,ll_istring ls_column,ls_column_name,is_name_array,is_dbname_arrayll_column_count = long(dw_detail.describe(\总列数ll_column_count=long(dw_1.object.datawindow.column.count) //第二种写法for ll_i = 1 to ll_column_countif dw_detail.describe(\

= dw_detail.describe(\列名modify(ls_column+\修改选中行的背景色string ll_colorll_color=rgb(0, 0, 255)dw_1.modify(\olor) + \