w_fingerprintcollect.srw 9.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417
  1. $PBExportHeader$w_fingerprintcollect.srw
  2. forward
  3. global type w_fingerprintcollect from w_publ_base
  4. end type
  5. type dw_1 from u_dw_rbtnfilter within w_fingerprintcollect
  6. end type
  7. type cb_collect from uo_imflatbutton within w_fingerprintcollect
  8. end type
  9. type cb_del from uo_imflatbutton within w_fingerprintcollect
  10. end type
  11. type cb_fresh from uo_imflatbutton within w_fingerprintcollect
  12. end type
  13. type cb_check from uo_imflatbutton within w_fingerprintcollect
  14. end type
  15. type st_1 from statictext within w_fingerprintcollect
  16. end type
  17. type ln_bar from line within w_fingerprintcollect
  18. end type
  19. type ln_bar2 from line within w_fingerprintcollect
  20. end type
  21. type r_bar from rectangle within w_fingerprintcollect
  22. end type
  23. end forward
  24. global type w_fingerprintcollect from w_publ_base
  25. integer width = 2149
  26. integer height = 1616
  27. string title = "指纹采集"
  28. dw_1 dw_1
  29. cb_collect cb_collect
  30. cb_del cb_del
  31. cb_fresh cb_fresh
  32. cb_check cb_check
  33. st_1 st_1
  34. ln_bar ln_bar
  35. ln_bar2 ln_bar2
  36. r_bar r_bar
  37. end type
  38. global w_fingerprintcollect w_fingerprintcollect
  39. type variables
  40. uo_fingerprint uo_fp
  41. boolean lb_collect = false
  42. end variables
  43. forward prototypes
  44. public subroutine wf_lockui (boolean arg_lock)
  45. end prototypes
  46. public subroutine wf_lockui (boolean arg_lock);dw_1.enabled = not arg_lock
  47. cb_fresh.enabled = not arg_lock
  48. cb_check.enabled = not arg_lock
  49. cb_del.enabled = not arg_lock
  50. cb_collect.enabled = not arg_lock
  51. cb_exit.enabled = not arg_lock
  52. lb_collect = arg_lock
  53. end subroutine
  54. on w_fingerprintcollect.create
  55. int iCurrent
  56. call super::create
  57. this.dw_1=create dw_1
  58. this.cb_collect=create cb_collect
  59. this.cb_del=create cb_del
  60. this.cb_fresh=create cb_fresh
  61. this.cb_check=create cb_check
  62. this.st_1=create st_1
  63. this.ln_bar=create ln_bar
  64. this.ln_bar2=create ln_bar2
  65. this.r_bar=create r_bar
  66. iCurrent=UpperBound(this.Control)
  67. this.Control[iCurrent+1]=this.dw_1
  68. this.Control[iCurrent+2]=this.cb_collect
  69. this.Control[iCurrent+3]=this.cb_del
  70. this.Control[iCurrent+4]=this.cb_fresh
  71. this.Control[iCurrent+5]=this.cb_check
  72. this.Control[iCurrent+6]=this.st_1
  73. this.Control[iCurrent+7]=this.ln_bar
  74. this.Control[iCurrent+8]=this.ln_bar2
  75. this.Control[iCurrent+9]=this.r_bar
  76. end on
  77. on w_fingerprintcollect.destroy
  78. call super::destroy
  79. destroy(this.dw_1)
  80. destroy(this.cb_collect)
  81. destroy(this.cb_del)
  82. destroy(this.cb_fresh)
  83. destroy(this.cb_check)
  84. destroy(this.st_1)
  85. destroy(this.ln_bar)
  86. destroy(this.ln_bar2)
  87. destroy(this.r_bar)
  88. end on
  89. event open;call super::open;dw_1.settrans(sqlca)
  90. dw_1.retrieve(sys_scid)
  91. end event
  92. event resize;call super::resize;ln_bar.EndX = THIS.Width
  93. ln_bar2.EndX = THIS.Width
  94. r_bar.Width = THIS.Width
  95. end event
  96. event closequery;call super::closequery;if lb_collect then return 1
  97. uo_fp.uf_abort()
  98. end event
  99. type cb_func from w_publ_base`cb_func within w_fingerprintcollect
  100. boolean visible = false
  101. integer x = 1298
  102. integer y = 920
  103. end type
  104. type cb_exit from w_publ_base`cb_exit within w_fingerprintcollect
  105. integer x = 933
  106. integer width = 151
  107. integer height = 164
  108. integer picsize = 16
  109. toolbaralignment pic_align = alignattop!
  110. boolean border = false
  111. end type
  112. type dw_1 from u_dw_rbtnfilter within w_fingerprintcollect
  113. integer y = 188
  114. integer width = 2103
  115. integer height = 1328
  116. boolean bringtotop = true
  117. string dataobject = "dw_user_fp"
  118. end type
  119. event rowfocuschanged;call super::rowfocuschanged;this.selectrow(0, false)
  120. if currentrow > 0 then this.selectrow(currentrow, true)
  121. end event
  122. type cb_collect from uo_imflatbutton within w_fingerprintcollect
  123. integer x = 151
  124. integer width = 261
  125. integer height = 164
  126. integer taborder = 30
  127. boolean bringtotop = true
  128. string text = "采集指纹"
  129. string normalpicname = "new.bmp"
  130. integer picsize = 16
  131. toolbaralignment pic_align = alignattop!
  132. boolean border = false
  133. end type
  134. event clicked;call super::clicked;Long ll_row
  135. Long i
  136. Blob lb_finger
  137. String ls_msg
  138. ll_row = dw_1.GetRow()
  139. IF ll_row <= 0 THEN RETURN
  140. dw_1.AcceptText()
  141. IF dw_1.Object.fingercount[ll_row] >= 5 THEN
  142. MessageBox('提示','每个用户的指纹采集数量不能超过5个')
  143. GOTO ext
  144. END IF
  145. wf_lockUI(TRUE)
  146. Open(w_sys_wait_fp)
  147. w_sys_wait_fp.Show()
  148. w_sys_wait_fp.wf_set_msg('正在收集指纹...')
  149. FOR i = 1 TO 3
  150. IF uo_fp.uf_regfingerprint(REF lb_finger, REF ls_msg) <> 1 THEN
  151. w_sys_wait_fp.wf_set_msg('采集失败,' + ls_msg + ',还有重复次数' + String(3 - i) + '次')
  152. IF i = 3 THEN
  153. MessageBox('提示','采集失败,' + ls_msg)
  154. GOTO ext
  155. END IF
  156. ELSE
  157. EXIT
  158. END IF
  159. NEXT
  160. w_sys_wait_fp.Hide()
  161. Close(w_sys_wait_fp)
  162. String ll_userid
  163. Long ll_scid
  164. Long ll_empid
  165. ll_userid = dw_1.Object.u_user_userid[ll_row]
  166. ll_scid = dw_1.Object.u_user_scid[ll_row]
  167. ll_empid = dw_1.Object.u_user_empid[ll_row]
  168. Long cnt
  169. SELECT count(*)
  170. INTO :cnt
  171. FROM u_user_fp
  172. Where UserID = :ll_userid;
  173. IF sqlca.SQLCode <> 0 THEN
  174. MessageBox('错误', '查询指纹信息失败 ' + sqlca.SQLErrText)
  175. GOTO ext
  176. ELSEIF cnt = 0 THEN
  177. INSERT INTO u_user_fp
  178. ( scid,
  179. Empid,
  180. userid )
  181. VALUES ( :ll_scid,
  182. :ll_empid,
  183. :ll_userid ) ;
  184. IF sqlca.SQLCode <> 0 THEN
  185. MessageBox('错误', '插入指纹信息失败 ' + sqlca.SQLErrText)
  186. GOTO ext
  187. END IF
  188. COMMIT;
  189. END IF
  190. IF dw_1.Object.fingercount[ll_row] <= 0 THEN
  191. UPDATEBLOB u_user_fp Set fingers = :lb_finger Where UserID = :ll_userid;
  192. IF sqlca.SQLCode <> 0 THEN
  193. MessageBox('错误', '保存失败 ' + sqlca.SQLErrText)
  194. GOTO ext
  195. END IF
  196. COMMIT;
  197. ELSE
  198. Blob lb_org
  199. SELECTBLOB fingers INTO :lb_org FROM u_user_fp Where UserID = :ll_userid;
  200. IF sqlca.SQLCode <> 0 THEN
  201. MessageBox('错误', '查询数据指纹失败 ' + sqlca.SQLErrText)
  202. GOTO ext
  203. END IF
  204. lb_org = lb_org + lb_finger
  205. UPDATEBLOB u_user_fp Set fingers = :lb_org Where UserID = :ll_userid;
  206. IF sqlca.SQLCode <> 0 THEN
  207. MessageBox('错误', '保存失败 ' + sqlca.SQLErrText)
  208. GOTO ext
  209. END IF
  210. COMMIT;
  211. END IF
  212. MessageBox('提示', '指纹采集成功')
  213. cb_fresh.TriggerEvent('clicked')
  214. ext:
  215. IF IsValid(w_sys_wait_fp) THEN Close(w_sys_wait_fp)
  216. wf_lockUI(FALSE)
  217. end event
  218. type cb_del from uo_imflatbutton within w_fingerprintcollect
  219. integer x = 672
  220. integer width = 261
  221. integer height = 164
  222. integer taborder = 30
  223. boolean bringtotop = true
  224. string text = "删除指纹"
  225. string normalpicname = "delete.bmp"
  226. integer picsize = 16
  227. toolbaralignment pic_align = alignattop!
  228. boolean border = false
  229. end type
  230. event clicked;call super::clicked;long ll_row
  231. ll_row = dw_1.GetRow()
  232. if ll_row <= 0 then return
  233. IF MessageBox ("询问","是否确定要删除选中用户所有指纹信息吗?",Question!,YesNo! ) = 2 THEN RETURN
  234. blob lb_null
  235. setnull(lb_null)
  236. string ll_userid
  237. ll_userid = dw_1.object.u_user_userid[ll_row]
  238. update u_user_fp set fingers = null where userid = :ll_userid;
  239. if sqlca.sqlcode <> 0 then
  240. MessageBox('错误', '删除指纹信息失败 ' + sqlca.sqlerrtext)
  241. return
  242. end if
  243. commit;
  244. cb_fresh.triggerevent('clicked')
  245. end event
  246. type cb_fresh from uo_imflatbutton within w_fingerprintcollect
  247. integer width = 151
  248. integer height = 164
  249. integer taborder = 30
  250. boolean bringtotop = true
  251. string text = "刷新"
  252. string normalpicname = "refresh.bmp"
  253. integer picsize = 16
  254. toolbaralignment pic_align = alignattop!
  255. boolean border = false
  256. end type
  257. event clicked;call super::clicked;long ll_row
  258. ll_row = dw_1.GetRow()
  259. dw_1.retrieve(sys_scid)
  260. if ll_row > 0 then
  261. dw_1.scrolltorow(ll_row)
  262. end if
  263. end event
  264. type cb_check from uo_imflatbutton within w_fingerprintcollect
  265. integer x = 411
  266. integer width = 261
  267. integer height = 164
  268. integer taborder = 30
  269. boolean bringtotop = true
  270. string text = "验证指纹"
  271. string normalpicname = "open.bmp"
  272. integer picsize = 16
  273. toolbaralignment pic_align = alignattop!
  274. boolean border = false
  275. end type
  276. event clicked;call super::clicked;Long ll_row,i
  277. ll_row = dw_1.GetRow()
  278. IF ll_row <= 0 THEN RETURN
  279. String ll_userid
  280. ll_userid = dw_1.Object.u_user_userid[ll_row]
  281. Blob lb_data
  282. wf_lockUI(TRUE)
  283. SELECTBLOB fingers INTO :lb_data FROM u_user_fp Where UserID = :ll_userid;
  284. IF sqlca.SQLCode <> 0 THEN
  285. MessageBox('错误', '获取指纹信息失败 ' + sqlca.SQLErrText)
  286. GOTO ext
  287. END IF
  288. String ls_msg
  289. Open(w_sys_wait_fp)
  290. w_sys_wait_fp.Show()
  291. w_sys_wait_fp.wf_set_msg('正在验证指纹...')
  292. FOR i = 1 TO 3
  293. IF uo_fp.uf_verifyfingerprint(lb_data, ls_msg) <> 1 THEN
  294. w_sys_wait_fp.wf_set_msg(ls_msg + ',还有重复次数' + String(3 - i) + '次')
  295. IF i = 3 THEN
  296. MessageBox('提示', ls_msg)
  297. GOTO ext
  298. END IF
  299. ELSE
  300. EXIT
  301. END IF
  302. NEXT
  303. w_sys_wait_fp.Hide()
  304. Close(w_sys_wait_fp)
  305. MessageBox('提示', '验证成功')
  306. ext:
  307. IF IsValid(w_sys_wait_fp) THEN Close(w_sys_wait_fp)
  308. wf_lockUI(FALSE)
  309. end event
  310. type st_1 from statictext within w_fingerprintcollect
  311. integer x = 1143
  312. integer y = 8
  313. integer width = 942
  314. integer height = 160
  315. boolean bringtotop = true
  316. integer textsize = -9
  317. integer weight = 400
  318. fontcharset fontcharset = gb2312charset!
  319. fontpitch fontpitch = variable!
  320. string facename = "宋体"
  321. long textcolor = 255
  322. long backcolor = 67108864
  323. string text = "说明:每个用户最多可设置5个指纹,采集指纹时请使用一根指头的第一节指纹匀速在指纹采集器上滑行3次."
  324. boolean focusrectangle = false
  325. end type
  326. event constructor;this.backcolor = 14215660
  327. end event
  328. type ln_bar from line within w_fingerprintcollect
  329. long linecolor = 268435456
  330. integer linethickness = 4
  331. integer beginy = 172
  332. integer endx = 3200
  333. integer endy = 172
  334. end type
  335. type ln_bar2 from line within w_fingerprintcollect
  336. long linecolor = 16777215
  337. integer linethickness = 4
  338. integer beginx = 9
  339. integer beginy = 176
  340. integer endx = 3273
  341. integer endy = 176
  342. end type
  343. type r_bar from rectangle within w_fingerprintcollect
  344. long linecolor = 16777215
  345. integer linethickness = 4
  346. long fillcolor = 1073741824
  347. integer x = 1221
  348. integer y = 12
  349. integer width = 87
  350. integer height = 68
  351. end type
  352. event constructor;this.fillcolor = 14215660
  353. this.linecolor = 14215660
  354. this.x = -1
  355. this.y = -1
  356. this.height = ln_bar.beginy - 5
  357. end event