📄 login.pas
字号:
unit Login;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, Buttons, ExtCtrls, ComCtrls,
DBCtrls, DB, ADODB, ScktComp, IniFiles,jpeg,
fcImage, fcimageform, Mask, DBCtrlsEh, DBLookupEh, Grids, DBGridEh,DBGridEhImpExp,
DBSumLst;
const
CM_Restore=WM_User+$1000;
MyAppName='LH_BOM';
type
TfrmLogin = class(TForm)
Label4: TLabel;
Label5: TLabel;
lbTile: TLabel;
Bevel1: TBevel;
btbOk: TBitBtn;
btbCancel: TBitBtn;
edtPassWord: TEdit;
Image1: TImage;
wwDBlkcbUser: TDBLookupComboboxEh;
sp_logincheck: TADOStoredProc;
procedure btbCancelClick(Sender: TObject);
procedure btbOkClick(Sender: TObject);
// procedure wwdbLkcbAccountBookChange(Sender: TObject);
procedure wwDBlkcbUserCloseUp(Sender: TObject; LookupTable,
FillTable: TDataSet; modified: Boolean);
procedure wwDBlkcbUserKeyPress(Sender: TObject; var Key: Char);
procedure edtPassWordKeyPress(Sender: TObject; var Key: Char);
procedure FormClose(Sender: TObject; var Action: TCloseAction);
procedure FormCreate(Sender: TObject);
procedure FormShow(Sender: TObject);
procedure FormActivate(Sender: TObject);
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
procedure CreateParams(var Params:TCreateParams);override;
procedure RestoreRequest(var message:TMessage);message CM_Restore;
end;
var
frmLogin : TfrmLogin;
function GetApplicationVersion:String;
function GetApplicationVersion_1:string;
implementation
uses DataModule, Global, Main, Loading;
{$R *.dfm}
/////////////////获取程序的版本信息
function GetApplicationVersion:String;
var FileName:String;
InfoSize,Wnd:DWORD;
VerBuf:Pointer;
VerInfo:^VS_FIXEDFILEINFO;
begin
Result:='0.0.0.0';
FileName:=Application.ExeName;
InfoSize:=GetFileVersionInfoSize(PChar(FileName),Wnd);
if InfoSize<>0 then
begin
GetMem(VerBuf,InfoSize);
try
if GetFileVersionInfo(PChar(FileName),Wnd,InfoSize,VerBuf) then
begin
VerInfo:=nil;
VerQueryValue(VerBuf,'\',Pointer(VerInfo),Wnd);
if VerInfo<>nil then Result:=Format('%d.%d.%d.%d',[VerInfo^.dwFileVersionMS shr 16,
VerInfo^.dwFileVersionMS and $0000ffff,
VerInfo^.dwFileVersionLS shr 16,
VerInfo^.dwFileVersionLS and $0000ffff]);
end;
finally
FreeMem(VerBuf,InfoSize);
end;
end;
end;
/////////////////获取程序的版本信息
///另一种获取程序的版本信息
function GetApplicationVersion_1:string;
const
InfoNum = 10;
InfoStr: array[1..InfoNum] of string = ('CompanyName', 'FileDescription', 'FileVersion', 'InternalName', 'LegalCopyright', 'LegalTradeMarks', 'OriginalFileName', 'ProductName', 'ProductVersion', 'Comments');
var
S: string;
n, Len, i: DWORD;
Buf: PChar;
// Value: PChar;
ValueArr:array[1..InfoNum] of PChar;
begin
S := Application.ExeName;
n := GetFileVersionInfoSize(PChar(S), n);
if n > 0 then
begin
Buf := AllocMem(n);
;
//Memo1.Lines.Add('VersionInfoSize = ' + IntToStr(n));
GetFileVersionInfo(PChar(S), 0, n, Buf);
for i := 1 to InfoNum do
if VerQueryValue(Buf, PChar('\StringFileInfo\080403A8\' + InfoStr[i]), Pointer(ValueArr[i]), Len) then
//Memo1.Lines.Add(InfoStr[i] + ' = ' + ValueArr[i]);
;
FreeMem(Buf, n);
end
else
;
Result:=ValueArr[8];
//Memo1.Lines.Add('No version information found');
end;
///另一种获取程序的版本信息
procedure TfrmLogin.CreateParams(var Params:TCreateParams);
begin
inherited CreateParams(Params);
Params.WinClassName:=MyAppName;
end;
procedure TfrmLogin.RestoreRequest(var message:TMessage);
begin
if IsIconic(Application.Handle)=True then
Application.Restore
else
Application.BringToFront;
end;
procedure TfrmLogin.btbCancelClick(Sender: TObject);
begin
if MessageDlg('您确定退出当前系统吗?',mtInformation,[mbOk,mbCancel],0)<>mrOk then
begin
//CanClose := False;
//frmLogin.ShowModal;
ModalResult := mrNone;
Exit;
end
else
begin
//ShowMessage('jin');
dmClient.qryOut.Close;
dmClient.qryOut.Parameters.ParamValues['fCode']:=G_sUserCode;
dmClient.qryOut.ExecSQL;
Application.Terminate;
end;
end;
procedure TfrmLogin.btbOkClick(Sender: TObject);
var
//sAccountName : string;
sUserName, sPWD : string;
pmainform:^TForm;
MyIniFile:TIniFile;
i:Integer;
label login_again;
begin
i:=0;
if (wwDBlkcbUser.text <> '') then
begin
sUserName := Trim(dmClient.tUser.FieldbyName('fName').asString);
sPWD := Uppercase(dmClient.tUser.FieldbyName('fPWD').asString);
//验证密码
if Uppercase(edtPassWord.text) = sPWD then
begin
//设置使用状态为1,used:=1
//ShowMessage((Trim(dmClient.adocnequip_manage.DefaultDatabase)));
G_bAdmin := dmClient.tUser.FieldbyName('fFlag').asBoolean;
MyIniFile:=TIniFile.Create(ExtractFilePath(paramstr(0))+'login.ini');
G_bMultiUser:=Trim(MyIniFile.ReadString('Login','MultiUser',''));
MyIniFile.Free;
if (G_bAdmin) or (UpperCase(Trim(G_bMultiUser))='FALSE') then
begin
login_again:self.sp_logincheck.Close;
self.sp_logincheck.Parameters.ParamValues['@ProductName']:=(Trim(GetApplicationVersion_1));
self.sp_logincheck.Parameters.ParamValues['@DBName']:=(Trim(dmClient.adocnequip_manage.DefaultDatabase));
self.sp_logincheck.Parameters.ParamValues['@code']:=(Trim(dmClient.tUser.FieldValues['fCode']));
self.sp_logincheck.ExecProc;
//Exit;
//ShowMessage(IntToStr(self.sp_logincheck.Parameters.ParamValues['@RETURN_VALUE']));
if self.sp_logincheck.Parameters.ParamValues['@RETURN_VALUE']=0 then
begin
end
else
begin
G_cUserCode:=Trim(self.sp_logincheck.Parameters.ParamValues['@ccode']);
dmClient.qryOut.Close;
dmClient.qryOut.Parameters.ParamValues['fCode']:=G_sUserCode;
dmClient.qryOut.ExecSQL;
if i<>1 then
begin
i:=1;
goto login_again;
end;
ShowMessage('该用户已经在计算机名为['+G_cUserCode+']上已登录!!不允许重复登录');
Abort;
end;
end;
//sAccountName := Trim(wwdbLkcbAccountBook.text);
//向服务器发送打开帐套信息
// dmClient.CSKClient.Socket.SendText(c_OpenAccount + '~Acco' + sAccountName + '~User' + sUserName);
//设置全局变量信息
G_iUserID := dmClient.tUser.FieldbyName('fid').asInteger;
G_sUserCode := dmClient.tUser.FieldbyName('fCode').asString;
G_sDepName :=dmClient.tUser.FieldbyName('fdepotname').asString;
G_sDepCode :=dmClient.tUserfdeprotcode.AsString;
G_sUserName := sUserName;
G_SPWD := sPWD;
//G_iAccountID := dmClient.dsetAccount.FieldbyName('aID').asInteger;
// G_bTakeEffect := dmClient.dsetAccount.FieldbyName('aTakeEffect').asBoolean;
//主窗体状态栏
frmMain.StatusBar.Panels[1].text := ' 当前用户:' + G_sUserName;
// frmMain.StatusBar.Panels[2].text := ' 当前帐套:' + sAccountName;
//取得权限集
if not G_bAdmin then
with dmClient.spUserRight do
begin
parameters.ParamValues['@UserID'] := G_iUserID;
if Active then
Requery
else
Open;
end;
//更新主控制面板
//ShowMessage('欢迎使用本系统!');
Application.Title:=G_sUserName+'-'+c_AppTitle;
MyIniFile:=TIniFile.Create(ExtractFilePath(paramstr(0))+'login.ini');
MyIniFile.WriteString('Login','User',sUserName);
MyIniFile.Free;
//ModalResult := mrOk;
pmainform:=Addr(Application.MainForm);
pmainform^:=frmMain;
//ShowMessage(Application.MainForm.ClassName);
self.Close;
ModalResult:=mrOk;
frmMain.Visible:=True;
if G_bAdmin then
Main.frmMain.update_module.Visible:=True
else
Main.frmMain.update_module.Visible:=False;
main.frmMain.SetAction(); {根据当前用户的权限,设置激活状态}
//Application.CreateForm(TfrmMain,frmMain);
end
else
begin
showmessage('密码验证失败,请输入正确的密码!');
edtPassWord.text := '';
edtPassWord.SetFocus;
end;
end
else
ShowMessage('用户名不能为空!');
end;
procedure TfrmLogin.wwDBlkcbUserCloseUp(Sender: TObject; LookupTable,
FillTable: TDataSet; modified: Boolean);
begin
if wwDBlkcbUser.text <> '' then
dmClient.tUser.Locate('fCode', wwDBlkcbUser.text, [])
end;
procedure TfrmLogin.wwDBlkcbUserKeyPress(Sender: TObject; var Key: Char);
begin
if Key = #13 then
begin
Key := #0;
edtPassWord.SetFocus;
end;
end;
procedure TfrmLogin.edtPassWordKeyPress(Sender: TObject; var Key: Char);
begin
if Key = #13 then
begin
Key := #0;
btbOkClick(self)
end;
end;
procedure TfrmLogin.FormClose(Sender: TObject; var Action: TCloseAction);
begin
//Action:=caFree;
frmLogin:=Nil;
end;
procedure TfrmLogin.FormCreate(Sender: TObject);
var
MyIniFile:TIniFile;
login_user:string;
begin
MyIniFile:=TIniFile.Create(ExtractFilePath(paramstr(0))+'login.ini');
login_user:=Trim(MyIniFile.ReadString('Login','User',''));
dmClient.tUser.Close;
dmClient.tUser.Open;
if dmClient.tUser.Locate('fName',login_user,[]) then
begin
self.wwDBlkcbUser.Text:=dmClient.tUser.FieldValues['fName'];
end
else
begin
self.wwDBlkcbUser.Text:='';
end;
MyIniFile.Free;
end;
procedure TfrmLogin.FormShow(Sender: TObject);
begin
if Assigned(frmLoading) then
frmLoading.Close;
edtPassWord.text := '';
//wwdbLkcbAccountBook.Enabled := G_bAppEnabled and dmClient.dsetAccount.Active;
end;
procedure TfrmLogin.FormActivate(Sender: TObject);
begin
dmClient.tuser.Close;
dmClient.tuser.Open;
end;
procedure TfrmLogin.Button1Click(Sender: TObject);
var
ConfigIni:TIniFile;
ProductName,DBName:string;
begin
ConfigIni:=TIniFile.Create(Trim(ExtractFilePath(paramstr(0)))+'config.ini');
ProductName:=ConfigIni.ReadString('Version Info','ProductName','');
DBName:=ConfigIni.ReadString('Version Info','DBName','');
end;
end.
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -