📄 main.pas
字号:
unit Main;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, ComCtrls;
type
TMainForm = class(TForm)
BtConnect: TButton;
BtSetWK: TButton;
BtRing: TButton;
Btcollectcard: TButton;
BtReadCard: TButton;
BtWriteCard: TButton;
BtInicard: TButton;
BtEraseCard: TButton;
BtClear: TButton;
Memo1: TMemo;
BtReadSector: TButton;
BtReader: TButton;
BtReadEW: TButton;
BtWriteEW: TButton;
GroupBox1: TGroupBox;
Label1: TLabel;
CbmCom: TComboBox;
Label2: TLabel;
Cbmbouad: TComboBox;
BTSetWaitTime: TButton;
ReadCard4k: TButton;
writecard4K: TButton;
ReadEW4K: TButton;
WriteEW4k: TButton;
BtRWLog: TButton;
procedure BtConnectClick(Sender: TObject);
procedure BtcollectcardClick(Sender: TObject);
procedure BtRingClick(Sender: TObject);
procedure DisposeRecvData(Buffer:Pointer; BufferLength:dword);
procedure FormCreate(Sender: TObject);
procedure FormDestroy(Sender: TObject);
procedure BtSetWKClick(Sender: TObject);
procedure BtReadSectorClick(Sender: TObject);
procedure BtInicardClick(Sender: TObject);
procedure BtReadCardClick(Sender: TObject);
procedure BtWriteCardClick(Sender: TObject);
procedure BtEraseCardClick(Sender: TObject);
procedure BtClearClick(Sender: TObject);
procedure BtReaderClick(Sender: TObject);
procedure BtReadEWClick(Sender: TObject);
procedure BtWriteEWClick(Sender: TObject);
procedure BTSetWaitTimeClick(Sender: TObject);
procedure ReadCard4kClick(Sender: TObject);
procedure writecard4KClick(Sender: TObject);
procedure ReadEW4KClick(Sender: TObject);
procedure WriteEW4kClick(Sender: TObject);
procedure BtRWLogClick(Sender: TObject);
protected
Procedure WndProc( var nMessage : TMessage);override;
private
{ Private declarations }
public
{ Public declarations }
end;
var
MainForm: TMainForm;
implementation
uses share;
var
nConnect :boolean ;
Prop :READERPROPSTRUCT;
procedure TMainForm.DisposeRecvData(Buffer:Pointer; BufferLength:dword);
type TCARDIDSTRUCT=^CARDIDSTRUCT;
type TSECTORSTRUCT=^SECTORSTRUCT;
type TCARDINFO_HD6K =^CARDINFO_HD6K;
type TREADERPROPSTRUCT=^READERPROPSTRUCT;
type TEW_HD6K =^EW_HD6K;
type TEW_HD4K =^EW_HD4K;
VAR
nCommand : longint;
Beep : BeepStruct;
Sector :SECTORSTRUCT;
str: string;
kk:integer;
CardInfo6k :CARDINFO_HD6K;
EWInfo :EW_HD6K;
EWof4K : EW_HD4K;
cardkind :byte;
Poscard :POSCARD_HD4K;
Attcard :ATTGUARDCARD_HD4K;
OprCard :OPRCARD_HD4K;
begin
nCommand := Getcommand();
case nCommand of
integer(MT_READ_CARDID) :
begin
m_CardID := TCARDIDSTRUCT(Buffer)^;
memo1.Lines.Add('卡片的类型为:'+intTOStr(m_CardID.CardType));
memo1.Lines.Add('卡片的序列号为:'+intTOStr(m_CardID.CardID));
if (integer(MT_SEND_CARDID) = nCommand) then
begin
SendCommand(Integer(MT_READ_CARDID),nil,0);// 读卡序列号
end;
end;
Integer(MT_WRITEDATA_CARDOFHD6K):
begin
Beep.Count :=2;
Beep.Times :=50;
ShowMessage('写卡成功');
sendcommand(Integer(MT_BEEP),@Beep,sizeof(Beep));
end;
Integer(MT_READ_SECTOR):
begin
Sector:=TSECTORSTRUCT(Buffer)^;
str := '';
for kk:=1 to 16 do
str:=Str+string(IntToHex(Sector.Block_0[kk],2));
memo1.Lines.Add('块0的数据为:'+str);
str := '';
for kk:=1 to 16 do
str:=Str+string(IntToHex(Sector.Block_1[kk],2));
memo1.Lines.Add('块1的数据为:'+str);
str := '';
for kk:=1 to 16 do
str:=Str+string(IntToHex(Sector.Block_2[kk],2));
memo1.Lines.Add('块2的数据为:'+str);
str := '';
for kk:=1 to 16 do
str:=Str+string(IntToHex(Sector.Block_3[kk],2));
memo1.Lines.Add('块3的数据为:'+str);
ShowMessage('读扇区成功');
Beep.Count :=1;
Beep.Times :=50;
sendcommand(Integer(MT_BEEP),@Beep,sizeof(Beep));
end;
integer(MT_READDATA_CARDOFHD6K):
begin
CardInfo6k:= TCARDINFO_HD6K(Buffer)^;
memo1.Lines.Add('卡类型:'+IntToStr(Cardinfo6k.CardID.CardType));
memo1.Lines.Add('卡序列号:'+IntToStr(Cardinfo6k.CardID.CardID));
memo1.Lines.Add('卡号:'+IntToStr(Cardinfo6k.CardNo));
memo1.Lines.Add('人员编号:'+(Cardinfo6k.PersonNo));
memo1.Lines.Add('姓名 :'+(Cardinfo6k.Myname));
memo1.Lines.Add('卡密码:'+(Cardinfo6k.Password));
memo1.Lines.Add('卡级别:'+IntToStr(Cardinfo6k.GradeNo));
if ((Cardinfo6k.CardType and Integer(CARDTYPE_POS)) = Integer(CARDTYPE_POS)) then
memo1.Lines.Add('此卡支持消费功能');
if ((Cardinfo6k.CardType and Integer(CARDTYPE_ATT)) = Integer(CARDTYPE_ATT)) then
memo1.Lines.Add('此卡支持考勤功能');
if ((Cardinfo6k.CardType and Integer(CARDTYPE_ACC)) =Integer(CARDTYPE_ACC)) then
memo1.Lines.Add('此卡支持门禁功能');
if ((Cardinfo6k.CardType and Integer(CARDTYPE_OPR)) =Integer(CARDTYPE_OPR)) then
memo1.Lines.Add('此卡支持操作员功能');
ShowMessage('读卡成功');
Beep.Count :=3;
Beep.Times :=50;
sendcommand(Integer(MT_BEEP),@Beep,sizeof(Beep));
end;
integer(MT_INIT_CARDOFHD6K):
begin
ShowMessage('卡初始化成功');
end;
integer(MT_ERASE_CARDOFHD6K):
begin
ShowMessage('洗卡 成功');
end;
integer(MT_ERASEDATA_CARDOFHD6K):
begin
ShowMessage('清卡数据成功');
end;
integer(MT_RECV_READERPROP):
begin
Prop:=TREADERPROPSTRUCT(Buffer)^;
Showmessage('取属性成功');
memo1.Lines.Add('硬件版本:'+IntToStr(prop.MainHardwareVer));
memo1.Lines.Add('软件版本:'+IntToStr(prop.MainSoftwareVer));
memo1.Lines.Add('读卡器序列号为'+IntToStr(prop.ReaderID));
Beep.Count :=1;
Beep.Times :=50;
sendcommand(Integer(MT_BEEP),@Beep,sizeof(Beep));
end;
integer(MT_READEW_CARDOFHD6K):
begin
ShowMessage('钱包读取成功');
EWInfo:=TEW_HD6K(Buffer)^;
ShowMessage(IntToStr(sizeof(EWInfo)));
memo1.Lines.Add('钱包余额'+IntToStr(EWInfo.Balance));
memo1.Lines.Add('充值额'+IntToStr(EWInfo.Deposit));
memo1.Lines.Add('累计充值额'+IntToStr(EWInfo.SumOfDeposit));
memo1.Lines.Add('日累计消费金额:'+IntTostr(EWInfo.IntradaySumOfAmount));
memo1.Lines.Add('交易流水号'+IntToStr(EWInfo.TraceOfEW));
end;
integer(MT_WRITEEW_CARDOFHD6K):
begin
ShowMessage('写钱包成功');
if m_cardID.CardID <>0 then
begin
m_CardID.CardType :=1;//钱包索引
SendCommand(integer(MT_READEW_CARDOFHD6K), @m_CardID, sizeof(m_CardID));// 读钱包
end;
end;
Integer(MT_SET_WAITTIME):
begin
ShowMessage('等待时间设置成功');
Beep.Count :=1;
Beep.Times :=50;
sendcommand(Integer(MT_BEEP),@Beep,sizeof(Beep));
end;
Integer(MT_READ_CARDOFHD4K):
begin
ShowMessage('读卡成功');
copymemory(@cardkind,Buffer,1);
case cardkind of
1 :
begin
copymemory(@AttCard,Buffer,sizeof(AttCard));
memo1.Lines.Clear ;
memo1.Lines.Add('卡号为'+IntTostr(AttCard.CardNo));
showmessage('考勤');
end;
2 :
begin
copymemory(@PosCard,Buffer,sizeof(PosCard));
memo1.Lines.Clear ;
memo1.Lines.Add('卡号为'+IntTostr(PosCard.CardNo));
memo1.Lines.Add('姓名为:'+POSCard.myName );
showmessage('消费');
end;
3 :
begin
copymemory(@OprCard,Buffer,sizeof(OprCard));
memo1.Lines.Clear ;
memo1.Lines.Add('卡号为'+IntTostr(OprCard.CardNo));
showmessage('操作员');
end;
end;
//memo1.Lines.Add(inttostr())
end;
integer(MT_WRITE_CARDOFHD4K):
begin
ShowMessage('写卡成功');
end;
integer(MT_UPDATEKEY_CARDOFHD4K):
begin
ShowMessage('更改卡密码成功');
end;
integer(MT_READEW_CARDOFHD4K):
begin
EWof4K :=TEW_HD4K(Buffer)^;
memo1.Lines.Clear;
memo1.Lines.Add('扇区号为'+inttostr(EWof4K.SectorNo));
memo1.Lines.Add('卡号为:'+inttostr(EWof4k.CardNo ));
memo1.Lines.Add ('卡余额为:'+inttostr(EWof4k.Balance ));
memo1.Lines.Add ('卡流水为'+inttostr(EWof4k.TraceOfEW ));
ShowMessage('读钱包成功');
end;
integer(MT_WRITEEW_CARDOFHD4K):
begin
ShowMessage('写钱包成功');
end;
else
begin
ShowMessage('没有处理的消息类型:'+intToStr(nCommand));
end;
end;
end;
procedure TMainForm.WndProc(Var nMessage:TMessage);
begin
case nMessage.Msg of
WM_ICDM_RECVICDMDATA : DisposeRecvData(Pointer(nMessage.LParam),nMessage.WParam);
else ;
end;
inherited WndProc(nMessage);
end;
{$R *.dfm}
procedure TMainForm.BtConnectClick(Sender: TObject);
var
com,connect :string;
nCom,Boad :String;
begin
nCom := cbmCom.Text;
Boad := cbmbouad.Text;
Boad := Boad+',N,8,0';
IF (cbmCom.Text ='') or (cbmbouad.Text ='') then
begin
ShowMessage('请选择正确的端口与通信速率');
Exit;
end;
if nConnect=false then
if StartComm(pchar(nCom),pchar(Boad)) then
begin
nConnect := true;
BtConnect.Caption :='com2端口打开';
end
else ShowMessage('端口打开错误,请确认端口与通信速率选择正确,一般速率选择38400')
else
begin
StopComm();
nConnect := false;
BtConnect.Caption :='端口关闭';
end;
end;
procedure TMainForm.BtcollectcardClick(Sender: TObject);
begin
memo1.Lines.Clear;
zeromemory(@m_CardID,sizeof(m_CardID));
SendCommand(integer(MT_READ_CARDID),nil,0);// 读卡序列号
end;
procedure TMainForm.BtRingClick(Sender: TObject);
var
Beep : BeepStruct;
begin
memo1.Lines.Clear;
Beep.Count :=1; //鸣叫次数
Beep.Times :=50; //鸣叫时长 单位为毫秒
//鸣叫
sendCommand(integer(MT_BEEP),@Beep,sizeof(Beep));
end;
procedure TMainForm.FormCreate(Sender: TObject);
begin
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -