Datawindow中如何快捷方便地使用二维码、条码
二维码、条码在生活中使用相当普遍,PB开发中不可避免地也大量使用该项技术。可惜,原生PB没有自带这些功能。
在PB里显示并打印二维码、条码,我们通常的做法是:1.生成二维码、条码图片文件,2.把图片放入datawindow。这种方法不是很方便,需要做额外处理,尤其是daawindow直接从数据库取数据时,数据查询检索完成后,需要循环生成一遍图片文件,然后设置图片文件名称,还要记得在窗口关闭时去删除这些图片。
另外还有free-datawindow 里的方法,可以直接显示二维码、条码,但因为使用了HOOK技术,会被360报病毒,或者偶尔在打印时会打印不出来。
这次,介绍一下PbIdea里一种新的显示和打印二维码、条码的方法。这个方法比较简单,方便使用。
步骤一:设置datawindow,存为d_code
步骤二:将d_code拖放到窗口上,并进行初始化
int i
dw_1.reset()
for i = 1 to 10
dw_1.InsertRow(0)
dw_1.setItem(i,"text",string(i) + "1234567890")
next
这里是插入10条记录,当然你也可以从数据库查询并检索数据。
步骤三:写数据字段也码字段绑定代码。使用uo_json作为参数传递对象。
uo_json json
json = create uo_json
json.set("type",20) //或"code128",显示条码
//以下参数,参考uo_image对象的 instance variables 声明的条码相关定义
json.set("vers",5)
json.set("secure",3)
json.set("show_hrt",1)
json.set("scale",1.0)
uo_image img
img = create uo_image
img.SetDatawindowCoder(dw_1,"barcode","text",json) //计算字段名称barcode,数据字段名称text
json.set("type",58) //或"qrcode",显示二维码
json.set("logo","..\demores\images\logo.png")
img.SetDatawindowCoder(dw_1,"qrcode","text",json) //计算字段名称barcode,数据字段名称text
destroy img
destroy json
经过以上三个步骤设计与绑定,功能就完成了。Datawindow具备了显示和打印二维码、条码的功能。
简单介绍一下实现原理:
SetDatawindowCoder函数的功能,是为计算字段设置表达式,借助于 bitmap(…)表达式函数,从图片文件中生成显示图片。
Pbidea实现了根据相应字段内容,表达式字段的宽度和高度生成图片,提交给bitmap函数显示,生成的图片文件在datawindow销毁时会自动删除。
绑定后的datawindow关键部分语法如下:
release 9;
……
text(name=text_t visible="1" band=header font.charset="134" font.face="宋体" font.family="0" font.height="-10" font.pitch="2" font.weight="400" background.mode="1" background.color="536870912" color="14474460" alignment="2" border="0" x="9" y="8" height="60" width="521" text="Text" )
column(name=text …… )
compute(name=qrcode visible="1" …… expression="bitmap(CodeMaker(getrow(),~"{~~~"type~~~":58,~~~"vers~~~":5,~~~"secure~~~":3,~~~"show_hrt~~~":1,~~~"scale~~~":1.0,~~~"dw~~~":{~~~"obinstid~~~":94622604,~~~"hwnd~~~":11011140,~~~"expr~~~":~~~"qrcode~~~",~~~"value~~~":~~~"text~~~"},~~~"logo~~~":~~~"..~\~\demores~\~\images~\~\logo.png~~~"}~"))" alignment="0" border="0" crosstab.repeat=no )
compute(name=barcode visible="1" …… expression="bitmap(CodeMaker(getrow(),~"{~~~"type~~~":20,~~~"vers~~~":5,~~~"secure~~~":3,~~~"show_hrt~~~":1,~~~"scale~~~":1.0,~~~"dw~~~":{~~~"obinstid~~~":94622604,~~~"hwnd~~~":11011140,~~~"expr~~~":~~~"barcode~~~",~~~"value~~~":~~~"text~~~"}}~"))" alignment="0" border="0" crosstab.repeat=no )
最后,我们看一下显示效果与打印效果:
大自在 于2022/1/17
QQ:781770213 QQ群:624409252