📄 main.~pas
字号:
unit Main;
interface
uses
Windows, SysUtils, Classes, Graphics, Controls, Forms, Messages,
EastRiver, GB2Big5, ShellApi, ShlObj, FileCtrl, IniFiles, ExtCtrls,
Progress, StdCtrls, ComCtrls, Grids, Mask, CheckLst, Dialogs, Menus, Buttons,
ImgList, PrjConst, XPMan;
const
WM_READLIST=WM_USER+101;
WM_READALLDATA=WM_USER+102;
xorch=$555555;
MYTRAY_MESSAGE=WM_USER+100;
UniqueAppStr='EastRiver 980';
arICID: array[0..2] of string=('D', 'C', ' ');
arBoolean: array[Boolean]of char=('0', '1');
arWeek: array[Boolean]of string=('', '*');
arDoorStates: array[0..5]of string=(SAEOI, SAUAeEuG, SEuG, SAEuG, SAAE, SAAA);
type
TControlAccess=class(TControl);
PCardList=^TCardList;
TCardList=record
Cols: array[1..5] of string;
// CardNo, EmpId, EmpName, Pwd, Periods: string;
Auts: Integer;
bNew: Boolean;
end;
TfrmMain=class(TForm)
PageControl1: TPageControl;
tsBaseOP: TTabSheet;
tsClockList: TTabSheet;
btnRead: TButton;
btnGetTime: TButton;
btnSetTime: TButton;
btnSetAdmin: TButton;
Panel1: TPanel;
Label2: TLabel;
btnSetPWD: TButton;
tsFileSet: TTabSheet;
Label3: TLabel;
sbFile: TButton;
tsLists: TTabSheet;
btTime: TGroupBox;
Timer: TTimer;
msg: TLabel;
tsRegCard: TTabSheet;
Bevel8: TBevel;
Label26: TLabel;
lbRegCard: TListBox;
btnRegAdd: TButton;
btnRegDel: TButton;
BitBtn3: TButton;
BitBtn4: TButton;
edFileName: TEdit;
btnOpen: TSpeedButton;
tsAbout: TTabSheet;
lbBuild: TLabel;
edFMTStr: TComboBox;
edInspector: TStaticText;
meTime1: TMaskEdit;
Label6: TLabel;
meTime2: TMaskEdit;
Label7: TLabel;
meTime3: TMaskEdit;
Label21: TLabel;
meTime4: TMaskEdit;
Label22: TLabel;
meTime5: TMaskEdit;
Label27: TLabel;
btnSetClockID: TButton;
btnSetMark: TButton;
Panel4: TPanel;
GroupBox3: TGroupBox;
Label28: TLabel;
Label30: TLabel;
Label31: TLabel;
cbPort: TComboBox;
cbRate: TComboBox;
edClockID: TEdit;
spAddClock: TButton;
sbDelClock: TButton;
sbSaveClock: TButton;
btnClockMode: TButton;
cbUseFMT: TCheckBox;
btnSearchClock: TButton;
clbDevs: TCheckListBox;
OpenDlg: TOpenDialog;
btnClearData: TButton;
btnSearch: TButton;
edClockType: TComboBox;
Label47: TLabel;
cbNotSaveDeviceList: TCheckBox;
rgOnError: TRadioGroup;
TrayPopMenu: TPopupMenu;
popShowForm: TMenuItem;
popExit: TMenuItem;
btnMoneySum: TButton;
pmClocks: TPopupMenu;
miSelectAll: TMenuItem;
miInvertSelect: TMenuItem;
miCancelAllSelect: TMenuItem;
cbICID: TCheckBox;
lbVersion: TLabel;
rbSave: TRadioGroup;
edFireware: TComboBox;
Label12: TLabel;
lvClocks: TListView;
ilImages: TImageList;
cbCardStyle: TComboBox;
Label10: TLabel;
cbCmdVerify: TCheckBox;
cbSynTime: TCheckBox;
cbAutoClearClock: TCheckBox;
XPManifest1: TXPManifest;
plLists: TPanel;
lvDeviceCards: TListView;
Panel3: TPanel;
btnClearDeviceList: TButton;
btnReadDeviceCardList: TButton;
btnWriteDeviceCardList: TButton;
btnDeviceAdd: TButton;
btnDeviceDelete: TButton;
cbListKind: TComboBox;
Label1: TLabel;
cbUpdateAllDevice: TCheckBox;
btnReadFile: TButton;
btnWriteFile: TButton;
SaveDlg: TSaveDialog;
btnReadList: TButton;
cbDispEmpId: TCheckBox;
tsPriceList: TTabSheet;
lvPriceList: TListView;
Panel2: TPanel;
Panel5: TPanel;
tsConsumption: TTabSheet;
GroupBox1: TGroupBox;
gbFixPrice: TGroupBox;
lbFixPrice: TLabel;
edFixPrice: TEdit;
btnSetFixPrice: TButton;
lbDayMaxExpend: TLabel;
edDayMaxExpend: TEdit;
btnSetDayMaxExpend: TButton;
lbDayMaxTimes: TLabel;
edDayMaxTimes: TEdit;
btnSetDayMaxTimes: TButton;
btnEditPriceList: TButton;
btnSetPriceList: TButton;
pmLists: TPopupMenu;
miSetSelectLists: TMenuItem;
miSetAllLists: TMenuItem;
cbTimeReceive: TCheckBox;
tsPeriods: TTabSheet;
Panel8: TPanel;
btnAddPeriods: TButton;
btnDeletePeriods: TButton;
btnClearPeriods: TButton;
btnWritePeriods: TButton;
btnWritePeriodFile: TButton;
btnReadPeriodFile: TButton;
cbAutoSaveFile: TCheckBox;
lvDoorPeriods: TListView;
Panel10: TPanel;
Label13: TLabel;
cbPeriodKind: TComboBox;
CheckBox1: TCheckBox;
lbDeviceList: TLabel;
miDownloadFromSel: TMenuItem;
btnFindCard: TButton;
lbCardForegift: TLabel;
edCardForegift: TEdit;
btnSetCardForegift: TButton;
cbCmdVerifyFirst: TCheckBox;
btnRealCollect: TButton;
Label4: TLabel;
cbxiazaiKind: TComboBox;
Label5: TLabel;
GroupBox2: TGroupBox;
Label8: TLabel;
Label9: TLabel;
Label11: TLabel;
Label14: TLabel;
edDayCustom: TEdit;
edNowCustom: TEdit;
edCardMoney: TEdit;
edUser: TEdit;
Button1: TButton;
Button2: TButton;
Button3: TButton;
Button4: TButton;
Label15: TLabel;
Label17: TLabel;
Label18: TLabel;
Label16: TLabel;
Label19: TLabel;
Label20: TLabel;
Label23: TLabel;
procedure FormClose(Sender: TObject; var Action: TCloseAction);
procedure btnGetTimeClick(Sender: TObject);
procedure btnSetTimeClick(Sender: TObject);
procedure btnReadClick(Sender: TObject);
procedure btnSetAdminClick(Sender: TObject);
procedure sbFileClick(Sender: TObject);
procedure cbTimeReceiveClick(Sender: TObject);
procedure btnClearDeviceListClick(Sender: TObject);
procedure lbHomePageClick(Sender: TObject);
procedure lbMailClick(Sender: TObject);
procedure FormCreate(Sender: TObject);
procedure FormDestroy(Sender: TObject);
procedure btnOpenClick(Sender: TObject);
procedure PageControl1Changing(Sender: TObject; var AllowChange: Boolean);
procedure btnSetClockIDClick(Sender: TObject);
procedure btnSetMarkClick(Sender: TObject);
procedure spAddClockClick(Sender: TObject);
procedure sbDelClockClick(Sender: TObject);
procedure sbSaveClockClick(Sender: TObject);
procedure btnSetPWDClick(Sender: TObject);
procedure PageControl1Change(Sender: TObject);
procedure meTime1Exit(Sender: TObject);
procedure TimerTimer(Sender: TObject);
procedure FormShow(Sender: TObject);
procedure lvClocksDeletion(Sender: TObject; Item: TListItem);
procedure edInspectorDblClick(Sender: TObject);
procedure cbListKindChange(Sender: TObject);
procedure clbDevsEnter(Sender: TObject);
procedure btnReadDeviceCardListClick(Sender: TObject);
procedure btnDeviceAddClick(Sender: TObject);
procedure btnDeviceDeleteClick(Sender: TObject);
procedure btnClearDataClick(Sender: TObject);
procedure lvDeviceCardsData(Sender: TObject; Item: TListItem);
procedure lvDeviceCardsDataFind(Sender: TObject; Find: TItemFind;
const FindString: string; const FindPosition: TPoint;
FindData: Pointer; StartIndex: Integer; Direction: TSearchDirection;
Wrap: Boolean; var Index: Integer);
procedure btnSearchClick(Sender: TObject);
procedure popShowFormClick(Sender: TObject);
procedure popExitClick(Sender: TObject);
procedure FormPaint(Sender: TObject);
procedure btnMoneySumClick(Sender: TObject);
procedure miSelectAllClick(Sender: TObject);
procedure miInvertSelectClick(Sender: TObject);
procedure miCancelAllSelectClick(Sender: TObject);
procedure edClockTypeExit(Sender: TObject);
procedure edClockTypeChange(Sender: TObject);
procedure lvClocksSelectItem(Sender: TObject; Item: TListItem;
Selected: Boolean);
procedure cbCardStyleChange(Sender: TObject);
procedure lvDeviceCardsKeyDown(Sender: TObject; var Key: Word;
Shift: TShiftState);
procedure btnReadFileClick(Sender: TObject);
procedure btnWriteFileClick(Sender: TObject);
procedure btnReadListClick(Sender: TObject);
procedure edFixPriceKeyPress(Sender: TObject; var Key: Char);
procedure edFixPriceExit(Sender: TObject);
procedure edDayMaxTimesExit(Sender: TObject);
procedure btnSetFixPriceClick(Sender: TObject);
procedure btnWriteDeviceCardListClick(Sender: TObject);
procedure miSetSelectListsClick(Sender: TObject);
procedure lvPriceListSelectItem(Sender: TObject; Item: TListItem;
Selected: Boolean);
procedure btnEditPriceListClick(Sender: TObject);
procedure btnSetPriceListClick(Sender: TObject);
procedure lvDeviceCardsDblClick(Sender: TObject);
procedure cbPeriodKindChange(Sender: TObject);
procedure btnReadPeriodFileClick(Sender: TObject);
procedure btnWritePeriodFileClick(Sender: TObject);
procedure btnAddPeriodsClick(Sender: TObject);
procedure btnDeletePeriodsClick(Sender: TObject);
procedure btnClearPeriodsClick(Sender: TObject);
procedure btnWritePeriodsClick(Sender: TObject);
procedure lvDoorPeriodsDblClick(Sender: TObject);
procedure lvDoorPeriodsDeletion(Sender: TObject; Item: TListItem);
procedure lvDoorPeriodsInsert(Sender: TObject; Item: TListItem);
procedure lvDoorPeriodsSelectItem(Sender: TObject; Item: TListItem;
Selected: Boolean);
procedure lvDeviceCardsInsert(Sender: TObject; Item: TListItem);
procedure lvDeviceCardsDeletion(Sender: TObject; Item: TListItem);
procedure lvDeviceCardsChange(Sender: TObject; Item: TListItem;
Change: TItemChange);
procedure miSetAllListsClick(Sender: TObject);
procedure miDownloadFromSelClick(Sender: TObject);
procedure lvDeviceCardsSelectItem(Sender: TObject; Item: TListItem;
Selected: Boolean);
procedure lvDeviceCardsColumnClick(Sender: TObject;
Column: TListColumn);
procedure btnFindCardClick(Sender: TObject);
procedure btnRealCollectClick(Sender: TObject);
procedure cbUseFMTClick(Sender: TObject);
procedure btnClockModeClick(Sender: TObject);
procedure Button1Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
procedure Button3Click(Sender: TObject);
procedure Button4Click(Sender: TObject);
procedure btnSetDayMaxExpendClick(Sender: TObject);
procedure btnSetDayMaxTimesClick(Sender: TObject);
procedure btnSetCardForegiftClick(Sender: TObject);
procedure edDayCustomKeyPress(Sender: TObject; var Key: Char);
procedure edUserKeyPress(Sender: TObject; var Key: Char);
private
{ Private declarations }
// hPort: THandle;
pclk: PClockInfo;
DeviceList: TList;
{设备黑白名单列表}
lstAllowCard, lstBlackCard, lstPassCard: array of TDownloadCardStruct;
AllowCardNumber, BlackCardNumber, PassCardNumber: Integer;
{设备黑白名单列表}
FCurrentDir, Dir, FileName: string;
bRuning: Boolean;
FClocks: TList;
{定时接收变量}
FStarts: array[1..5] of Boolean;
FStartDates: array[1..5] of TDateTime;
{}
{黑白名单及门禁文件名}
FCurrentListFile: string;
FDeviceListModified: Boolean;
{}
TrayIconData: TNotifyIconData;
procedure MarkTaskBarIcon(Sender: TObject);
procedure MyTrayMessage(var message: TMessage); message MyTRAY_MESSAGE;
procedure ListViewData(Sender: TObject; Item: TListItem; List: TList);
procedure ListViewDataFind(Sender: TObject; Find: TItemFind;
const FindString: string; const FindPosition: TPoint; FindData: Pointer;
StartIndex: Integer; Direction: TSearchDirection; Wrap: Boolean;
var Index: Integer; List: TList);
procedure OnActiveFormChange(Sender: TObject);
procedure ADeactivate(Sender: TObject);
procedure OnReadList(var message: TMessage); message WM_READLIST;
procedure OnReadAllData(var message: TMessage); message WM_READALLDATA;
// procedure WMGETCOUNT(var Msg: TMessage); message WM_USER+$100;
public
{ Public declarations }
procedure ChooseDev;
function OpenPort(pclk: PClockInfo): Boolean;
procedure ClosePort(pclk: PClockInfo);
procedure ReadData(pclk: PClockInfo; bFast: Boolean; MultiClock: Boolean);
function GetFileName(FileName: string): string;
procedure RefreshDeviceListCounter;
function GetCurrentListFile: string;
function GetStoredFileName(pclk: PClockInfo): string;
function ReadListFile(const FileName: string; Listkind: Integer; silent: Boolean; bClear: Boolean=True): Boolean;
function SaveListFile(const FileName: string; Listkind: Integer; silent: Boolean; kind: Integer): Boolean;
//Kind=0: 所有, Kind=1: 排除选定, Kind=2; 清除
function DownloadCardLists(Kind,XiazaiKind: Integer): Boolean;
//下载列表中的卡号,Kind=0:所有,Kind=1,增加选中, Kind=2,从当前选择项开始继续下载
property CurrentListFile: string read GetCurrentListFile write FCurrentListFile;
end;
var
frmMain: TfrmMain;
dlgProgress: TdlgProgress;
fIni: TIniFile;
F, F2, FLog: TextFile;
WorkDir: string;
CommPorts: string;
FDeviceSortAsc: Boolean;
FDeviceSortIndex: Integer;
function ListSortCompare(Item1, Item2: Pointer): Integer;
procedure WaitProc(p: Pointer; dwMilliseconds: Integer);stdcall;
function DataProgressProc(p: Pointer; lpReadData: P690ReadData): Boolean;stdcall;
const
fulen=32;
implementation
uses CardNo, ChDevPwd, GateCard, Hints, SearchPort, ClockOptions,
Holiday, RealControl, Functions, ListCard, DoorPeriods, SuperUserDialog,
FindListItem;
{$R *.DFM}
procedure WaitProc(p: Pointer; dwMilliseconds: Integer);
begin
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -