📄 frmdelcards.pas
字号:
unit FrmDelCardS;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, ExtCtrls, fcLabel, TFlatButtonUnit,ICCTRL,INIFILES, StdCtrls,
TFlatEditUnit;
type
PClockInfo=^TClockInfo;
TClockInfo=record
ID: WORD;
ClockNo: String;
ClockName: String;
Port: WORD;
BaudRate: DWORD;
end;
type
TFrmDelCard = class(TForm)
Notebook1: TNotebook;
Image1: TImage;
Bevel1: TBevel;
fcLabel1: TfcLabel;
Image2: TImage;
fcLabel2: TfcLabel;
Bevel2: TBevel;
Image3: TImage;
fcLabel3: TfcLabel;
Bevel3: TBevel;
FlatButton1: TFlatButton;
FlatButton2: TFlatButton;
FlatButton3: TFlatButton;
Cancel: TFlatButton;
FlatButton5: TFlatButton;
FlatButton7: TFlatButton;
FlatButton8: TFlatButton;
Label1: TLabel;
Label2: TLabel;
Label3: TLabel;
Label4: TLabel;
Label5: TLabel;
Label6: TLabel;
Label7: TLabel;
Label8: TLabel;
FlatEdit1: TFlatEdit;
FlatEdit2: TFlatEdit;
FlatEdit3: TFlatEdit;
FlatEdit4: TFlatEdit;
Label9: TLabel;
Label10: TLabel;
procedure CancelClick(Sender: TObject);
procedure FlatButton1Click(Sender: TObject);
procedure FlatButton5Click(Sender: TObject);
procedure FlatButton3Click(Sender: TObject);
procedure FlatButton7Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
FrmDelCard: TFrmDelCard;
implementation
uses MainFRMS, DTConnects;
{$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);
if right then
Result:=true
else
Result:=false;
Windows.Beep(2500, 150);
CloseCommPort(hPort);
end;
end;
procedure TFrmDelCard.CancelClick(Sender: TObject);
begin
self.Release;
end;
procedure TFrmDelCard.FlatButton1Click(Sender: TObject);
var hPort: THandle;
pclk: PClockInfo;
CardInfo: TCardInfo;
ReadInfo: TIniFile;
FileName:String;
CardNoStr: String;
Right:boolean;
UserID:Integer;
begin
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 then begin
FlatEdit1.Text:=IntToStrLen(CardInfo.CardNo, 5);
FlatEdit2.Text:=PChar(@CardInfo.Name[1]);
FlatEdit3.Text:=floattostr(CardInfo.Money/10);
FlatEdit4.Text:=inttostr(CardInfo.Times);
Notebook1.PageIndex:=Notebook1.PageIndex+1;
MainFRM.StatusBar1.Panels[0].Text:='读IC卡信息成功!';
end else begin
Application.MessageBox('读IC卡信息失败!','操作提示',0+16);
MainFRM.StatusBar1.Panels[0].Text:='读IC卡信息失败!';
end;
Windows.Beep(2500, 150);
CloseCommPort(hPort);
end;
procedure TFrmDelCard.FlatButton5Click(Sender: TObject);
begin
Notebook1.PageIndex:=Notebook1.PageIndex - 1;
end;
procedure TFrmDelCard.FlatButton3Click(Sender: TObject);
begin
with DTConnect do begin
QryBadCard.Close;
QryBadCard.SQL.Text:='Delete from ICCard where ICCardNo = '+chr(39)+FlatEdit1.Text+chr(39);
QryBadCard.ExecSQL;
QryBadCard.Close;
QryBadCard.SQL.Text:='Update [User] set ICCardNo = '+chr(39)+'00000'+chr(39)
+' Where ICCardNo ='+chr(39)+FlatEdit1.Text+chr(39);
QryBadCard.ExecSQL;
QryBadCard.Close;
QryBadCard.SQL.Text:='Select Top 1 * from BadCard';
QryBadCard.Open;
QryBadCard.Append;
QryBadCard.FieldByName('ICCardNo').AsString:=FlatEdit1.Text;
QryBadCard.Post;
end;
if RegDevice(FlatEdit1.Text,True) then begin
Notebook1.PageIndex:=Notebook1.PageIndex+1;
end else begin
Application.MessageBox('删除此卡时发生错误!','操作提示',0+16);
end;
end;
procedure TFrmDelCard.FlatButton7Click(Sender: TObject);
begin
Self.Release;
end;
end.
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -