📄 jvqloginform.pas
字号:
{******************************************************************************}
{* WARNING: JEDI VCL To CLX Converter generated unit. *}
{* Manual modifications will be lost on next release. *}
{******************************************************************************}
{-----------------------------------------------------------------------------
The contents of this file are subject to the Mozilla Public License
Version 1.1 (the "License"); you may not use this file except in compliance
with the License. You may obtain a copy of the License at
http://www.mozilla.org/MPL/MPL-1.1.html
Software distributed under the License is distributed on an "AS IS" basis,
WITHOUT WARRANTY OF ANY KIND, either expressed or implied. See the License for
the specific language governing rights and limitations under the License.
The Original Code is: JvxLogin.PAS, released on 2002-07-04.
The Initial Developers of the Original Code are: Fedor Koshevnikov, Igor Pavluk and Serge Korolev
Copyright (c) 1997, 1998 Fedor Koshevnikov, Igor Pavluk and Serge Korolev
Copyright (c) 2001,2002 SGB Software
All Rights Reserved.
Contributor(s):
Hofi
Last Modified: 2004-10-07
Changes:
2004-10-07:
* Added
TJvCustomLogin
property Caption to support a custom dialog Caption.
You may retrieve the latest version of this file at the Project JEDI's JVCL home page,
located at http://jvcl.sourceforge.net
Known Issues:
-----------------------------------------------------------------------------}
// $Id: JvQLoginForm.pas,v 1.16 2004/12/21 09:45:18 asnepvangers Exp $
unit JvQLoginForm;
{$I jvcl.inc}
interface
uses
SysUtils, Classes,
{$IFDEF MSWINDOWS}
Windows, // GetCurrentThreadID => Linux: System.pas
{$ENDIF MSWINDOWS}
{$IFDEF HAS_UNIT_LIBC}
Libc, // GetCurrentThreadID Linux
{$ENDIF HAS_UNIT_LIBC}
QMessages, QGraphics, QControls, QForms, QStdCtrls, QExtCtrls,
JvQComponent, JvQBaseDlg, JvQAppStorage;
type
TUpdateCaption = (ucNoChange, ucAppTitle, ucFormCaption);
TJvLoginEvent = procedure(Sender: TObject; const UserName, Password: string;
var AllowLogin: Boolean) of object;
TCheckUnlockEvent = function(const Password: string): Boolean of object;
TUnlockAppEvent = procedure(Sender: TObject; const UserName,
Password: string; var AllowUnlock: Boolean) of object;
TJvLoginForm = class;
TJvCustomLogin = class(TJvCommonDialogF)
private
FActive: Boolean;
FAttemptNumber: Integer;
FCaption: string;
FLoggedUser: string;
FMaxPasswordLen: Integer;
FAllowEmptyPassword: Boolean;
FUpdateCaption: TUpdateCaption;
FAppStorage: TJvCustomAppStorage;
FAppStoragePath: string;
FLocked: Boolean;
FSaveOnRestore: TNotifyEvent;
FAfterLogin: TNotifyEvent;
FBeforeLogin: TNotifyEvent;
FOnUnlock: TCheckUnlockEvent;
FOnUnlockApp: TUnlockAppEvent;
FOnIconDblClick: TNotifyEvent;
function GetLoggedUser: string;
procedure SetAppStorage(Value: TJvCustomAppStorage);
protected
function CheckUnlock(const UserName, Password: string): Boolean; dynamic;
function CreateLoginForm(UnlockMode: Boolean): TJvLoginForm; virtual;
procedure DoAfterLogin; dynamic;
procedure DoBeforeLogin; dynamic;
procedure DoIconDblClick(Sender: TObject); dynamic;
function DoLogin(var UserName: string): Boolean; virtual; abstract;
function DoUnlockDialog: Boolean; virtual;
procedure SetLoggedUser(const Value: string);
procedure DoUpdateCaption;
procedure UnlockOkClick(Sender: TObject);
property Active: Boolean read FActive write FActive default True;
property AllowEmptyPassword: Boolean read FAllowEmptyPassword write FAllowEmptyPassword default True;
property AttemptNumber: Integer read FAttemptNumber write FAttemptNumber default 3;
property MaxPasswordLen: Integer read FMaxPasswordLen write FMaxPasswordLen default 0;
property UpdateCaption: TUpdateCaption read FUpdateCaption write FUpdateCaption default ucNoChange;
property AfterLogin: TNotifyEvent read FAfterLogin write FAfterLogin;
property BeforeLogin: TNotifyEvent read FBeforeLogin write FBeforeLogin;
property OnUnlock: TCheckUnlockEvent read FOnUnlock write FOnUnlock; { obsolete }
property OnUnlockApp: TUnlockAppEvent read FOnUnlockApp write FOnUnlockApp;
property OnIconDblClick: TNotifyEvent read FOnIconDblClick write FOnIconDblClick;
property AppStorage: TJvCustomAppStorage read FAppStorage write SetAppStorage;
property AppStoragePath: string read FAppStoragePath write FAppStoragePath;
public
constructor Create(AOwner: TComponent); override;
destructor Destroy; override;
function Login: Boolean; virtual;
function Execute: Boolean; override;
procedure TerminateApplication;
procedure Lock;
property LoggedUser: string read GetLoggedUser;
published
property Caption: string read FCaption write FCaption;
end;
TJvLoginDialog = class(TJvCustomLogin)
private
FOnCheckUser: TJvLoginEvent;
procedure OkButtonClick(Sender: TObject);
procedure WriteUserName(const UserName: string);
function ReadUserName(const UserName: string): string;
protected
function DoCheckUser(const UserName, Password: string): Boolean; dynamic;
function DoLogin(var UserName: string): Boolean; override;
procedure Loaded; override;
published
property Active;
property AppStorage;
property AppStoragePath;
property AttemptNumber;
property Caption;
property MaxPasswordLen;
property UpdateCaption;
property OnCheckUser: TJvLoginEvent read FOnCheckUser write FOnCheckUser;
property AfterLogin;
property BeforeLogin;
property OnUnlockApp;
property OnIconDblClick;
end;
TJvLoginForm = class(TJvForm)
AppIcon: TImage;
KeyImage: TImage;
HintLabel: TLabel;
UserNameLabel: TLabel;
PasswordLabel: TLabel;
UserNameEdit: TEdit;
PasswordEdit: TEdit;
AppTitleLabel: TLabel;
OkBtn: TButton;
CancelBtn: TButton;
CustomLabel: TLabel;
CustomCombo: TComboBox;
procedure FormCreate(Sender: TObject);
procedure OkBtnClick(Sender: TObject);
procedure FormShow(Sender: TObject);
private
FSelectDatabase: Boolean;
FUnlockMode: Boolean;
FAttempt: Integer;
FOnFormShow: TNotifyEvent;
FOnOkClick: TNotifyEvent;
public
AttemptNumber: Integer;
property Attempt: Integer read FAttempt;
property SelectDatabase: Boolean read FSelectDatabase write FSelectDatabase;
property OnFormShow: TNotifyEvent read FOnFormShow write FOnFormShow;
property OnOkClick: TNotifyEvent read FOnOkClick write FOnOkClick;
end;
function CreateLoginDialog(UnlockMode, ASelectDatabase: Boolean;
FormShowEvent, OkClickEvent: TNotifyEvent;
ACaption: string = ''): TJvLoginForm;
implementation
uses
{$IFDEF UNITVERSIONING}
JclUnitVersioning,
{$ENDIF UNITVERSIONING}
QConsts,
IniFiles,
JvQJCLUtils, JvQJVCLUtils, JvQResources, JvQConsts;
{$R *.xfm}
function CreateLoginDialog(UnlockMode, ASelectDatabase: Boolean;
FormShowEvent, OkClickEvent: TNotifyEvent; ACaption: string = ''): TJvLoginForm;
begin
Result := TJvLoginForm.Create(Application);
with Result do
begin
Caption := ACaption;
FSelectDatabase := ASelectDatabase;
FUnlockMode := UnlockMode;
if FUnlockMode then
begin
FormStyle := fsNormal;
FSelectDatabase := False;
end
else
FormStyle := fsStayOnTop;
OnFormShow := FormShowEvent;
OnOkClick := OkClickEvent;
end;
end;
//=== { TJvCustomLogin } =====================================================
constructor TJvCustomLogin.Create(AOwner: TComponent);
begin
inherited Create(AOwner);
FLoggedUser := '';
FActive := True;
FAttemptNumber := 3;
FAllowEmptyPassword := True;
end;
destructor TJvCustomLogin.Destroy;
begin
if FLocked then
begin
FLocked := False;
end;
inherited Destroy;
end;
procedure TJvCustomLogin.SetAppStorage(Value: TJvCustomAppStorage);
begin
FAppStorage := Value;
end;
function TJvCustomLogin.GetLoggedUser: string;
begin
Result := FLoggedUser;
end;
procedure TJvCustomLogin.SetLoggedUser(const Value: string);
begin
FLoggedUser := Value;
end;
procedure TJvCustomLogin.DoAfterLogin;
begin
if Assigned(FAfterLogin) then
FAfterLogin(Self);
end;
procedure TJvCustomLogin.DoBeforeLogin;
begin
if Assigned(FBeforeLogin) then
FBeforeLogin(Self);
end;
procedure TJvCustomLogin.DoIconDblClick(Sender: TObject);
begin
if Assigned(FOnIconDblClick) then
FOnIconDblClick(Self);
end;
procedure TJvCustomLogin.DoUpdateCaption;
var
F: TCustomForm;
begin
F := Application.MainForm;
if (F = nil) and (Owner is TForm) then
F := Owner as TForm;
if (F <> nil) and (LoggedUser <> '') then
case UpdateCaption of
ucAppTitle:
F.Caption := Format('%s (%s)', [Application.Title, LoggedUser]);
ucFormCaption:
begin
F.Caption := Format('%s (%s)', [F.Caption, LoggedUser]);
UpdateCaption := ucNoChange;
end;
end;
end;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -