2,497
社区成员
发帖
与我相关
我的任务
分享
RegFile := TRegIniFile.Create(HDBOH_COMPANY + '\数据库连结');
unit UnitYangGuangLogon;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, Buttons, ExtCtrls, ComCtrls, Menus, ShellApi, IniFiles, Registry,
UnitAkTypes, UnitYangGuangConst, UnitYangGuangDb;
type
TFormLogon = class(TForm)
EditUserId: TEdit;
Label2: TLabel;
EditUserPassword: TEdit;
Label1: TLabel;
ButtonLogon: TButton;
ButtonQuit: TButton;
Image2: TImage;
Image1: TImage;
PopupMenu: TPopupMenu;
N1: TMenuItem;
CheckBoxSaveUserId: TCheckBox;
procedure FormKeyDown(Sender: TObject; var Key: Word;
Shift: TShiftState);
procedure ButtonLogonClick(Sender: TObject);
procedure FormCreate(Sender: TObject);
procedure FormDestroy(Sender: TObject);
procedure FormKeyPress(Sender: TObject; var Key: Char);
procedure Image1Click(Sender: TObject);
procedure N1Click(Sender: TObject);
procedure FormActivate(Sender: TObject);
private
{ Private declarations }
DbMustInitialized: Boolean;
public
{ Public declarations }
end;
function CheckPasswd(const sTitle: string = ''; OpCode: Integer = 0; const Password: string = ''; DbMustInitialized: Boolean = True): Boolean;
function CmdLogon(DbMustInitialized: Boolean = True): Boolean;
function CheckPasswdNoLogo(const sTitle: string; OpCode: Integer = 0; const Password: string = ''; DbMustInitialized: Boolean = True): Boolean;
function DoLogin(UserCode: Integer; const Password: string; DbMustInitialized: Boolean = True): Boolean;
implementation
{$R *.dfm}
uses AdoDB;
procedure TFormLogon.Image1Click(Sender: TObject);
begin
ShellExecute(Handle, 'open', YangGuang_WEBHOME, nil, nil, SW_SHOW)
end;
procedure TFormLogon.N1Click(Sender: TObject);
var
DSN: WideString;
begin
if FileExists(GetDSNFileName) then
ReadDSN(GetDSNFileName, YangGuangDSN)
else
YangGuangDsn := '';
DSN := YangGuangDsn;
DSN := AdoDB.PromptDataSource(Self.Handle, DSN);
YangGuangDsn := DSN;
WriteDSN(GetDSNFileName, YangGuangDSN);
end;
procedure TFormLogon.FormKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState);
var
OldKey: Word;
begin
OldKey := Key;
Key := 0;
case OldKey of
VK_DOWN: if not (ssAlt in Shift) and not (ActiveControl is TCustomListControl) then
SelectNext(ActiveControl, True, True)
else
Key := OldKey;
VK_UP: if not (ssAlt in Shift) and not (ActiveControl is TCustomListControl) then
SelectNext(ActiveControl, False, True)
else
Key := OldKey;
VK_RETURN: SelectNext(ActiveControl, True, true);
else
Key := OldKey;
end;
end;
function CheckPasswd(const sTitle: string = ''; OpCode: Integer = 0; const Password: string = ''; DbMustInitialized: Boolean = True): Boolean;
var
FormLogon: TFormLogon;
begin
FormLogon := TFormLogon.Create(Application);
try
if sTitle > '' then
FormLogon.Caption := sTitle
else
FormLogon.Caption := Application.Title;
if OpCode > 0 then FormLogon.EditUserId.Text := IntToStr(OpCode);
if Password > '' then FormLogon.EditUserPassword.Text := Password;
FormLogon.DbMustInitialized := DbMustInitialized;
Result := FormLogon.ShowModal = mrOK;
finally
FormLogon.Free;
end;
end;
function CheckPasswdNoLogo(const sTitle: string; OpCode: Integer = 0; const Password: string = ''; DbMustInitialized: Boolean = True): Boolean;
var
FormLogon: TFormLogon;
begin
FormLogon := TFormLogon.Create(Application);
try
FormLogon.Image1.Visible := False;
FormLogon.Image2.Visible := False;;
FormLogon.Caption := sTitle;
if OpCode > 0 then FormLogon.EditUserId.Text := IntToStr(OpCode);
if Password > '' then FormLogon.EditUserPassword.Text := Password;
FormLogon.DbMustInitialized := DbMustInitialized;
Result := FormLogon.ShowModal = mrOK;
finally
FormLogon.Free;
end;
end;
procedure TFormLogon.ButtonLogonClick(Sender: TObject);
var
UserName, Password: string;
UserCode: Integer;
begin
UserName := Trim(EditUserId.Text);
Password := EditUserPassword.Text;
if (UserName = '') or (StrToIntDef(UserName, 0) = 0) then
begin
ShowMessage('your id');
Self.EditUserId.SetFocus;
Exit;
end;
UserCode := StrToInt(UserName);
if DoLogin(UserCode, Password, Self.DbMustInitialized) then
Self.ModalResult := mrOK;
end;
procedure TFormLogon.FormActivate(Sender: TObject);
begin
if Self.EditUserId.Text = '' then
Self.EditUserId.SetFocus
else
Self.EditUserPassword.SetFocus;
end;
procedure TFormLogon.FormCreate(Sender: TObject);
var
RegFile: TRegIniFile;
begin
RegFile := TRegIniFile.Create(HDBOH_COMPANY + '\数据库连结');
try
Self.CheckBoxSaveUserId.Checked := RegFile.ReadBool('LastLogin', 'SaveLastUserName', False);
if Self.CheckBoxSaveUserId.Checked then
Self.EditUserId.Text := RegFile.ReadString('LastLogin', 'UserId', '')
else
Self.EditUserId.Text := '';
finally
RegFile.Free;
end;
end;
procedure TFormLogon.FormDestroy(Sender: TObject);
var
RegFile: TRegIniFile;
begin
RegFile := TRegIniFile.Create(HDBOH_COMPANY + '\数据库连结');
try
RegFile.WriteBool('LastLogin', 'SaveLastUserName', Self.CheckBoxSaveUserId.Checked);
if Self.CheckBoxSaveUserId.Checked then
RegFile.WriteString('LastLogin', 'UserId', Self.EditUserId.Text)
else
RegFile.WriteString('LastLogin', 'UserId', '');
finally
RegFile.Free;
end;
end;
function CmdLogon(DbMustInitialized: Boolean = True): Boolean;
var
UserCode: Integer;
Password: string;
begin
Result := False;
if ParamCount < 2 then Exit;
UserCode := StrToIntDef(ParamStr(1), 0);
Password := ParamStr(2);
Result := DoLogin(UserCode, Password, DbMustInitialized);
end;
procedure TFormLogon.FormKeyPress(Sender: TObject; var Key: Char);
begin
if Key = #13 then Key := #0;
end;
function DoLogin(UserCode: Integer; const Password: string; DbMustInitialized: Boolean = True): Boolean;
var
ErrorCode: Integer;
ServerDate: TYangGuangDate;
ServerTime: TYangGuangTime;
begin
Result := False;
ReadDSN(GetDSNFileName, YangGuangDSN);
UnitYangGuangDb.InitConnection;
try
ErrorCode := UnitYangGuangDb.Login(UserCode, Password, ServerDate, ServerTime);
if ErrorCode = 0 then
begin
if AkDate(Now) <> ServerDate then
raise Exception.CreateFmt('xxxxxxxx', [ServerDate, AkDate(Now)])
else
if ABS(AkSeconds(AkTime(Now)) - AkSeconds(ServerTime)) > 300 then begin
if MessageDLG(Format('xxxxxxx', [ServerDate, AkDate(Now)]), mtConfirmation, [mbYes, mbNo], 0, mbYes) = mrYes then
DoCorrectSystemTime
else
raise Exception.CreateFmt('xxxxxx', [ServerDate, AkDate(Now)]);
end;
if DbMustInitialized then
begin
if UnitYangGuangDB.IsNeedInitDb(UnitYangGuangDB.GetSysInfo) then
if MessageDlg('xxx'#13#10#13#10#13#10'xxxxx', mtConfirmation, [mbYes, mbNo], 0) = mrYes then
begin
ErrorCode := InitYangGuangNowDB;
if ErrorCode = 0 then
ShowMessage('ok')
else
raise Exception.Create(GetErrorMessage(ErrorCode));
end;
end;
Result := True;
end
else
ShowMessage(UnitYangGuangDb.GetErrorMessage(ErrorCode));
except
on E: Exception do
begin
UnitYangGuangDb.CloseConnection;
ShowMessage(E.Message);
end;
end;
end;
end.