📄 sys700_01.pas.svn-base
字号:
unit Sys700_01;
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
Db, StdCtrls, Buttons, ExtCtrls, Registry, ADODB, SkinCaption,
WinSkinData;
type
TSys700_01Form = class(TForm)
Bevel1: TBevel;
lblPassword: TLabel;
Image1: TImage;
lblUser: TLabel;
bbtnOk: TBitBtn;
bbtnExit: TBitBtn;
lblAccount: TLabel;
bbtnNew: TBitBtn;
qrySys500A: TADOQuery;
qrySys000: TADOQuery;
cbUser: TComboBox;
edtPassword: TEdit;
cbSavePass: TCheckBox;
cbAccount: TComboBox;
SkinData1: TSkinData;
SkinCaption1: TSkinCaption;
procedure FormCreate(Sender: TObject);
procedure FormClose(Sender: TObject; var Action: TCloseAction);
procedure bbtnOkClick(Sender: TObject);
procedure bbtnExitClick(Sender: TObject);
procedure FormKeyDown(Sender: TObject; var Key: Word;
Shift: TShiftState);
procedure bbtnNewClick(Sender: TObject);
procedure cbAccountChange(Sender: TObject);
private
procedure SetInterface;
{ Private declarations }
public
{ Public declarations }
end;
var
Sys700_01Form: TSys700_01Form;
implementation
uses CommFun, SYSDATA, Sys000_01;
{$R *.DFM}
procedure TSys700_01Form.SetInterface;
begin
Font.Name:=AFontName;
Caption:=GetDBString('SYS70001001'); //'系统登录';
lblAccount.Caption:=GetDBString('SYS70001002'); //帐套
lblUser.Caption:=GetDBString('SYS70001003'); //用户名
lblPassword.Caption:=GetDBString('SYS70001004'); //密码
cbSavePass.Caption:=GetDBString('SYS70001005'); //保存密码(&S)
bbtnNew.Caption:=GetDBString('SYS70001006'); //帐套(&N)
bbtnOk.Caption:=GetDBString('SYS70001007'); //确定(&O)
bbtnExit.Caption:=GetDBString('SYS70001008'); //退出(&X)
end;
procedure TSys700_01Form.FormCreate(Sender: TObject);
begin
SetInterface;
//取得所有帐套
qrySys000.Close;
qrySys000.SQL.Clear;
qrySys000.SQL.Add('select * from HwDatabase');
qrySys000.Open;
While not qrySys000.Eof do
begin
cbAccount.Items.Add(qrySys000.FieldByName('FName').Value);
qrySys000.Next;
end;
cbAccount.ItemIndex:=0;
//读取注册表
if ReadReg('SavePassWord',1)='1' then
begin
edtPassword.Text:=EncDecStr(ReadReg('PassWord',1),1);
cbSavePass.Checked:=true;
end else
edtPassword.Text:='';
cbAccount.ItemIndex:=cbAccount.Items.IndexOf(ReadReg('CompanyName',1));
cbAccountChange(cbAccount);
cbUser.Text:=ReadReg('UserName',1);
end;
procedure TSys700_01Form.FormClose(Sender: TObject;
var Action: TCloseAction);
begin
qrySys500A.Close;
Action:=caFree;
end;
procedure TSys700_01Form.bbtnOkClick(Sender: TObject);
var
S:String;
ATime:String;
AComputerName,AIPAddress:string;
ADateTime:TDateTime;
// AOnLineUsers:Integer;
begin
inherited;
//确定
//检查帐套&用户名&密码是否正确
if cbAccount.Text='' then
begin
ShowMsg('UMS10000038'); //帐套不能为空,请选择帐套
cbAccount.SetFocus;
Abort;
end;
qrySys500A.Close;
qrySys500A.SQL.Clear;
qrySys500A.SQL.Add('select * from SYS500A where S500A_005<>0 and S500A_002='+''''+cbUser.Text+'''');
qrySys500A.Open;
if qrySys500A.IsEmpty then
begin
ShowMsg('UMS10000039'); //用户名不存在,请重新输入
cbUser.SetFocus;
Abort;
end else
begin
if qrySys500A.FieldByName('S500A_003').Value<>EncDecStr(edtPassword.Text,0) then
begin
ShowMsg('UMS10000040'); //密码不正确,请重新输入
edtPassword.SetFocus;
Abort;
end;
end;
AUserID:=qrySys500A.FieldByName('S500A_001').Value;
AUserName:=qrySys500A.FieldByName('S500A_002').Value;
ACompanyName:=cbAccount.Text;
ASuper:=qrySys500A.FieldByName('S500A_006').Value;
if ReadReg('LoginOut',1)='N' then //如果非正常退出,则自动删除原在线用户记录
begin
SYSDM.qryQuery.Close;
SYSDM.qryQuery.SQL.Clear;
SYSDM.qryQuery.SQL.Add('delete from SYS500E where S500E_001='+IntToStr(AUserID));
SYSDM.qryQuery.ExecSQL;
end;
//用户是否在线
SYSDM.qryQuery.Close;
SYSDM.qryQuery.SQL.Clear;
SYSDM.qryQuery.SQL.Add('select * from SYS500E where S500E_001='+IntToStr(AUserID));
SYSDM.qryQuery.Open;
if not SYSDM.qryQuery.IsEmpty then
begin
ShowMsg('UMS10000401'); //该用户已登录系统,同一用户不能同时登录两次或以上
cbUser.SetFocus;
Abort;
end;
{ SYSDM.qryQuery.Close;
SYSDM.qryQuery.SQL.Clear;
SYSDM.qryQuery.SQL.Add('select count(S500E_001) from SYS500E');
SYSDM.qryQuery.Open;
AOnLineUsers:=SYSDM.qryQuery.Fields[0].AsInteger;
if (AOnLineUsers<>0) and (AOnLineUsers>=ARegUsers) then
begin
ShowMsg('UMS10000410'); //在线用户数量已达到注册的最大用户数量,不可登录
cbUser.SetFocus;
Abort;
end; }
Screen.Cursor:=crHourGlass;
//写入在线用户表
GetIPAddress(AComputerName,AIPAddress);
ADateTime:=GetServerDate;
SYSDM.qryQuery.Close;
SYSDM.qryQuery.SQL.Clear;
SYSDM.qryQuery.SQL.Add('select * from SYS500E');
SYSDM.qryQuery.Open;
SYSDM.qryQuery.Append;
SYSDM.qryQuery.FieldByName('S500E_001').Value:=AUserID; //用户编号
SYSDM.qryQuery.FieldByName('S500E_002').Value:=ADateTime; //登录时间
SYSDM.qryQuery.FieldByName('S500E_003').Value:=ADateTime; //刷新时间
SYSDM.qryQuery.FieldByName('S500E_004').Value:=AIPAddress; //IP地址
SYSDM.qryQuery.FieldByName('S500E_005').Value:=AComputerName; //电脑名称
SYSDM.qryQuery.FieldByName('S500E_006').Value:=0; //状态 0=活动,1=不活动
SYSDM.qryQuery.Post;
//取得本位币
GetCurrency;
//写注册表
WriteReg('CompanyName',ACompanyName,1);
WriteReg('UserName',AUserName,1);
WriteReg('LoginDateTime',DateToStr(Now),1);
WriteReg('PassWord',EncDecStr(edtPassword.Text,0),1);
if cbSavePass.Checked then
WriteReg('SavePassWord','1',1)
else
WriteReg('SavePassWord','0',1);
WriteReg('LoginOut','N',1);
//取系统参数(关键字段字体样式及颜色)
S:=GetSysParams('SYS0009');
if copy(S,1,1)='1' then AKeyStyle:=AKeyStyle+[fsBold];
if copy(S,2,1)='1' then AKeyStyle:=AKeyStyle+[fsItalic];
if copy(S,3,1)='1' then AKeyStyle:=AKeyStyle+[fsUnderline];
AKeyColor:=TColor(StrToInt(GetSysParams('SYS0010')));
//日期格式
S:=GetSysParams('SYS0001'); //日期分隔符 - / .
case StrToInt(S) of
0:S:='-';
1:S:='/';
2:S:='.';
end;
ADateFormat[0]:='yyyy'+S+'MM'+S+'dd';
ADateFormat[1]:='yyyy'+S+'M'+S+'d';
ADateFormat[2]:='yy'+S+'MM'+S+'dd';
ADateFormat[3]:='yy'+S+'M'+S+'d';
ADateFormat[4]:='MM'+S+'dd'+S+'yyyy';
ADateFormat[5]:='M'+S+'d'+S+'yyyy';
ADateFormat[6]:='MM'+S+'dd'+S+'yy';
ADateFormat[7]:='M'+S+'d'+S+'yy';
ADateFormat[8]:='dd'+S+'MM'+S+'yyyy';
ADateFormat[9]:='d'+S+'M'+S+'yyyy';
ADateFormat[10]:='dd'+S+'MM'+S+'yy';
ADateFormat[11]:='d'+S+'M'+S+'yy';
//设置日期格式
GetLocaleInfo(LOCALE_SYSTEM_DEFAULT, LOCALE_SSHORTDATE, ASystemDate, SizeOf(ASystemDate));
S:=ADateFormat[StrToInt(GetSysParams('SYS0002'))]; //日期格式
if S<>ASystemDate then
begin
SetLocaleInfo(LOCALE_SYSTEM_DEFAULT, LOCALE_SSHORTDATE , PChar(S));
SendMessage(HWND_BROADCAST,WM_SETTINGCHANGE,0,0);
end;
//数量格式
AQtyFormat[0]:='#,###.##';
AQtyFormat[1]:='#,##0.##';
AQtyFormat[2]:='#,##0.00';
AQtyFormat[3]:='####.##';
AQtyFormat[4]:='###0.##';
AQtyFormat[5]:='###0.00';
//负数格式
S:=GetSysParams('SYS0007');
//单价格式
if S='0' then
begin
APriceFormat[0]:='#,###.####;-#,###.####';
APriceFormat[1]:='#,##0.####;-#,##0.####';
APriceFormat[2]:='#,##0.0000;-#,##0.0000';
APriceFormat[3]:='####.####;-####.####';
APriceFormat[4]:='###0.####;-###0.####';
APriceFormat[5]:='###0.0000;-###0.0000';
//金额格式
AAmountFormat[0]:='#,###.##;-#,###.##';
AAmountFormat[1]:='#,##0.##;-#,##0.##';
AAmountFormat[2]:='#,##0.00;-#,##0.00';
AAmountFormat[3]:='####.##;-####.##';
AAmountFormat[4]:='###0.##;-###0.##';
AAmountFormat[5]:='###0.00;-###0.00';
//汇率格式
ARateFormat[0]:='#,###.####;-#,###.####';
ARateFormat[1]:='#,##0.####;-#,##0.####';
ARateFormat[2]:='#,##0.0000;-#,##0.0000';
ARateFormat[3]:='####.####;-####.####';
ARateFormat[4]:='###0.####;-###0.####';
ARateFormat[5]:='###0.0000;-###0.0000';
end else
if S='1' then
begin
APriceFormat[0]:='#,###.####;(#,###.####)';
APriceFormat[1]:='#,##0.####;(#,##0.####)';
APriceFormat[2]:='#,##0.0000;(#,##0.0000)';
APriceFormat[3]:='####.####;(####.####)';
APriceFormat[4]:='###0.####;(###0.####)';
APriceFormat[5]:='###0.0000;(###0.0000)';
//金额格式
AAmountFormat[0]:='#,###.##;(#,###.##)';
AAmountFormat[1]:='#,##0.##;(#,##0.##)';
AAmountFormat[2]:='#,##0.00;(#,##0.00)';
AAmountFormat[3]:='####.##;(####.##)';
AAmountFormat[4]:='###0.##;(###0.##)';
AAmountFormat[5]:='###0.00;(###0.00)';
//汇率格式
ARateFormat[0]:='#,###.####;(#,###.####)';
ARateFormat[1]:='#,##0.####;(#,##0.####)';
ARateFormat[2]:='#,##0.0000;(#,##0.0000)';
ARateFormat[3]:='####.####;(####.####)';
ARateFormat[4]:='###0.####;(###0.####)';
ARateFormat[5]:='###0.0000;(###0.0000)';
end;
//负数字体颜色
ANegaColor:=TColor(StrToInt(GetSysParams('SYS0008')));
SYSDM.qrySys910S910_002.DisplayLabel:=GetDBString('HWERP100055'); //预警时间
SYSDM.qrySys910S910_003.DisplayLabel:=GetDBString('HWERP100056'); //内容
SYSDM.qrySys910S910_004.DisplayLabel:=GetDBString('HWERP100057'); //程序编号
ATime:=GetSysParams('SYS0011');
if ATime='' then ATime:='60000';
SYSDM.Timer1.Enabled:=False;
SYSDM.Timer1.Interval:=StrToInt(ATime)*1000; //预警时间间隔
SYSDM.Timer1.Enabled:=True;
//完成数量统计中包含下列状态
AStatusNo:=GetSysParams('TAS0011');
if AStatusNo='' then AStatusNo:='[3]';
ReplaceString('[','',AStatusNo);
ReplaceString(']','',AStatusNo);
//按照"申报日期"统计任务计划的总数量
AByTotal:=GetSysParams('TAS0012');
if AByTotal='' then AByTotal:='0';
//按照"实际完成日期"统计任务计划的完成数量
AByFinish:=GetSysParams('TAS0013');
if AByFinish='' then AByFinish:='5';
case StrToInt(AByTotal) of
0:AByTotal:='T510_006'; //0=申报日期 T510_006
1:AByTotal:='T510_007'; //1=需求日期 T510_007
2:AByTotal:='T510_025'; //2=预计开始日期 T510_025
3:AByTotal:='T510_026'; //3=预计完成日期 T510_026
4:AByTotal:='T510_027'; //4=实际开始日期 T510_027
5:AByTotal:='T510_028'; //5=实际完成日期 T510_028
end;
case StrToInt(AByFinish) of
0:AByFinish:='T510_006'; //0=申报日期 T510_006
1:AByFinish:='T510_007'; //1=需求日期 T510_007
2:AByFinish:='T510_025'; //2=预计开始日期 T510_025
3:AByFinish:='T510_026'; //3=预计完成日期 T510_026
4:AByFinish:='T510_027'; //4=实际开始日期 T510_027
5:AByFinish:='T510_028'; //5=实际完成日期 T510_028
end;
Screen.Cursor:=crDefault;
ModalResult:=1;
end;
procedure TSys700_01Form.bbtnExitClick(Sender: TObject);
begin
inherited;
//退出
Close;
end;
procedure TSys700_01Form.FormKeyDown(Sender: TObject; var Key: Word;
Shift: TShiftState);
begin
if Key in [vk_Return] then Perform(WM_NEXTDLGCTL, 0, 0);
if Key=VK_F1 then
HtmlHelp(Application.Handle, AHelpFile+'::/'+AProgramID+'.htm', $0000, nil);
end;
procedure TSys700_01Form.bbtnNewClick(Sender: TObject);
begin
//帐套(&N)
Screen.Cursor:=crHourGlass;
Sys000_01Form:=TSys000_01Form.Create(Application);
SkinData1.AddNestForm(Self,Sys000_01Form);
Screen.Cursor:=crDefault;
if Sys000_01Form.ShowModal=1 then
begin
//取得所有帐套
cbAccount.Clear;
qrySys000.Close;
qrySys000.SQL.Clear;
qrySys000.SQL.Add('select * from HwDatabase');
qrySys000.Open;
while not qrySys000.Eof do
begin
cbAccount.Items.Add(qrySys000.FieldByName('FName').Value);
qrySys000.Next;
end;
cbAccount.ItemIndex:=cbAccount.Items.Count-1;
cbAccountChange(cbAccount);
end;
end;
procedure TSys700_01Form.cbAccountChange(Sender: TObject);
var
ADBUser,ADBPass,AServer,APath:String;
begin
if not qrySys000.Active then Exit;
if qrySys000.IsEmpty then Exit;
if qrySys000.Locate('FName',cbAccount.Text,[loCaseInsensitive]) then
begin
try
AFileName:=qrySys000.FieldByName('FPath').AsString;
APath:=ASystemPath+'Data\';
ADBUser:=qrySys000.FieldByName('FUser').AsString;
ADBPass:=qrySys000.FieldByName('FPass').AsString;
AServer:=qrySys000.FieldByName('FHost').AsString;
ADatabase:=qrySys000.FieldByName('FType').AsInteger;
AVerPath:=trim(qrySys000.FieldByName('FVersion').AsString);
if copy(AVerPath,1,2)='.\' then Delete(AVerPath,1,2);
if AVerPath='' then AVerPath:=ASystemPath else AVerPath:=ASystemPath+AVerPath;
if AVerPath[Length(AVerPath)]<>'\' then AVerPath:=AVerPath+'\';
case ADatabase of //0=Access, 1=SQL Server
0:ConnectDB(SYSDM.ADOC,ADatabase,AServer,AFileName,ADBUser,'HowWell19740507');
1:ConnectDB(SYSDM.ADOC,ADatabase,AServer,AFileName,ADBUser,ADBPass);
end;
except
ShowMsg(AFileName+GetDBString('UMS10000041'),1); //数据库文件损坏,连接失败
Abort;
end;
qrySys500A.Close;
qrySys500A.SQL.Clear;
qrySys500A.SQL.Add('select * from SYS500A where S500A_005<>0');
qrySys500A.Open;
//取得所有用户名
cbUser.Clear;
While not qrySys500A.Eof do
begin
cbUser.Items.Add(qrySys500A.FieldByName('S500A_002').Value);
qrySys500A.Next;
end;
cbUser.ItemIndex:=0;
end;
end;
initialization
RegisterClass(TSys700_01Form);
finalization
UnRegisterClass(TSys700_01Form);
end.
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -