专业seo整站优化,泉州企业建站系统,企业网站推广排名,网站内容页收录60个数据窗口技巧 1.如何让存储文件目录的列#xff0c;显示图片? 答#xff1a;选择对应的column的display as picture属性为true 2、如何复制grid类型的所选择的行的数据到系统剪切板#xff1f;答#xff1a;string ls_selectedls_selecteddw_1.Object.DataWindow.Sel… 60个数据窗口技巧 1.如何让存储文件目录的列显示图片? 答选择对应的column的display as picture属性为true 2、如何复制grid类型的所选择的行的数据到系统剪切板答string ls_selectedls_selecteddw_1.Object.DataWindow.Selected.Dataclipboard(ls_selected)3、如何复制graph风格的datawindow中的图形到剪切板答dw_1.clipbord(gr_1)4、如何设置的DW底色在DW的editsource中改变color的值5、如何将Grid风格改成自由格式在DW的editsource中将processing1的1改为06、要新建一个表A但风格和现有表格B风格一样怎么将A表快速设置成表B风格复制B表C在C表的DW中的editsource中将表名和字段名改成A表的即可7、如何实现gird风格的datawindow的多栏表头答添加 text到header带区并设置band属性为foreground保存edit source 修改text的x和width属性表达式如下x100~t integer(describe(firstcol.x) width100~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.currentls_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_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.QueryModeyes将datawindow改变为查询模式后接收用户的输入再使用一下代码获取结果 dw_1.accepttext() dw_1.retrieve()13、如何缩放datawindow的打印大小答dw_1. O B J E C T.datawindow.zoom150 or dw_1. O B J E C T.datawindow.zoom7514、如何在已过滤后的数据基础上对datawindow进行过滤答dw_1.setfilter(dw_1.describe(datawindow.table.filter)your_joinyour_new_filter) dw_1.filter()15、如何在datawindow中显示动态时间答建立一个计算域表达式为string(datetime(today(),now()),yyyy年mm月dd日 hh点mm分ss秒),同时设置datawindow的属性dw_1.Object.DataWindow.Timer_Interval50016、如何让带用title bar的datawindow控件的标题栏诚活动窗口的颜色答外部函数定义funcation logn SetActiveWindow(long hwnd ) Library user32.dlldatawindow控件的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.Initialyour_initial_value21、如何只显示不同的数据答dw_1.filter(isnull(columnname[-1]) and columnnamecolumnname[-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.Values25、如何实现指定的column的字体旋转90度答dw_1. O B J E C T.columnname.font.Escapement 90026、如何获取datawindow的sql代码答 可以通过以下四种方法获取sql代码 string szselect szselectdw_1.describe(datawindow.table.select) szselectdw_1.describe(datawindow.table.sqlselect) szselectdw_1.describe(datawindow.table.select.attribute) szselectdw_1.getsqlselect() 27、如何获取datawindow对象占有的虚拟存储的容量答使用datawindow.storage属性 举例在datawindow控件的retrieverow事件中写如如下代码 long lstorage lstoragelong(dw_1. O B J E C T.datawindow.storage) if lstorage50000 then dbcancel()28、如何控制打印横向dw_control. O B J E C T.datawindow.print.orientation 1 29、如何进行预览dw_control. O B J E C T.datawindow.print.preview yes30、如何连续在同一张纸打印两个数据窗口答dw_1. O B J E C T.datawindow.print.filenametemp.prn dw_2. O B J E C T.datawindow.print.filenametemp.prn dw_1.print() dw_2.print()31、如何将pb9.0 的datawindow转化为pb 8.0版本的datawindow?答edit source 将release 9;改为release 8; 并删除以下内容 print.printername print.canusedefaultprinteryes print.cliptextno print.overrideprintjobno hidegraylineno encodeselflinkargs1 export.xml(headgroups1 includewhitespace0 metadatatype0 savemetadata0 ) import.xml() export.pdf(method0 distill.custompostscript0 xslfop.print0 )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 method if dw_1.SaveAs(docname, HTMLTable!, True) -1 then MessageBox(Warning, Unable to export data. Error writing to file!, Exclamation!) return end if // Convert HTML file to Excel native format OLEObject excel excel CREATE OLEObject if excel.ConnectToObject(docname) 0 then excel.application.DisplayAlerts FALSE excel.application.workbooks(1).Parent.Windows(excel.application.workbooks(1).Name).Visible True excel.application.workbooks(1).saveas(docname, 39) excel.application.workbooks(1).close() end if DESTROY excel // done 35、除了循环以外有没有更好的方法统计数据窗口中处于选中状态的行数一般习惯于使用循环来统计数据窗口中处于选中状态的行数有没有更好的方法 其实此问题在应用上用处不大讨论一下活跃一下思维还是有好处的。 方法一 long ll_Selected ll_Selected long(dw_1.describe(evaluate(sum( if(IsSelected(), 1, 0) for all),1))) 方法二 long ll_Selected ll_Selected long(dw_1.describe(evaluate(count(IsSelected() for all),1))) 方法三upperbound(dw_1.Object.Data.Selected)36、问怎么让PB只打印当前记录,是用Free格式制作的数据窗口 答 DataStore ldt_temp long ll_Row , ll_Rows ll_Rows dw_XX.Rowcount() If ll_Rows 0 Then GoTo the_end If ll_Rows 1 Then dw_XX.Print() GoTo the_end End if dw_XX.SetRedraw(False) ldt_temp Create DataStore ldt_temp.DataObject dw_XX.DataObject ll_Row dw_XX.GetRow() dw_XX.RowsMove(1 , ll_Rows , Primary! , ldt_temp , 1 , Primary!) ldt_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!) ldt_temp.RowsMove(1 , ll_Rows , Primary! , dw_XX , 1 , Primary!) Destroy ldt_temp dw_XX.SetRedraw(True) the_end: //只用将上述脚本拷入到打印部分即可dw_XX为被打印的free型数据窗口该方法可保证dw_XX中的数据在打印前后包括sort等属性均不发生任何改变但效率较低不宜用在数据量太大的数据窗口中当然考虑到打印本身速度就比较慢所以3000行数据是可以采用这种方法并让用户接受的。若在同一窗口上存在与dw_XX共享的grid数据窗口并且与dw_XX同时显示则需要与dw_one一起SetRedraw() 37、怎样将数据窗口(free格式)中的内容转成word文档答给你两个函数 (1)、辅助函数 $PBExportHeader$f_cncharnum.srf $PBExportComments$得到字符串中汉字或者双字节的个数 global type f_cncharnum from function_ O B J E C T end type forward prototypes global function integer f_cncharnum (string aString) end prototypes global function integer f_cncharnum (string aString); //函数名: f_cncharnum //用途: 返回一个字符串中汉字的个数 //输入: aString - string, 给定的字符串 //返回值: li_num - Integer, 给定的字符串中汉字的个数 //注意: 1. 此方法基于汉字的国标汉字库区位编码的有效性不符合此编码的系统此函数无效 // 2. 若汉字串含有非汉字字符,如图形符号或ASCII码,则这些非汉字字符将保持不变. //例如: li_ret f_cncharnum(摆渡人ferryman) li_ret 3 string ls_ch //临时单元 string ls_SecondSecTable //存放所有国标二级汉字读音 integer li_num 0 //返回值 integer i,j For i 1 to Len(aString) ls_ch Mid(aString,i,1) If Asc(ls_ch) 128 then //是汉字 li_num i i1 End if Next Return li_num end function --------------------------------------------------------------- (2)、转到WORD $PBExportHeader$f_outputtoword_new.srf global type f_outputtoword_new from function_ O B J E C T end type forward prototypes global function integer f_outputtoword_new (datawindow adw) end prototypes global function integer f_outputtoword_new (datawindow adw); //函数名:f_outputtoword_new //输入: adw - datawindow,指定的数据窗口 //返回值: Integer constant integer ppLayoutBlank 12 OLEObject ole_ O B J E C T ole_ O B J E C T CREATE OLEObject integer li_ret li_ret ole_ O B J E C T.ConnectToObject(,word.application) IF li_ret 0 THEN //如果Word还没有打开则新建。 li_ret ole_ O B J E C T.ConnectToNewObject(word.application) if li_ret 0 then MessageBox(OLE错误,OLE无法连接!错误号 string(li_ret)) return 0 end if ole_ O B J E C T.Visible True END IF long ll_colnum,ll_rownum constant long wdWord9TableBehavior 1 constant long wdAutoFitFixed 0 constant long wdCell 12 string ls_value pointer oldpointer oldpointer SetPointer(HourGlass!) string ls_ O B J E C Ts,ls_obj,ls_objs[],ls_objtag[] long ll_pos,ll_len,ll_num 0 ls_ O B J E C Ts trim(adw.Describe(datawindow.Objects)) do while (pos(ls_ O B J E C Ts,~t) 0) ll_pos pos(ls_ O B J E C Ts,~t) ll_len ll_pos - 1 ls_obj left(ls_ O B J E C Ts,ll_len) if (adw.Describe(ls_obj .type) column or adw.Describe(ls_obj .type) compute) and (adw.Describe(ls_obj .band) detail) and (ls_obj asd) then ll_num 1 ls_objs[ll_num] ls_obj ls_objtag[ll_num] adw.Describe(ls_obj .tag) end if ls_ O B J E C Ts right(ls_ O B J E C Ts,len(ls_ O B J E C Ts) - ll_pos) loop //得到数据窗口数据的列数与行数行数应该是数据行数 1 ll_colnum ll_num ll_rownum adw.rowcount() 1 ole_ O B J E C T.Documents.Add() ole_ O B J E C T.ActiveDocument.Tables.Add(ole_ O B J E C T.Selection.Range, ll_rownum, ll_colnum) string ls_colname integer i,j,k for i 1 to ll_colnum //得到标题头的名字 ls_value ls_objtag ole_ O B J E C T.Selection.TypeText(ls_value) for k 1 to f_cncharnum(ls_value) ole_ O B J E C T.Selection.TypeBackspace() next ole_ O B J E C T.Selection.MoveRight(wdCell) next adw.setredraw(false) ole_ O B J E C T.Selection.MoveLeft(wdCell) string column_name for i 2 to ll_rownum for j 1 to ll_colnum column_name ls_objs[j] if adw.Describe(column_name .type) column then ls_value adw.Describe(Evaluate(LookupDisplay(column_name),string(i - 1))) end if if adw.Describe(column_name .type) compute then ls_value adw.Describe(Evaluate( adw.Describe(column_name .expression) ,string(i - 1))) end if ole_ O B J E C T.Selection.MoveRight(wdCell) ole_ O B J E C T.Selection.TypeText(ls_value) //for k 1 to f_cncharnum(ls_value) //ole_ O B J E C T.Selection.TypeBackspace() //next next next adw.setredraw(true) constant long wdFormatDocument 0 SetPointer(oldpointer) //保存新建的文档 if messagebox(保存,文档已经成功完成是否保存,Question!,YesNo!) 1 then string docname, named integer value value GetFileSaveName(选择文件,docname, named, DOC,Doc Files (*.DOC), *.DOC) IF value 1 THEN ole_ O B J E C T.ActiveDocument.SaveAs(docname, 0,False,,True,,False,False,False, False,False) end if end if //断开OLE连接 Ole_Object.DisConnectObject() Destroy Ole_Object return 1 end function 38、字段如何自动换行的同时且自动高度答将数据窗口中相应列的auto horz scroll 为不选中选中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_columns)1 or isnull(ab_ignoreblank) then return -1 n_cst_string lnv_string string ls_column[] , ls_width ,as_source,as_replaced ,ls_temp int li_upperbound , li_width , li_column , li_fontWidth, li_counter long ll_rowcount , ll_row , ll_totalstep int li_yield lnv_string.of_parsetoarray(as_columns,,,ls_column) li_upperbound upperbound(ls_column) ll_rowcount adw_content.rowcount() if li_upperbound1 or ll_rowcount1 then return -1 openwithparm(w_waiting,this) ib_cancel false iw_frame.enabled false ll_totalstep ll_rowcount * li_upperbound w_waiting.uf_register(ll_totalstep) for li_column 1 to li_upperbound ls_width adw_content.describe(ls_column[li_column].width) li_width integer(ls_width) if ls_width! or ls_width? or li_width0 then continue end if //ls_temp adw_content.describe(ls_column[li_column].Font.property { width }) //messagebox(ls_column[li_column].Font.property { width },ls_temp) //return 1 li_fontwidth 27 li_counter li_width / li_fontWidth for ll_row1 to ll_rowcount if ib_cancel then iw_frame.enabled true return 0 //pressed cancel button end if as_source adw_content.getitemstring(ll_row,ls_column[li_column]) as_replaced uf_insertstring(as_source,li_counter, ,false) if as_replacedas_source then adw_content.setitem(ll_row,ls_column[li_column],as_replaced) end if w_waiting.uf_stepit() next next close(w_waiting) iw_frame.enabled true return 1 39、如何动态外部创建数据窗口答首先制作一个自己想动态得到的数据窗口,然后将该数据窗口导出,看看语法,这样你就了解了这种数据窗口的生成语法了! --------------------------------------------------------------- dw_1.create() 可以参考帮助 以及 srd文件数据窗口导出文件 --------------------------------------------------------------- 动态数据窗创建原理及实现 在实际应用中经常需要根据用户需求来动态创建数据窗一般方法是这样的。 在一个window中加入一个数据窗控件如dw_new,但是该数据窗没有data O B J E C T,(空白的) 就可以用以下语法来创建 dw_new.create(ls_syntax,ls_error) // 创建语法错误信息 ls_syntax可以用以下三种方法来形成 一、动态由sql语法创建 // 连接到pb的example数据库 string ls_sql,ls_syntax,ls_error ls_syntax select * from department ls_syntax sqlca.SyntaxFromSQL(ls_sql,style(typegrid),ls_error) if len(ls_error) 0 then messagebox(Error,SyntaxFromSQL Error:~rls_error) else dw_new.create(ls_syntax,ls_error) if len(ls_error) 0 then MessageBox(Error, Create have these errors: ~r ls_error) else dw_new.settrans O B J E C T(sqlca) dw_new.retrieve() end if end if 二、由另一个数据窗的syntax来创建 string ls_syntax,ls_error ls_syntax dw_test.describe(datawindow.syntax) dw_new.create(ls_syntax,ls_error) if ls_error then messagebox(Create Error,ls_error) else dw_new.settrans O B J E C T(sqlca) dw_new.retrieve() end if 三、读取psr文件来创建 样例 string ls_syntax,ls_error,ls_ret ls_ret char(13)char(10) //回车键 int li_fileNum long li_length li_FileNum FileOpen(efef.psr,Streammode!, read!, shared!, Replace!) // 以下是pb5的代码 if li_filenum 0 then FileSeek(li_FileNum, 158, FromBeginning!) li_length fileRead(li_filenum,ls_syntax) end if fileclose(li_filenum) if li_length 0 then return ls_syntax release 5;ls_retls_syntax //截掉ls_syntax中的数据部分5.0以sparse(namesdept_name?) 作为参考位置 //6.0以html(作为参考位置 long pos1,pos2 pos1 pos(ls_syntax,sparse(names,1) pos2 pos(ls_syntax,,pos1 16) ls_syntax left(ls_syntax,pos1) mid(ls_syntax,pos1 1,pos2 - pos1 1) dw_New.create(ls_syntax,ls_error) if ls_error then messagebox(Create Error,ls_error) else dw_new.settrans O B J E C T(sqlca) dw_new.retrieve() end if global type f_createextenddw from function_ O B J E C T end type forward prototypes global function string f_createextenddw (ref datawindow dw, string cols[]) end prototypes global function string f_createextenddw (ref datawindow dw, string cols[]);string sql_dw_general, sql_dw_columns_type, sql_dw_headers_conf, sql_dw_columns_conf, ls_errors int i long ll_colcount string ls_colnametype string ls_colname,ls_coltype long ll_pos ll_colcount upperbound(cols) //generals sql_dw_general release 8; datawindow(units0 timer_interval0 color16777215 processing0 print.documentname char(34) char(34) print.orientation 0 print.margin.left 110 print.margin.right 110 print.margin.top 96 print.margin.bottom 96 print.paper.source 0 print.paper.size 0 print.promptno print.buttonsno print.preview.buttonsno ) header(height72 color char(34) 536870912 char(34) ) summary(height0 color char(34) 536870912 char(34) ) footer(height0 color char(34) 536870912 char(34) ) detail(height84 color char(34) 536870912 char(34) ) //列及类型 sql_dw_columns_type table( FOR I1 to ll_colcount ls_colnametype trim(cols) ls_colname right(ls_colnametype,len(ls_colnametype) - 1) ls_coltype left(ls_colnametype,1) choose case upper(ls_coltype) case C ls_coltype char(100) case D ls_coltype date case N ls_coltype decimal(6) case else ls_coltype char(100) end choose //ls_coltype char(100) //列及类型 sql_dw_columns_type sql_dw_columns_type column(type ls_coltype updatewhereclauseno name ls_colname dbname char(34) ls_colname char(34) ) //列标题 sql_dw_headers_conf sql_dw_headers_conf text(bandheader alignment char(34) 2 char(34) text char(34) ls_colname char(34) border char(34) 6 char(34) color char(34) 16711680 char(34) x char(34) string( ((i - 1) * 588) 5) char(34) y char(34) 4 char(34) height char(34) 64 char(34) width char(34) 574 char(34) name ls_colname _t font.face char(34) Arial char(34) font.height char(34) -10 char(34) font.weight char(34) 400 char(34) font.family char(34) 2 char(34) font.pitch char(34) 2 char(34) font.charset char(34) 0 char(34) background.mode char(34) 2 char(34) background.color char(34) 12632256 char(34) ) //列属性 sql_dw_columns_conf sql_dw_columns_conf column(banddetail id string(i) alignment char(34) 1 char(34) tabsequence string(i) 0 border char(34) 2 char(34) color char(34) 0 char(34) x char(34) string( ((i - 1) * 588) 5) char(34) y char(34) 4 char(34) height char(34) 76 char(34) width char(34) 579 char(34) format char(34) [general] char(34) name ls_colname edit.limit0 edit.caseany edit.autoselectyes edit.autohscrollyes font.face char(34) Arial char(34) font.height char(34) -10 char(34) font.weight char(34) 400 char(34) font.family char(34) 2 char(34) font.pitch char(34) 2 char(34) font.charset char(34) 0 char(34) background.mode char(34) 1 char(34) background.color char(34) 536870912 char(34) ) NEXT sql_dw_columns_type sql_dw_columns_type ) sql_dw_columns_conf sql_dw_columns_conf htmltable(border char(34) 1 char(34) cellpadding char(34) 0 char(34) cellspacing char(34) 0 char(34) generatecss char(34) no char(34) nowrap char(34) yes char(34) ) //MESSAGEBOX(,sql_dw_general sql_dw_columns_type sql_dw_headers_conf 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 function 40、如何让datawindow的heade带区r的内容只打印一次答a、制作两个数据窗口第一个有表头第二个没有。 b、用第一个有表头的数据读取数据库中的数据 c、打印有表头的数据窗口中的第一页记住结束行号 d、将从结束行号开始的所有数据复制到第二个数据窗口中 e、打印第二个数据窗口 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(datawindow. O B J E C Ts) EndPos pos(list, ~t, StartPos) Do while ( EndPos 0 ) token Mid(list, StartPos, EndPos - StartPos) i StartPos EndPos 1 EndPos pos(list, ~t, StartPos) LOOP token Mid(list, StartPos) Top UpperBound(token[]) //找出最后一列 string ls_lastcol int li_lastpos0,li_thispos For i 1 to Top CHOOSE CASE UPPER(adw_1.Describe(token .type)) CASE COLUMN, COMPUTE li_thispos integer(adw_1.Describe(token .X)) if li_thisposli_lastpos then //这是目前最后一列 li_lastposli_thispos ls_lastcoltoken end if end choose NEXT //设置表头长度 string ls_change ls_change800~tlong(describe(ls_lastcol.x)) long(describe(ls_lastcol .width)) 10 //messagebox(,ls_change) adw_1.modify(title.widthls_change) return 1 42、如何在数据窗中得到自动高的列的高度答desceibe(evaluate(RowHeight(),3)) //获得第三行的row的高度 42、如何使dw的列不可移动不可调整列宽答在datawindow的cilcked事件写 if row0 then return 1 end if 43.光标跳转到数据窗口的某一行某一列dw_1.scrolltorow(ll_row)dw_1.setcolumn(ll_column) 44 如何使光标指向每页第一行? long ll_firstrowonpagelong(dw_1.describe(datawindow.firstrowonpage)) dw_1.scrolltorowll_firstrowonpage) dw_1.setrow(ll_firstrowonpage) 45. Grid的窗口如何使第一列固定不动 ①选上data OBJECT的HSplitScroll属性②在constructor事件中dw_1.Object.DataWindow.HorizontalScrollSplitinteger(dw_1.describe(#1.width)) //第一列的宽度③在scrollhorizontal事件中int i if pane 1 then i integer(this.OBJECT.datawindow.horizontalscrollposition2) if i 1 or isnull(i) then return if scrollpos 0 then this.OBJECT.datawindow.horizontalScrollPosition 0 end if 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 46. 怎样取子数据窗口的总列数 ll_column_countinteger(dwc.describe(datawindow.column.count)) //dwc为子窗口47.在数据窗口过滤以后,计算列值如何才能一起改变? dw_1.setfilter(filter_condition) dw_1.filter() dw_1.groupcalc() 48.怎么改变某一列的背景颜色dw_1.Modify(sno.background.mode2 )dw_1.Modify ( sno.background.Color255 ) 49.在数据窗口中如何delete选中的多行 Long ll_rows , ll_row ll_rowsDW_1.RowCount() for ll_row ll_rows to 1 step -1 if dw_1.isSelected(ll_row) then dw_1.DeleteRow(ll_row) end if next 50.如何改变列的字体颜色提醒用户此列已做修改 在列的Color属性中输入如下表达式 IF (column_name column_name.Original, RGB(255, 0, 0), RGB(0, 0, 0)) 51.数据窗口中限定某列不可编辑 用DataWindow的clicked事件中的方法也可以实现列的保护。若某列不可更改,则可置r otect0。即:dw_1.modify(columnname.protect0)或dw_1.modify(#string(number).protect0)若要将该列改为可更改,则置protect1,即:dw_1.modify(:columnname.protect1)或dw_1.modify(#string(number).protect1)此方法不影响Tab键的移动,用户可以随意拉动列,还可在应用过程中自己决定哪一列可编辑,哪一列不可编辑。52.怎样去掉上图中数据窗口中的黑影? this.Modify (DataWindow.selected.mouseno)this.Modify (DataWindow.Grid.ColumnMove false) 53 实现逐行增加求和 使用计算列CumulativeSumfield 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 DBTextLimit 9999 60、点击grid类型数据窗口的header自动排序。图片自己做/**args: i_str_oldcol*note:实例变量纪录上次点击的列*/string i_str_oldcolstring str_ O B J E C Tname, str_curcol, str_addpicinteger int_pic_xstr_ O B J E C Tname string (dwo.name) //对象名称if row 0 and this.describe(str_ O B J E C Tname.band) header and this.describe(str_ O B J E C Tname.text) ! then //是否点击列对象 str_curcol left(str_ O B J E C Tname,len(str_ O B J E C Tname) - 2) //当前列对象名称 if str_curcol i_str_oldcol then //点击的是不同列对象 this.modify(destroy p_sort) //不管有没有位图对象都删除 i_str_oldcol str_curcol //保存上次点击的列对象 //画图 int_pic_x integer(this.describe(str_ O B J E C Tname.x)) (integer(this.describe(str_ O B J E C Tname.width)) - 70) str_addpic create bitmap(band foreground filename ..\pic\up.bmp x string(int_pic_x) y 24 height 48 width 48 border 0 name p_sort visible 1) this.modify(str_addpic) //动态画个图 this.setsort(str_curcol A) //头一次点击当然是升序了 this.sort() else //当前列已经点过了 if this.describe(p_sort.filename) ..\pic\up.bmp then //上次是升序 this.modify(p_sort.filename ..\pic\down.bmp) this.setsort(str_curcol D) //这次是降序 else this.modify(p_sort.filename ..\pic\up.bmp) this.setsort(str_curcol A) end if this.sort() end ifend if 1、如何让存储文件目录的列显示图片 答选择对应的column的display as picture属性为true 2、如何复制grid类型的所选择的行的数据到系统剪切板 答string ls_selected ls_selecteddw_1.Object.DataWindow.Selected.Data clipbord(ls_selected) 4、如何设置的DW底色 在DW的editsource中改变color的值 5、如何将Grid风格改成自由格式 在DW的editsource中将processing1的1改为0 6、要新建一个表A但风格和现有表格B风格一样怎么将A表快速设置成表B风格 复制B表C在C表的DW中的editsource中将表名和字段名改成A表的即可 7、如何实现gird风格的datawindow的多栏表头 答添加 text到header带区并设置band属性为foreground保存edit source 修改text的x和width属性表达式如下 x100~t integer(describe(firstcol.x) width100~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.currentls_temp 10、如何设置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.zoom150 or dw_1.object.datawindow.zoom75 13、如何在已过滤后的数据基础上对datawindow进行过滤答dw_1.setfilter(dw_1.describe(datawindow.table.filter)your_joinyour_new_filter)dw_1.filter() 14、如何在datawindow中显示动态时间答建立一个计算域表达式为string(datetime(today(),now()),yyyy年mm月dd日 hh点mm分ss秒),同时设置datawindow的属性dw_1.Object.DataWindow.Timer_Interval500 15、如何让带用title bar的datawindow控件的标题栏诚活动窗口的颜色答外部函数定义funcation logn SetActiveWindow(long hwnd ) Library user32.dlldatawindow控件的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.prndw_1.print() 19、如何设置dddw的初始值答dw_1.object.columnname.Initialyour_initial_value 20、如何只显示不同的数据答dw_1.filter(isnull(columnname[-1]) and columnnamecolumnname[-1])dw_1.filter() 21、如何让带有title bar的datawindow不可以移动答在datawindow的自定义事件ue_nchittest(pbm_nchittest)中写入如下代码return 1 22、如何在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 szselectszselectdw_1.describe(datawindow.table.select)szselectdw_1.describe(datawindow.table.sqlselect)szselectdw_1.describe(datawindow.table.select.attribute)szselectdw_1.getsqlselect() 27、如何获取datawindow对象占有的虚拟存储的容量答使用datawindow.storage属性举例在datawindow控件的retrieverow事件中写如如下代码long lstoragelstoragelong(dw_1.object.datawindow.storage)if lstorage50000 then dbcancel() 28、如何连续在同一张纸打印两个数据窗口答dw_1.object.datawindow.print.filenametemp.prndw_2.object.datawindow.print.filenametemp.prndw_1.print()dw_2.print() 29、如何设置datawindow分组后每个分组中的记录号答建立一个计算列expression为 getrow() - first(getrow() for group 1)1 30、如何实现在datawindow中只有新增的行才可以编辑答在所有的column的protect属性表达式中写入以下表达式if(isrownew(),0,1) 31、除了循环以外有没有更好的方法统计数据窗口中处于选中状态的行数一般习惯于使用循环来统计数据窗口中处于选中状态的行数有没有更好的方法其实此问题在应用上用处不大讨论一下活跃一下思维还是有好处的。方法一 long ll_Selected ll_Selected long(dw_1.describe(evaluate(sum( if(IsSelected(), 1, 0) for all),1)))方法二 long ll_Selected ll_Selected long(dw_1.describe(evaluate(count(IsSelected() for all),1)))方法三upperbound(dw_1.Object.Data.Selected) 32、问怎么让PB只打印当前记录,是用Free格式制作的数据窗口---------------------------------------------------------------答DataStore ldt_templong ll_Row , ll_Rowsll_Rows dw_XX.Rowcount()If ll_Rows 0 Then GoTo the_endIf ll_Rows 1 Thendw_XX.Print()GoTo the_endEnd ifdw_XX.SetRedraw(False)ldt_temp Create DataStoreldt_temp.DataObject dw_XX.DataObjectll_Row dw_XX.GetRow()dw_XX.RowsMove(1 , ll_Rows , Primary! , ldt_temp , 1 , Primary!)ldt_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!)ldt_temp.RowsMove(1 , ll_Rows , Primary! , dw_XX , 1 , Primary!)Destroy ldt_tempdw_XX.SetRedraw(True)the_end:// 只用将上述脚本拷入到打印部分即可dw_XX为被打印的free型数据窗口该方法可保证dw_XX中的数据在打印前后包括sort等属性均不发生任何改变但效率较低不宜用在数据量太大的数据窗口中当然考虑到打印本身速度就比较慢所以3000行数据是可以采用这种方法并让用户接受的。若在同一窗口上存在与dw_XX共享的grid数据窗口并且与dw_XX同时显示则需要与dw_one一起SetRedraw() 38、字段如何自动换行的同时且自动高度答将数据窗口中相应列的auto horz scroll 为不选中选中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_columns)1 or isnull(ab_ignoreblank) then return -1 n_cst_string lnv_string string ls_column[] , ls_width ,as_source,as_replaced ,ls_temp int li_upperbound , li_width , li_column , li_fontWidth, li_counter long ll_rowcount , ll_row , ll_totalstep int li_yield lnv_string.of_parsetoarray(as_columns,,,ls_column) li_upperbound upperbound(ls_column) ll_rowcount adw_content.rowcount() if li_upperbound1 or ll_rowcount1 then return -1 openwithparm(w_waiting,this) ib_cancel false iw_frame.enabled false ll_totalstep ll_rowcount * li_upperbound w_waiting.uf_register(ll_totalstep) for li_column 1 to li_upperbound ls_width adw_content.describe(ls_column[li_column].width) li_width integer(ls_width) if ls_width! or ls_width? or li_width0 then continue end if //ls_temp adw_content.describe(ls_column[li_column].Font.property { width }) //messagebox(ls_column[li_column].Font.property { width },ls_temp) //return 1 li_fontwidth 27 li_counter li_width / li_fontWidth for ll_row1 to ll_rowcount if ib_cancel then iw_frame.enabled true return 0 //pressed cancel button end if as_source adw_content.getitemstring(ll_row,ls_column[li_column]) as_replaced uf_insertstring(as_source,li_counter, ,false) if as_replacedas_source then adw_content.setitem(ll_row,ls_column[li_column],as_replaced) end if w_waiting.uf_stepit() next next close(w_waiting) iw_frame.enabled true return 1 39、如何使dw的列不可移动不可调整列宽答在datawindow的cilcked事件写 if row0 then return 1 end if 40.光标跳转到数据窗口的某一行某一列dw_1.scrolltorow(ll_row) dw_1.setcolumn(ll_column) 41 如何使光标指向每页第一行?long ll_firstrowonpagelong(dw_1.describe(datawindow.firstrowonpage))dw_1.scrolltorowll_firstrowonpage)dw_1.setrow(ll_firstrowonpage) 42. Grid的窗口如何使第一列固定不动①选上data OBJECT的HSplitScroll属性 ②在constructor事件中 dw_1.Object.DataWindow.HorizontalScrollSplitinteger(dw_1.describe(#1.width)) //第一列的宽度 ③在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 if把如下代码放在某列的text color里可实现修改某行某列后该列变为红色否则为白色前景If(IsRowModified(), 255, 0) 弹出式菜单//m_module是菜单名m_module m_newmenum_newmenucreate m_modulem_newmenu.popmenu(pointerX(),pointerY()) 这段代码不用API就可以取IPInteger lifilenumString lsbat , lsdatString lstext,lsip[]Long i , llfilenamellfilename 0Do While Truellfilename lsbat C:\ String(llfilename) .BATIf FileExists(lsbat) Then Continue// If DirectoryExists(lsbat) Then ContinueExitLoopllfilename 0Do While Truellfilename lsdat C:\ String(llfilename) .DATIf FileExists(lsdat) Then Continue// If DirectoryExists(lsdat) Then ContinueExitLooplifilenum FileOpen(lsbat,linemode!, Write!, lockwrite!, Replace!)FileWrite(lifilenum,ipconfig lsdat)FileClose(lifilenum)Run(lsbat,minimized!)Do While TrueYield()If FileExists(lsdat) Then ExitLoopDo While TrueYield()lifilenum FileOpen(lsdat,linemode!)If lifilenum 0 Then ExitLoopDo While TrueYield()If FileRead(lifilenum, lstext) -100 Then ExitElse If Pos(lstext,IP Address) 0 Then lsip[UpperBound(lsip) 1] Mid(lstext,Pos(lstext,:) 1) End IfEnd IfLoopFileClose(lifilenum)FileDelete(lsbat)FileDelete(lsdat)If UpperBound(lsip) 0 ThenMessageBox(,没有网卡或网络连接未启用)ElseFor i 1 To UpperBound(lsip) MessageBox(IP:String(i),lsip)NextEnd If (声明win32 API函数 function int WSAStartup( uint UIVersionRequested, ref s_WSAData lpWSAData ) library wsock32.dll function int WSACleanup() library wsock32.dll function int WSAGetLastError ( ) library wsock32.dll function int gethostname ( ref string name, int namelen ) library wsock32.dll function string GetHost(string lpszhost, ref blob lpszaddress ) library pbws32.dll 使用方法 s_wsadata l_WSAData string ls_HostName space(128) string ls_IpAddress int li_version 257 blob{4} lb_hostaddress IF wsastartup ( li_version, l_WSAData ) 0 THEN IF gethostname ( ls_HostName, len(ls_HostName) ) 0 THEN messagebox(GetHostName,WSAGetLastError()) ELSE GetHost(ls_HostName, lb_HostAddress) ls_IpAddress string(asc(string(blobmid(lb_HostAddress,1,1))),000) . ls_IpAddress string(asc(string(blobmid(lb_HostAddress,2,1))),000) . ls_IpAddress string(asc(string(blobmid(lb_HostAddress,3,1))),000) . ls_IpAddress string(asc(string(blobmid(lb_HostAddress,4,1))),000) END IF WSACleanup() ELSE messagebox(GetHostName,WSAGetLastError()) END IF sle_1.textls_hostname sle_2.textls_ipaddress ) 嵌入桌面Function Ulong FindWindowA(string classname, String windowname) Library user32.dll Function Long SetParent(Long childwin, Long parentwin) Library user32.dll long ll_handlell_handlefindwindowa(“Progman”, “Program Manager”)setparent(handle(我的窗口),ll_handle) 非复合报表中的嵌套报表不可使用getchild取得也不可使用describe取得属性和使用modify更改属性你可以调用PB未载入文档的函数来获取/更改属性请看示例注意多层嵌套时使用循环获取最终对象.例数据窗口控件dw_test包含嵌套报表dw_1,dw_1有栏位dept_name.dwobject ldwo_parent,ldwo_objstring ls_colorldwo_parent dw_1.objectldwo_obj ldwo_parent.__get_attribute(dw_1,false)ldwo_obj ldwo_obj.objectldwo_obj ldwo_obj.__get_attribute(dept_name,false)ls_color ldwo_obj.color//取颜色ldwo_obj.__set_attribute(color,rgb(192,192,192))//更改颜色 EXCEL的内容导入数据窗口string str_savename,named,s_grxhint excelok,li_netlong li_count,ioleobject excelserverexcelservercreate oleobjectexcelokexcelserver.connecttonewobject(excel.application)if excelok0 thenmessagebox(信息提示,连接excel失败,请检查计算机中是否安装了excel!)return -1end ifli_netgetfileopenname(选择文件,str_savename,named,xls,excel文件(*.xls),*xls)if li_net0 thenif str_savename then messagebox(信息提示,没有指定导入文件!)return -1elsedw_1.settransobject(sqlca)dw_1.reset()excelserver.workbooks.open(str_savename)excelserver.activesheet.cells.copyli_countdw_1.importclipboard(2)clipboard()excelserver.quit()excelserver.disconnectobject()cb_2.enabledtruethis.enabledfalsedestroy excelserverreturn 1end ifend if PB数据转到EXCEL里面不能求和 pb转过去的都是字符型的 怎么解决 ole_object.Worksheets(1).Columns(1).NumberFormat 这个是把一个列,变成字符,#是数字 让DW中的行单、双行显示不同颜色if(currentrow()getrow(),rgb(185,200,255),if(mod(getrow(),2)1, rgb(255,255,255) , rgb(240,243,255))) 满足条件时该列字体显示为红色。tab_1.tabpage_1.dw_1.Object.czr.Color 0~tIf(string(zlzq,yyyy-mm)string(today(),yyyy-mm),rgb(241,0,51),rgb(0,0,0)) 满足条件时该列背景色为红色tab_1.tabpage_1.dw_1.modify(djh.background.mode0)//tab_1.tabpage_1.dw_1.object.djh.background.color 0~tif ( string(zlzq,yyyy-mm)string(today(),yyyy-mm), rgb(255,0,0), rgb(255,255,255)) 按下Insert键时插入一行//自定义一个PBM_DWNKEY的事件在事件里写可能有别的简单的方法if keydown(keycontrol!) thenif keydown(KeyInsert!) then //插入一行 dwname.insertrow(0)end ifend if 当某列获得焦点是,光标移动到最后方法一://获得焦点时,按下END键public Subroutine keybd_event(int bVk,int bScan,ulong dwFlags,ulong dwExtraInfo) LIBRARY user32.dll if dwo.name sqr_gzdw thenkeybd_event(35,0,0,0)end if方法二:this.setcolumn(po_gzdw) //让这列先获得焦点this.selecttext( len(data) 1,0 ) //再从最后选种0个字符 转载于:https://www.cnblogs.com/quietwalk/archive/2011/01/16/1936571.html