有一個读卡器,是USB 接口的,不需要驅動(當然是win2000或xp系統下), 當用戶刷ID卡(非接觸式的)時, 電腦會接受一個10位的物理號碼(全是0-9的數字),就像鍵盤輸入的一樣.我想做一個身份驗證的程序,當用戶一刷卡時(只有一個刷卡的動作,不用點擊任何按鍵), 接受這個10位號碼, 與數據庫預存的數據比對,比對一致通過,否則報錯.我是這樣處理的: 在Form 上放一個Edit控件(不可見), 接受刷卡的數據,
問題的重點是:我不知道在Edit的什么時件中寫這個比對的代碼, 而且Edit的Text會一直累加刷卡的號碼請教各位,如何實現,或者是我這種方式不正確謝謝!
問題的重點是:我不知道在Edit的什么時件中寫這個比對的代碼, 而且Edit的Text會一直累加刷卡的號碼請教各位,如何實現,或者是我這種方式不正確謝謝!
以前做过2代身份证的一些应用,有的读卡器和你说的差不多有两种思路1.响应usb读卡器的“键盘”事件
2.采用你的方法。(可以在edit的onChange事件中比对,比对完成后清空)
另,这方法可能得要求你的edit有焦点
多謝runer 的回复
你說的第1種方法, 我不知道“键盘”事件有哪几種,我試了keypress,keydown, 它們帶的參數key 都只是一個字符(當前輸的單個字符),我不知如何取刷卡的整個字符(有10個字符)
第2種方法,我說了這個Edit是不可見的,也就是說它不能得到焦点!請教,有什么解決之道嗎!謝謝!
那你就在edit的文本变更事件中写代码啊
首先检查text有没有10位,
有了10位再和数据库中的比较,正确/不正确应该怎么处理你自己想
处理完之后清除text
第2種方法,我說了這個Edit是不可見的,也就是說它不能得到焦点!
我这种id读卡器沒有什么參數可調,usb接口,插上去就可用,沒有任何開關
不像我们用DLL或操作读卡器读出物理卡号
放1个timer
procedure TForm1.Timer1Timer(Sender: TObject);
var
sCardid:string;
begin
Timer1.Enabled:=False;
Edit1.SetFocus; //edit1获取焦点
if Trim(Edit1.Text)='' then
begin
Timer1.Enabled:=True
end
else
begin
sCardid:=Trim(Edit1.Text);
//送入卡号 检索数据库
end;
end;试试看