⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 login.pas

📁 产品信息系统!关于产品基础信息的系统!功能强大!
💻 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 + -