由于ID卡或者是其它的一些不同类型的卡,它们只是负责模拟键盘的录入,但是,它们在录入的时候没有一个很好的标识位可以让我们知道当前输入的是客户手工录入的字符串还是ID卡读入的字符串,我相信,很多人在做这样的开发时应该都遇到过这种郁闷的事,有些人的做法呢,就是在特定的位置录入字符串就算是ID卡的读取了,我想,这样的方法很多人都不喜欢的了,感觉很不科学。因此,这模块就是应这种要求而设计的,可以让你在任何情况下,应该说,限制很少的情况下,满足了题目的要求。废话不多说,先看看模块代码:

检测ID卡的输入或者是其它卡的输入。unit zgw_IDCheckU;
检测ID卡的输入或者是其它卡的输入。
检测ID卡的输入或者是其它卡的输入。interface
检测ID卡的输入或者是其它卡的输入。uses
检测ID卡的输入或者是其它卡的输入。  Windows,Dialogs;
检测ID卡的输入或者是其它卡的输入。type
检测ID卡的输入或者是其它卡的输入。  TIDCheckOKEvent 
= procedure (IDCheckResult:string) of object;
检测ID卡的输入或者是其它卡的输入。  TIDCheck
=class(TObject)
检测ID卡的输入或者是其它卡的输入。  protected
检测ID卡的输入或者是其它卡的输入。    m_INTCheck:array of integer;
//结果的检测用
检测ID卡的输入或者是其它卡的输入。    m_TimeCheck:array of integer;
//时间的检测用
检测ID卡的输入或者是其它卡的输入。    m_Begin:integer;
//检测录入的字符第一个开始时间。
检测ID卡的输入或者是其它卡的输入。    m_MaxTime:Smallint;
//超出该时间证明不是ID的录入时间范围
检测ID卡的输入或者是其它卡的输入。    m_Length:integer;
//读取长度
检测ID卡的输入或者是其它卡的输入。    m_LastResult:string;
//上一次读取的结果
检测ID卡的输入或者是其它卡的输入。    FOnIDCheck: TIDCheckOKEvent;
检测ID卡的输入或者是其它卡的输入。    FOnIDCheck_SP: TIDCheckOKEvent;
检测ID卡的输入或者是其它卡的输入。    procedure DoClear;
//当检测到符合清空条件的,则还原所有变量
检测ID卡的输入或者是其它卡的输入。    function CheckID:Boolean;
检测ID卡的输入或者是其它卡的输入。    function GetIDResult:string;
检测ID卡的输入或者是其它卡的输入。    procedure DoAddKey(var key:integer);
//符合条件的进行处理。
检测ID卡的输入或者是其它卡的输入。    procedure SetOnIDCheckResult_SP(value:TIDCheckOKEvent);
检测ID卡的输入或者是其它卡的输入。  public
检测ID卡的输入或者是其它卡的输入。    function KeyDownCheck(var key:integer):string;
检测ID卡的输入或者是其它卡的输入。    property IDLength:integer read m_Length;
检测ID卡的输入或者是其它卡的输入。    property IDResult:string read GetIDResult;
检测ID卡的输入或者是其它卡的输入。    property LastResult:string read m_LastResult;
检测ID卡的输入或者是其它卡的输入。    constructor Create(MaxTime:integer
=50;Length:integer=10);
检测ID卡的输入或者是其它卡的输入。    destructor Destroy; override;
检测ID卡的输入或者是其它卡的输入。    procedure APPIntercept(var Msg:TMsg;var Handled:Boolean);
//截取程序的消息,改为自己的截取过程
检测ID卡的输入或者是其它卡的输入。    property OnIDCheckResult: TIDCheckOKEvent read FOnIDCheck write FOnIDCheck;         
//默认的事件
检测ID卡的输入或者是其它卡的输入。    property OnIDCheckResult_SP: TIDCheckOKEvent read FOnIDCheck_SP write SetOnIDCheckResult_SP;
//特殊事件,当特殊事件存在时不会去执行默认事件的。
检测ID卡的输入或者是其它卡的输入。  end;
检测ID卡的输入或者是其它卡的输入。  
检测ID卡的输入或者是其它卡的输入。var
检测ID卡的输入或者是其它卡的输入。  IDCheckObj:TIDCheck;
检测ID卡的输入或者是其它卡的输入。
检测ID卡的输入或者是其它卡的输入。implementation
检测ID卡的输入或者是其它卡的输入。uses
检测ID卡的输入或者是其它卡的输入。  Forms,StdCtrls,Messages;
检测ID卡的输入或者是其它卡的输入。
检测ID卡的输入或者是其它卡的输入。procedure TIDCheck.APPIntercept(var Msg: TMsg; var Handled: Boolean);
检测ID卡的输入或者是其它卡的输入。var
检测ID卡的输入或者是其它卡的输入。  aStr:string;
检测ID卡的输入或者是其它卡的输入。begin
检测ID卡的输入或者是其它卡的输入。
检测ID卡的输入或者是其它卡的输入。  
if Msg.message=WM_KEYDOWN then
检测ID卡的输入或者是其它卡的输入。  begin
检测ID卡的输入或者是其它卡的输入。    aStr:
=KeyDownCheck(Msg.wParam);
检测ID卡的输入或者是其它卡的输入。    
if length(aStr)>0 then
检测ID卡的输入或者是其它卡的输入。    begin
检测ID卡的输入或者是其它卡的输入。      Msg.wParam:
=0;
检测ID卡的输入或者是其它卡的输入。    end
检测ID卡的输入或者是其它卡的输入。    
else  //没有完整返回ID的检测,下面是一些比较特殊的处理。
检测ID卡的输入或者是其它卡的输入。    begin
检测ID卡的输入或者是其它卡的输入。      
if ((m_TimeCheck[1]>0) and (m_TimeCheck[1]<=m_MaxTime) and not (Screen.ActiveForm.ActiveControl is TCustomEdit)) then
检测ID卡的输入或者是其它卡的输入。        Msg.wParam:
=0;
检测ID卡的输入或者是其它卡的输入。    end;
检测ID卡的输入或者是其它卡的输入。    
//下面是屏蔽数字的快捷键的,因此数字快捷键必须使用数字键盘
检测ID卡的输入或者是其它卡的输入。    
if ((Msg.wParam>=48and (Msg.wParam<=57)) then
检测ID卡的输入或者是其它卡的输入。    
if not (Screen.ActiveForm.ActiveControl is TCustomEdit) then
检测ID卡的输入或者是其它卡的输入。      Msg.wParam:
=0;
检测ID卡的输入或者是其它卡的输入。  end;
检测ID卡的输入或者是其它卡的输入。
检测ID卡的输入或者是其它卡的输入。
检测ID卡的输入或者是其它卡的输入。end;
检测ID卡的输入或者是其它卡的输入。
检测ID卡的输入或者是其它卡的输入。function TIDCheck.CheckID: Boolean;
检测ID卡的输入或者是其它卡的输入。begin
检测ID卡的输入或者是其它卡的输入。  
if m_INTCheck[m_Length-1]<0 then
检测ID卡的输入或者是其它卡的输入。    result:
=false
检测ID卡的输入或者是其它卡的输入。  
else
检测ID卡的输入或者是其它卡的输入。    result:
=true;
检测ID卡的输入或者是其它卡的输入。end;
检测ID卡的输入或者是其它卡的输入。
检测ID卡的输入或者是其它卡的输入。constructor TIDCheck.Create(MaxTime: integer;Length:integer);
检测ID卡的输入或者是其它卡的输入。begin
检测ID卡的输入或者是其它卡的输入。  m_MaxTime:
=MaxTime;
检测ID卡的输入或者是其它卡的输入。  m_Length:
=Length;
检测ID卡的输入或者是其它卡的输入。  SetLength(m_INTCheck,m_Length);
检测ID卡的输入或者是其它卡的输入。  SetLength(m_TimeCheck,m_Length);
检测ID卡的输入或者是其它卡的输入。  DoClear;
检测ID卡的输入或者是其它卡的输入。end;
检测ID卡的输入或者是其它卡的输入。
检测ID卡的输入或者是其它卡的输入。destructor TIDCheck.Destroy;
检测ID卡的输入或者是其它卡的输入。begin
检测ID卡的输入或者是其它卡的输入。  Finalize(m_INTCheck);
检测ID卡的输入或者是其它卡的输入。  Finalize(m_TimeCheck);
检测ID卡的输入或者是其它卡的输入。  inherited;
检测ID卡的输入或者是其它卡的输入。end;
检测ID卡的输入或者是其它卡的输入。
检测ID卡的输入或者是其它卡的输入。procedure TIDCheck.DoAddKey(var key: integer);
检测ID卡的输入或者是其它卡的输入。var
检测ID卡的输入或者是其它卡的输入。  i:Smallint;
检测ID卡的输入或者是其它卡的输入。begin
检测ID卡的输入或者是其它卡的输入。  
for i:=0 to m_Length-1 do
检测ID卡的输入或者是其它卡的输入。    
if m_INTCheck[i]<0 then
检测ID卡的输入或者是其它卡的输入。    begin
检测ID卡的输入或者是其它卡的输入。      m_INTCheck[i]:
=key;
检测ID卡的输入或者是其它卡的输入。      m_TimeCheck[i]:
=GetTickCount-m_Begin;
检测ID卡的输入或者是其它卡的输入。      m_Begin:
=GetTickCount;
检测ID卡的输入或者是其它卡的输入。      
break;
检测ID卡的输入或者是其它卡的输入。    end;
检测ID卡的输入或者是其它卡的输入。  
if i=m_Length then//没有空间记录,把所有数据前移并把新的放在最后一位。
检测ID卡的输入或者是其它卡的输入。  begin
检测ID卡的输入或者是其它卡的输入。    
for i:=1 to m_Length-1 do
检测ID卡的输入或者是其它卡的输入。    begin
检测ID卡的输入或者是其它卡的输入。      m_INTCheck[i
-1]:=m_INTCheck[i];
检测ID卡的输入或者是其它卡的输入。      m_TimeCheck[i
-1]:=m_TimeCheck[i];
检测ID卡的输入或者是其它卡的输入。    end;
检测ID卡的输入或者是其它卡的输入。    m_INTCheck[m_Length]:
=key;
检测ID卡的输入或者是其它卡的输入。    m_TimeCheck[m_Length]:
=GetTickCount-m_Begin;
检测ID卡的输入或者是其它卡的输入。    m_Begin:
=GetTickCount;
检测ID卡的输入或者是其它卡的输入。  end;
检测ID卡的输入或者是其它卡的输入。  
if (m_TimeCheck[i]>=m_MaxTime) and (i>0) then //超出ID卡读取范围则清空
检测ID卡的输入或者是其它卡的输入。    DoClear;
检测ID卡的输入或者是其它卡的输入。end;
检测ID卡的输入或者是其它卡的输入。
检测ID卡的输入或者是其它卡的输入。procedure TIDCheck.DoClear;
检测ID卡的输入或者是其它卡的输入。var
检测ID卡的输入或者是其它卡的输入。  i:integer;
检测ID卡的输入或者是其它卡的输入。begin
检测ID卡的输入或者是其它卡的输入。  
for i:=0 to m_Length-1 do
检测ID卡的输入或者是其它卡的输入。  begin
检测ID卡的输入或者是其它卡的输入。    m_INTCheck[i]:
=-1;
检测ID卡的输入或者是其它卡的输入。    m_TimeCheck[i]:
=-1;
检测ID卡的输入或者是其它卡的输入。  end;
检测ID卡的输入或者是其它卡的输入。  m_Begin:
=0;
检测ID卡的输入或者是其它卡的输入。end;
检测ID卡的输入或者是其它卡的输入。
检测ID卡的输入或者是其它卡的输入。function TIDCheck.GetIDResult: string;
检测ID卡的输入或者是其它卡的输入。var
检测ID卡的输入或者是其它卡的输入。  i:Shortint;
检测ID卡的输入或者是其它卡的输入。begin
检测ID卡的输入或者是其它卡的输入。  
if CheckID then
检测ID卡的输入或者是其它卡的输入。  begin
检测ID卡的输入或者是其它卡的输入。    
for i:=0 to m_Length-1 do
检测ID卡的输入或者是其它卡的输入。      result:
=result+char(m_INTCheck[i]);
检测ID卡的输入或者是其它卡的输入。  end;
检测ID卡的输入或者是其它卡的输入。end;
检测ID卡的输入或者是其它卡的输入。
检测ID卡的输入或者是其它卡的输入。function TIDCheck.KeyDownCheck(var key:integer):string;
检测ID卡的输入或者是其它卡的输入。var
检测ID卡的输入或者是其它卡的输入。  aStr:string;
检测ID卡的输入或者是其它卡的输入。  i:integer;
检测ID卡的输入或者是其它卡的输入。begin
检测ID卡的输入或者是其它卡的输入。  result:
='';
检测ID卡的输入或者是其它卡的输入。  case key of
检测ID卡的输入或者是其它卡的输入。  
48..57:DoAddKey(key);
检测ID卡的输入或者是其它卡的输入。      
13:begin
检测ID卡的输入或者是其它卡的输入。           
if checkid then //检测到结果则把结果返回
检测ID卡的输入或者是其它卡的输入。           begin
检测ID卡的输入或者是其它卡的输入。             result:
=GetIDResult;
检测ID卡的输入或者是其它卡的输入。             m_LastResult:
=result;
检测ID卡的输入或者是其它卡的输入。
检测ID卡的输入或者是其它卡的输入。              
if Screen.ActiveForm.ActiveControl is TCustomEdit then
检测ID卡的输入或者是其它卡的输入。              begin
检测ID卡的输入或者是其它卡的输入。                aStr:
=TCustomEdit(Screen.ActiveForm.ActiveControl).Text;
检测ID卡的输入或者是其它卡的输入。                Delete(aStr,length(aStr)
-IDLength+1,IDLength);
检测ID卡的输入或者是其它卡的输入。                i:
=TCustomEdit(Screen.ActiveForm.ActiveControl).SelStart;
检测ID卡的输入或者是其它卡的输入。                TCustomEdit(Screen.ActiveForm.ActiveControl).Text:
=aStr;
检测ID卡的输入或者是其它卡的输入。                TCustomEdit(Screen.ActiveForm.ActiveControl).SelStart:
=i;
检测ID卡的输入或者是其它卡的输入。              end;
检测ID卡的输入或者是其它卡的输入。
检测ID卡的输入或者是其它卡的输入。             
if assigned(OnIDCheckResult_SP) then
检测ID卡的输入或者是其它卡的输入。               OnIDCheckResult_SP(result)
检测ID卡的输入或者是其它卡的输入。             
else
检测ID卡的输入或者是其它卡的输入。             begin
检测ID卡的输入或者是其它卡的输入。               
if assigned(FOnIDCheck) then
检测ID卡的输入或者是其它卡的输入。                 FOnIDCheck(result);
检测ID卡的输入或者是其它卡的输入。             end;
检测ID卡的输入或者是其它卡的输入。             DoClear;
//清空重新处理。
检测ID卡的输入或者是其它卡的输入。           end
检测ID卡的输入或者是其它卡的输入。           
else
检测ID卡的输入或者是其它卡的输入。             DoClear;
//清空重新处理。
检测ID卡的输入或者是其它卡的输入。         end;
检测ID卡的输入或者是其它卡的输入。  
else//非数字的要清空并重新处理
检测ID卡的输入或者是其它卡的输入。    DoClear;
检测ID卡的输入或者是其它卡的输入。  end;
检测ID卡的输入或者是其它卡的输入。end;
检测ID卡的输入或者是其它卡的输入。
检测ID卡的输入或者是其它卡的输入。procedure TIDCheck.SetOnIDCheckResult_SP(value: TIDCheckOKEvent);
检测ID卡的输入或者是其它卡的输入。begin
检测ID卡的输入或者是其它卡的输入。  FOnIDCheck_SP:
=value;
检测ID卡的输入或者是其它卡的输入。  DoClear;
检测ID卡的输入或者是其它卡的输入。end;
检测ID卡的输入或者是其它卡的输入。
检测ID卡的输入或者是其它卡的输入。initialization
检测ID卡的输入或者是其它卡的输入。  IDCheckObj:
=TIDCheck.Create;
检测ID卡的输入或者是其它卡的输入。finalization
检测ID卡的输入或者是其它卡的输入。  IDCheckObj.Free;
检测ID卡的输入或者是其它卡的输入。
检测ID卡的输入或者是其它卡的输入。end.

 下面是它的使用方法:(对象不用创建的,引用了该模块就可以使用,应该它在模块引用的时候就已经创建出来的了。)

    Application.OnMessage:=IDCheckObj.APPIntercept;(首先这里设置截获应用程序的消息。)
    IDCheckObj.OnIDCheckResult:=OnIDCheckReturn;(设置检测到ID卡读取后要执行的事件。)

调用的方法就是这么简单了。

下面的是特殊情况下调用的方法:

IDCheckObj.OnIDCheckResult_SP:=OnIDCheckReturn;(OnIDCheckResult是默认的执行事件,如果你在某个窗体里面要求检测到ID卡读取后执行比较特殊的事件,而不执行默认事件的话,就要设置这个事件了,记得窗体不再激活的时候要把它设置为NULL哦,否者,其它地方会执行OnIDCheckResult_SP这个事件的)

介绍一个这个事件过程是如何定义的:procedure OnIDCheckReturn(IDCheckResult:string);

下面是我的默认事件所执行的过程,可以参考一下:

procedure TMainForm.OnIDCheckReturn(IDCheckResult: string);
var
  frm_IDCardCon:Tfrm_IDCardControl;
begin
  frm_IDCardCon:=Tfrm_IDCardControl.Create(IDCheckResult);
  if frm_IDCardCon.VIP_NO<>'' then
    frm_IDCardCon.ShowModal
  else
    frm_IDCardCon.Free;
end;


IDCheckResult:就是检测到的那串字符串。我这里是检测到就弹出窗体。不知道我这东西是否适合大家使用呢?不管适用与否,我都已经用在客户那里啦,反应挺好的。


原创作品出自努力偷懒,转载请说明文章出处http://blog.csdn.net/kfarvid或 http://www.cnblogs.com/kfarvid/

相关文章:

  • 2022-12-23
  • 2022-12-23
  • 2021-12-10
  • 2022-12-23
  • 2021-05-08
  • 2022-12-23
  • 2021-04-22
猜你喜欢
  • 2021-12-26
  • 2021-06-29
  • 2022-12-23
  • 2022-01-14
  • 2022-12-23
  • 2021-04-17
  • 2022-12-23
相关资源
相似解决方案