📄 frmbadcards.pas
字号:
unit FrmBadCards;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls,db, Grids,ICCTRL,inifiles, DBGrids, Mask, DBCtrls, TFlatButtonUnit;
type
PClockInfo=^TClockInfo;
TClockInfo=record
ID: WORD;
ClockNo: String;
ClockName: String;
Port: WORD;
BaudRate: DWORD;
end;
type
TFrmBadCard = class(TForm)
GroupBox1: TGroupBox;
DBGrid1: TDBGrid;
GroupBox2: TGroupBox;
Label1: TLabel;
Label2: TLabel;
Label3: TLabel;
DBEdit1: TDBEdit;
DBEdit2: TDBEdit;
DBEdit3: TDBEdit;
GroupBox3: TGroupBox;
FlatButton1: TFlatButton;
FlatButton2: TFlatButton;
FlatButton3: TFlatButton;
FlatButton4: TFlatButton;
procedure FlatButton1Click(Sender: TObject);
procedure FormCreate(Sender: TObject);
procedure FlatButton4Click(Sender: TObject);
procedure FlatButton3Click(Sender: TObject);
procedure FlatButton2Click(Sender: TObject);
procedure FormClose(Sender: TObject; var Action: TCloseAction);
private
{ Private declarations }
public
{ Public declarations }
end;
var
FrmBadCard: TFrmBadCard;
implementation
uses AboutS, DTConnects, MainFRMS;
{$R *.dfm}
function IntToStrLen(Value : Integer; ResultLength :Byte):String;
begin
Result:=IntToStr(Value);
while Length(Result) < Resultlength do
Result:='0'+Result;
Result:=Copy(Result, Length(Result)-ResultLength+1, ResultLength);
end;
function OpenPort(pclk: PClockInfo):THandle;
var
Ret : DWORD;
begin
Screen.Cursor:=crHourGlass;
try
MainFRM.StatusBar1.Panels[0].Text := Format('正在连接"%s"...', [pclk.ClockName]);
Result := OpenCommPort(pclk.Port, pclk.BaudRate);
if Result<>INVALID_HANDLE_VALUE then
begin
Ret:=LinkCommPort(Result, PChar(pclk.ClockNo));
case Ret of
OPEN_PORT_FAILE : MainFRM.StatusBar1.Panels[0].Text := Format('不能打开端口"%d"!', [pclk.Port]);
CREATE_LINK_TIMEOUT : MainFRM.StatusBar1.Panels[0].Text := Format('连接设备"%s"超时!', [pclk.ClockNo]);
LINK_FAILE : MainFRM.StatusBar1.Panels[0].Text := Format('连接设备"%s"失败!', [pclk.ClockNo]);
COMM_PORT_INVALID : MainFRM.StatusBar1.Panels[0].Text := Format('端口"%d"无效', [pclk.Port]);
end;
if Ret<>0 then
begin
CloseCommPort(Result);
Result:=0;
end;
end else
Result:=0;
finally
Screen.Cursor:=crDefault;
end;
end;
Function RegDevice(CardNo:String;write:boolean):Boolean;
var ReadInfo:TIniFile;
FileName:String;
DeviceCount,i:integer;
InfoStr:String;
pclk: PClockInfo;
hPort: THandle;
Right: Boolean;
Begin
FileName:=ExtractFilePath(Application.ExeName)+'CardInfo.ini';
ReadInfo:=TIniFile.Create(FileName);
DeviceCount:=ReadInfo.ReadInteger('Device','Counter',0);
for i:=1 to DeviceCount do begin
InfoStr:=ReadInfo.ReadString('Device','Device'+inttostr(i),'');
new(pclk);
pclk.ClockNo:=copy(infoStr,3,2);
pclk.ClockName:=copy(infoStr,17,Strlen(pchar(infoStr))-16);
pclk.Port:=StrToIntDef(copy(infoStr,5,4),4);
pclk.BaudRate:=StrToIntDef(copy(infoStr,13,4),9600);
MainFRM.StatusBar1.Panels[0].Text:='链接到发卡机上...';
hPort:=OpenPort(pclk);
if write then begin
Right:=WriteRegisterCard(hPort,pchaR(CardNo));
end else
Right:=ClearAllRegisterCard(hPort);
Windows.Beep(2500, 150);
CloseCommPort(hPort);
end;
end;
procedure TFrmBadCard.FlatButton1Click(Sender: TObject);
var hPort: THandle;
pclk: PClockInfo;
CardInfo: TCardInfo;
ReadInfo: TIniFile;
FileName:String;
CardNoStr: String;
Right:boolean;
UserID:Integer;
begin
Application.MessageBox('请把要注销的IC卡放在写卡机上后,按确定继续!','操作提示',0+32);
FileName:=ExtractFilePath(Application.ExeName)+'CardInfo.ini';
ReadInfo:=TIniFile.Create(FileName);
with ReadInfo do begin
new(pclk);
pclk.ID:=StrToIntDef(ReadString('NewCard','ID',''),1);
pclk.ClockNo:=ReadString('NewCard','DeviceNo','');
pclk.ClockName:=ReadString('NewCard','Devicena','');
pclk.Port:=StrToIntDef(ReadString('NewCard','Port',''),4);
pclk.BaudRate:= StrToIntDef(ReadString('NewCard','Speed','') , 9600);
end;
MainFRM.StatusBar1.Panels[0].Text:='链接到发卡机上...';
hPort:=OpenCommPort(pclk.Port, pclk.BaudRate);
Right:=ReadCardInfo(hPort, @CardInfo);
MainFRM.StatusBar1.Panels[0].Text:='正在读卡上的信息...';
if Right=false then begin
Application.MessageBox('读IC卡时发生错误!','操作提示',0+32);
end else begin
with DTConnect do begin
QryBadCard.Append;
QryBadCard.FieldByName('ICCardNo').AsString:=IntToStrLen(CardInfo.CardNo, 5);
QryBadCard.FieldByName('UserID').AsString:=CardInfo.Name;
QryBadCard.FieldByName('GetDate').AsDateTime:=date();
end;
Application.MessageBox('读IC卡时数据完成!按确定按钮将注销此卡。','操作提示',0+32);
end;
Windows.Beep(2500, 150);
CloseCommPort(hPort);
end;
procedure TFrmBadCard.FormCreate(Sender: TObject);
begin
WITH DTConnect do begin
QryBadCard.Close;
QryBadCard.SQL.Text:='Select * from BadCard';
QryBadCard.Open;
end;
end;
procedure TFrmBadCard.FlatButton4Click(Sender: TObject);
begin
WITH DTConnect do begin
QryBadCard.Close;
end;
self.Release;
end;
procedure TFrmBadCard.FlatButton3Click(Sender: TObject);
begin
with DTConnect do begin
if QryBadCard.State in [dsInsert,dsEdit] then begin
QryBadCard.Post;
RegDevice(QryBadCard.Fieldbyname('ICCardNo').AsString,true);
Application.MessageBox('数据更新成功!','操作提示',0+32);
end;
end;
end;
procedure TFrmBadCard.FlatButton2Click(Sender: TObject);
begin
with DTConnect do begin
RegDevice(QryBadCard.fieldbyname('ICCardNo').AsString,false);
QryBadCard.Delete;
end;
end;
procedure TFrmBadCard.FormClose(Sender: TObject; var Action: TCloseAction);
begin
self.Release;
end;
end.
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -