《PB数据窗口绝对技巧.docx》由会员分享,可在线阅读,更多相关《PB数据窗口绝对技巧.docx(7页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、PB数据窗口绝对技巧1、如何让存储文件目录的列,显示图片?选择对应的column的display as picture属性为true。2、如何复制grid类型的所选择的行的数据到系统剪切板?string ls_selectedls_selected=dw_1 .Object. DataWindow. Selected. Dataclipbord(ls_selected)3:如何改变GRID数据窗口列位置(新手常见)先preview,然后在预览窗口拖动位置即可。4、如何设置DW的底色?在DW的editsource中改变color的值。5、如何将Grid风格改成自由格式?在 DW 的 echtso
2、urce 中将 processings 的1 改为0。6、要新建一个表A但风格和现有表B风格一样,怎么将A表快速设置成表B风格?复制B表C,在C表的DW中的edtsource中将表名和字段名改成A表的,即可。7、如何实现gird风格的datawindow的多栏表头?添力 text至【J header带区,并设置band属性为foreground保存,edit source修改tex t的x和width属性表达式如下:x=100t integer(describe(,firstcol.x)n width=H1 OO-tinteger(describe(lastcol.x) - int eger(
3、describe(,firstcol.x,) +integer(describe(1astcol. width1)8、如何过滤dddw编辑风格的显示值为指定值的记录?dw_1 .setfilter(,lookupdisplay(,column_name,)=,+ls_display_value_your+H)dw_1 .filter()9、如何设置datawindow的某一列为空?string ls_tempsetnull(ls_temp)dw_1 .object.columnname. primary.current=ls_temp10如何设置datawindow的单双行不同颜色间隔?在 d
4、etail 带区的 color 属性表达式中写上讦(mod (getrow(),2)=1 ,rgb(255,0,0),rgb(0,255,0),如果是当前行以第三种颜色表示,表达式如下:if(getrow()=current()5rgb(25530,0)Jf(m od(getrow(),2)=1 5rgb(O,0,255),rgb(0,255,0)11、如何获取指定名称的datawindowobject?DWObject ldwo_use,ldwo_abc ldwo_use = dw_1 .Object ldwo_abc = ldwo_use._ _get_attribute(nt_1 ,FA
5、LSE)/t_1 datawindow 中 text 对象的名称12如何缩放datawindow的打印大小?dw_1 .object.datawindow.zoom=150 or dw_1 .object.datawindow.zoom=7513、如何在已过滤后的数据基础上对datawindow进行过滤?dw_1 .setfilter(dw_1 .describe(Hn)+yourjoin4-your_new_filter)dw_1 .filter()14、如何在datawindow中显示动态时间?建立一个计算域,表达式为 string(datetime(today(),now();yyyy
6、mm 月 dd 日 hh 点 mm 分 ss 秒),同时设置 datawindow 的属性 dw_1.Object.DataWindow.Timer_lnterval=50 015、如何让带用title bar的datawindow控件的标题栏呈活动窗口的颜色?外部函数定义:funcation logn SetActiveWindow(long hwnd ) Library ,user32.dir,datawindow控件的clicked事件代码:setactivewindow(handle(this)16、如何设置datawindow的当前行指示图标?在datawindow中建立一个计算列,
7、expression为“,并将该计算列挪移为datawindow 的第一个列,在datawindow控件的rowfocuschanged事件中写入代码:SetRowFocuslndicator(hand!)或者 setrowfucsindicator(p_1 )/p_1 为窗口上的 picture 控件名 17、如何通过代码打开dddw?定义外部函数引用声明:SUBROUTINE keybd_event( int bVk, int bScan, int dwFlags, int dwExtralnf o) LIBRARY ,user32.dlln 代码如下:constant integer V
8、K_F4 = 115dw_1 .SetFocus()dw_1,SetColumn( ndept_headjdn) / 设置当前 dddwkeybd_event( VK_F4,0,0,0 ) / 按下 F4键keybd_event( VK_F4,0,2,0 ) / 释放 F4键18、如何打印datawindow的内容到文件中?dw_1 .object.datawindow.print.fileName =nc:temp.prnndw_1.print()19、如何设置dddw的初始值?dw_1.object.columnname. lnitial=yourJnitial_value20、如何只显示
9、不同的数据?dw_1 .filter(nisnull(columnname-1 ) and columnnamecolumnname-1 *)21、如何让带有Htlebar的datawindow不可以挪移?在datawindow的自定义事件ue_nc%ttest(pbm_ncMttest)中写入如I下代码:return 122、如何在N4JP显示风格中建立基于第N栏中的列的计算列?如column有两列,number和price ,并显示为两栏,则第一栏的cost计算列的expr ession 为 number*price,第二栏的 cost_1 计算列的 expression 为 number
10、1*price123、如何清空ddlb或者edit.codetable中项目?dw_1 .Object.columnname. Values=,n24、如何实现指定的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(nM)szselect=dw_1.describe(H
11、datawindow. table.select. attribute1)szselect=dw_1 .getsqlselect()26、如何获取datawindow对象占有的虚拟存储的容量?使用 datawindow.storage 属性举例:在datawindow控件的retrieverow事件中,写入如下代码:long Istoragelstorage=long(dw_1 .object.datawindow. storage)if lstorage50000 then dbcancel()27、如何连续在同一张纸打印两个数据窗口?dw_1 .object.datawindow.prin
12、t.filename=,temp.prnHdw_2.object.datawindow.print.filename=,temp.prnHdw_1 .print()dw_2.print()28、如何设置datawindow分组后每一个分组中的记录号?建立一个计算歹U, expression 为 getrow() - first(getrow() for group 1)+129、如何实现在datawindow中惟独新增的行,才可以编辑?在所有的column的protect属性表达式中写入以下表达式:if(isrownew();071,)30、除了循环以外,有没有更好的方法统计数据窗口中处于选中
13、状态的行数?普通习惯于使用循环来统计数据窗口中处于选中状态的行数,有没有更好的方法?其实 此问题在应用上用处不大,讨论一下,活跃一下思维还是有好处的。方法一:long ll_Selectedll_Selected = long(dw_1 .describe(,evaluate(,sum( if(lsSelected(), 1, 0) for all)1) )方法二:long ll_Selectedll_Selected = long(dw_1.describee*evaluate(count(lsSelected() for all)1) 方法三:upperbound(dw_1 .Object
14、. Data. Selected)31、怎么让PB只打印当前记录,是用Free格式制作的数据窗口!DataStore ldt_temp long ll_Row , ll_Rows ll_Rows = dw_XX.Rowcount()If ll_Rows = 0 Then GoTo the_endIf ll_Rows = 1 Then dw_XX.Print() GoTo the_endEnd ifdw_XX. SetRedraw( False) ldt_terrip = Create DataStore ldt_temp. DataObject = dw_XX.DataObject ll_Ro
15、w = dw_XX.GetRow()dw_XX.RowsMove( 1 , ll_Rows , Primary! , ldt_temp , 1 , Primary!)Idt_temp.RowsMove(ll_Row , ll_Row , Primary! , dw_XX , 1 , Primary!) dw_XX.Print()dw_XX.RowsMove( 1 , 1 , Primary! , ldt_temp , ll_Row , Primary!)Idt_ternp.RowsMove( 1 , ll_Rows , Primary! , dw_XX , 1 , Primary!)Destr
16、oy ldt_temp dw_XX. SetRedraw(T rue) the_end:只用将上述脚本拷入到打印部份即可,dw_XX为被打印的free型数据窗口,该方法可 保证dw_XX中的数据在打印先后包括sort等属性均不发生任何改变,但效率较低,不宜用 在数据量太大的数据窗口中,固然,考虑到打印本身速度就比较慢,所以3000行数据是可 以采用这种方法并让用户接受的。若在同一窗口上存在与dw_XX共享的grid数据窗口并且 与dw_XX同时显示,则需要与dw_one一起SetRedraw()o 32、字段如何自动换行的同时且自动高度?将数据窗口中相应列的auto horz scroll为不
17、选中,选中autosize height;将detail 的autosize height选中。在数据窗口 retrieve后调用下面函数即可:uf_set_text(datawindow adw_content,string as_columns, boolean, ab_ignoreblank)Describe:在数据窗口 adw_content中,在as_columns中包含的列中插入空格Args : as_columns要操作的多个列,列间用逗号隔开 */ if (not isvalid(adw_content) or isnull(as_columns) or len(as_colu
18、mns)1 or isnull (ab_ignoreblank) then return -1n_cst_string lnv_stringstring ls_column , ls_width ,as_source,as_repIaced ,ls_temp int li_upperbound , li_width , li_column , li_fontWidth, li_counter long ll_rowcount , ll_row , ll_totalstep int li_yieldlnv_string.of_parsetoarray(as_columns,VJs_column)
19、 li_upperbound = upperbound(ls_column)11_ rowcount = adw_content. rowcount()if li_upperbound1 or ll_rowcount1 then return -1 openwithparm(w_waiting,this) ib_cancel = false iw_frame. enabled = falsell_totalstep = ll_rowcount * li_upperboundw_waiting.uf_register(ll_totalstep)for li_column = 1 to li_up
20、perboundls_width = adw_content.describe(ls_columnli_column+n. width) li_width = integer(ls_width)if ls_width=,!1 or ls_width=? or li_width=0 then continue end if/ls_temp = adw_content.describe(ls_columnli_column+,.Font.property = w idth,“)/messagebox(ls_columnli_column+H.Font.property = width1 n,ls_
21、temp) /return 1 li_fontwidth = 27li_counter = li_width / li_fontWidthfor ll_row=1 to ll_rowcountif ib_cancel theniw_frame. enabled = truereturn 0/pressed cancel buttonend ifas_source = adw_content.getitemstring(ll_rowjs_columnli_column) as_replaced = uf_insertstring(as_sourceJli_counterJ false) if a
22、s_replacedas_source thenadw_content.setitem(ll_row,ls_columnli_column,as_replaced) end ifw_waiting.uf_stepit()nextnextclose(w_waiting)iw_frame. enabled = truereturn 133、如何使dw的列不可挪移,不可调整列宽?在 datawindow 的 cilcked 事件写:if row=0 then return 1 end if34、光标跳转到数据窗口的某一行某一列dw_1 .scrolltorow(ll_row)dw_1 .setcol
23、umn(ll_column)35、如何使光标指向每页第一行?long ll_firstrowonpage=long(dw_1 .describe(,datawindow.firstrowonpageH)dw_1 .scrolltorow (ll_firstrowonpage)dw_1 .setrow(ll_firstrowonpage)36、Grid的窗口如何使第一列固定不动?选上 data OBJECT 的 HSphtScroll 属性在constructor事件中:dw_1 .Object. DataWindow. HorizontalScrollSplit=integer(dw_1 .d
24、escribe(n#1 .width*) 第一列的宽度在 scrollhorizontal 事件中:int iif pane = 1 theni = integer(this. OBJECT. datawindow.horizontalscrollposition2)if i 0 thenthis. OBJECT. datawindow.horizontalScrollPosition = 0end if elsei = integer(this. Object. DataWindow. HorizontalScrollSplit)if i scrollpos thenthis.OBJECT.
25、datawindow.horizontalScrollPosition2 = iend if end if37、如何禁止修改grid数据窗口列宽度在Grid数据窗口的Clicked事件中加入:If row = 0 Then return 138、grid数据窗口改变列宽度事件:event: pbm_lbuttondown,pbm_mousemvoe,pbm_lbuttonup 如果:,pbm_lbuttondown:在数据窗口标题栏(getrow() = 0 and GetObjectAtPointer=你的标题)按下鼠标左键,记一个标志;,pbm_mousemvoe:鼠标挪移了,在记一个标志
26、;“ pbmjbuttonup:这时鼠标左键up,再判断最后一列的位置是否发生变化,如果有, _|写你的脚本。39、如何判断数据窗口内容是否修改if dw_wh.deletedcount() + dw_wh. modifiedcount() 0 theninteger li_retli_ret = messagebox(“注意数据已经被修改,是否存盘? ,Question!,YesNoCa ncel!) end if40、如何得到数据窗口鼠标光标下的控件和行建立一个自定义事件,事件号pbm_dwnmousemove,事件有参数row dwo41、数据窗口循环删除行,必须要从最后一行开始删除,如for ll_row =dw_1 .rowcount() to 1 step -1if删除条件thendw_1 ,deleterow(ll_row)next固然,也可以用do while加之find函数实现。