首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 软件管理 > 软件开发 >

57个数据窗口灵便技术

2012-09-27 
57个数据窗口灵活技术57个数据窗口灵活技术[分享]8、如何过滤dddw编辑风格的显示值为指定值的记录? 答:dw_1

57个数据窗口灵活技术

57个数据窗口灵活技术[分享]

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_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、如何获取指定名称的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.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 C T.datawindow.zoom=75
14、如何在已过滤后的数据基础上对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=500
16、如何让带用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 = 115
dw_1.SetFocus()
dw_1.SetColumn( "dept_head_id" ) //设置当前dddw
keybd_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 1
23、如何在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 szselect
? ?? ???szselect=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 lstorage
? ?? ?? ?? ?lstorage=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= 1

29、如何进行预览:
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=yes
? ?? ?print.cliptext=no print.overrideprintjob=no
? ?? ???hidegrayline=no
? ?? ???encodeselflinkargs="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)+1
33、如何实现在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??=??i+1??
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

热点排行