📄 frmlostcards.pas
字号:
unit FrmLostCardS;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, TFlatButtonUnit,ICCTRL, fcLabel, ExtCtrls, StdCtrls, TFlatEditUnit,
TFlatRadioButtonUnit,inifiles,TFrmAdds;
type
PClockInfo=^TClockInfo;
TClockInfo=record
ID: WORD;
ClockNo: String;
ClockName: String;
Port: WORD;
BaudRate: DWORD;
end;
type
TFrmLostCard = class(TForm)
Notebook1: TNotebook;
Image1: TImage;
Label2: TLabel;
FlatEdit1: TFlatEdit;
Label3: TLabel;
FlatEdit2: TFlatEdit;
Label4: TLabel;
Panel1: TPanel;
Bevel1: TBevel;
fcLabel1: TfcLabel;
FlatButton2: TFlatButton;
FlatButton3: TFlatButton;
Image2: TImage;
Panel2: TPanel;
Bevel2: TBevel;
fcLabel2: TfcLabel;
FlatButton1: TFlatButton;
FlatButton4: TFlatButton;
Label5: TLabel;
FlatButton5: TFlatButton;
Label1: TLabel;
Label6: TLabel;
Label7: TLabel;
Label8: TLabel;
FlatEdit3: TFlatEdit;
FlatEdit4: TFlatEdit;
FlatEdit5: TFlatEdit;
FlatEdit6: TFlatEdit;
FlatRadioButton1: TFlatRadioButton;
FlatRadioButton2: TFlatRadioButton;
Image3: TImage;
Panel3: TPanel;
Bevel3: TBevel;
fcLabel3: TfcLabel;
FlatButton6: TFlatButton;
FlatButton7: TFlatButton;
Label10: TLabel;
Label9: TLabel;
Label11: TLabel;
Label12: TLabel;
Label13: TLabel;
FlatEdit7: TFlatEdit;
FlatEdit8: TFlatEdit;
FlatEdit9: TFlatEdit;
FlatEdit10: TFlatEdit;
FlatButton8: TFlatButton;
Image4: TImage;
Panel4: TPanel;
Bevel4: TBevel;
fcLabel4: TfcLabel;
FlatButton10: TFlatButton;
Label15: TLabel;
Label14: TLabel;
CardNo: TLabel;
procedure FlatButton2Click(Sender: TObject);
procedure FlatButton3Click(Sender: TObject);
procedure FlatButton5Click(Sender: TObject);
procedure FlatButton1Click(Sender: TObject);
procedure FlatButton6Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
FrmLostCard: TFrmLostCard;
implementation
uses DTConnects, MainFRMS;
{$R *.dfm}
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;UserID:Integer):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));
with DTConnect do begin
QryBadCard.Close;
QryBadCard.SQL.Text:='Select * From BadCard';
QryBadCard.Open;
QryBadCard.Append;
QryBadCard.FieldByName('ICCardNo').AsString:=CardNo;
QryBadCard.FieldByName('UserID').AsInteger:=UserID;
QryBadCard.Post;
end;
end else
Right:=ClearAllRegisterCard(hPort);
Windows.Beep(2500, 150);
CloseCommPort(hPort);
end;
end;
procedure TFrmLostCard.FlatButton2Click(Sender: TObject);
begin
if (FlatEdit1.Text='') and (FlatEdit2.Text='') then
abort;
with DTConnect do begin
QryCheck.Close;
QryCheck.SQL.Text:='Select ICCardno,[Username],AddCount,CreateTime From UserCard where ICCardNo = '+FlatEdit1.Text
+' or username = '+chr(39)+FlatEdit2.Text+chr(39);
QryCheck.Open;
if QryCheck.RecordCount <1 then begin
Application.MessageBox('找不到相关的IC卡信息','操作提示',0+16);
Abort;
end;
FlatEdit3.Text:=QryCheck.FieldValues['ICCardNo'];
FlatEdit4.Text:=QryCheck.FieldValues['UserName'];
FlatEdit8.Text:=QryCheck.FieldValues['UserName'];
FlatEdit5.Text:=QryCheck.FieldValues['CreateTime'];
FlatEdit9.Text:=QryCheck.FieldValues['CreateTime'];
FlatEdit6.Text:=QryCheck.FieldValues['addcount'];
FlatEdit10.Text:=QryCheck.FieldValues['addcount'];
end;
Notebook1.PageIndex:=Notebook1.PageIndex +1;
end;
procedure TFrmLostCard.FlatButton3Click(Sender: TObject);
begin
self.Release;
end;
procedure TFrmLostCard.FlatButton5Click(Sender: TObject);
begin
Notebook1.PageIndex:=Notebook1.PageIndex - 1;
end;
procedure TFrmLostCard.FlatButton1Click(Sender: TObject);
begin
if FlatRadioButton1.Checked then
Notebook1.PageIndex :=Notebook1.PageIndex +1;
FlatEdit7.Focused;
end;
procedure TFrmLostCard.FlatButton6Click(Sender: TObject);
var hPort: THandle;
pclk: PClockInfo;
CardInfo: TCardInfo;
ReadInfo: TIniFile;
FileName:String;
CardNoStr: String;
Right:boolean;
UserID:Integer;
begin
if FlatEdit7.Text='' then begin
Application.MessageBox('请输入新IC卡的编号。','操作提示',0+32);
abort;
end;
FileName:=ExtractFilePath(Application.ExeName)+'CardInfo.ini';
ReadInfo:=TIniFile.Create(FileName);
with DTConnect do begin
qrycheck.Close;
QryCheck.SQL.Text:='Select ID from ICCard where ICCardNo = '+chr(39)+FlatEdit7.Text+chr(39);
QryCheck.Open;
if QryCheck.RecordCount >0 then begin
Application.MessageBox('已有相同编号的IC存在,请输入别的编号.','操作提示',0+16);
Abort;
end;
QryUser.Close;
QryUser.SQL.Text:='Select [ID] from [User] WHere [UserName] = '+chr(39)+FlatEdit8.Text +chr(39);
QryUser.Open;
if QryUser.RecordCount>1 then begin
Application.MessageBox('系统在搜索用户时找到两个同名的,请修改此用户名称后,再进行发新IC卡.在发完IC卡后你可重新将此用户改回原来的名字.在此造成不便,敬请见谅.','操作提示',0+48);
Abort;
end;
UserID:=QryUser.FieldValues['ID'];
CardInfo.CardNo:=StrToIntDef(FlatEdit7.Text, 0);
CardInfo.Times:=0;
CardInfo.Money:=Round(StrToFloat(FlatEdit10.Text)*10);
//CardNoStr:=FlatComboBox1.SelText;
QryUser.Close;
StrPCopy(@CardInfo.Name[1],FlatEdit8.Text );
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;
hPort:=OpenCommPort(pclk.Port, pclk.BaudRate);
Right:=WriteCardInfo(hPort, @CardInfo);
if right then begin
QryICCard.Close;
QryICCard.SQL.Text:='Select Top 1 * from ICcard';
QryICCard.Open;
QryICCard.edit;
QryICCard.FieldByName('ICCardNo').AsString:=FlatEdit7.Text;
QryICCard.FieldByName('UserN').AsInteger:=UserID;
QryICCard.FieldByName('Ancount').AsFloat:=StrToFloat(FlatEdit10.Text);
QryICCard.Post;
QryICCard.Close;
QryCheck.Close;
QryCheck.SQL.Text:='Select * from BadCard';
QryCheck.Open;
QryCheck.Append;
QryCheck.FieldByName('ICCardNo').AsString:=FlatEdit3.Text;
QryCheck.FieldByName('UserID').AsInteger:=UserID;
QryCheck.Post;
CardNo.Caption:=FlatEdit7.Text;
Notebook1.PageIndex:=Notebook1.PageIndex +1;
RegDevice(FlatEdit1.Text,True,UserID);
Application.MessageBox('成功写入IC卡信息!','操作提示',0+32);
end else
Application.MessageBox('写入IC卡信息时出错!','操作提示',0+16);
Windows.Beep(2500, 150);
CloseCommPort(hPort);
end;
end;
end.
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -