亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關(guān)于我們
? 蟲蟲下載站

?? rxlogin.pas

?? RX Library contains a large number of components, objects and routines for Borland Delphi with full
?? PAS
?? 第 1 頁 / 共 2 頁
字號:
{*******************************************************}
{                                                       }
{         Delphi VCL Extensions (RX)                    }
{                                                       }
{         Copyright (c) 1995, 1996 AO ROSNO             }
{         Copyright (c) 1997, 1998 Master-Bank          }
{                                                       }
{*******************************************************}

unit RxLogin;

{$I RX.INC}

interface

uses {$IFDEF WIN32} Windows, {$ELSE} WinTypes, WinProcs, {$ENDIF} SysUtils,
  Messages, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, ExtCtrls,
  Buttons;

type
  TUpdateCaption = (ucNoChange, ucAppTitle, ucFormCaption);
  TRxLoginEvent = 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;

  TRxLoginForm = class;

{ TRxCustomLogin }

  TRxCustomLogin = class(TComponent)
  private
    FActive: Boolean;
    FAttemptNumber: Integer;
    FLoggedUser: String;
    FMaxPasswordLen: Integer;
    FAllowEmpty: Boolean;
    FUpdateCaption: TUpdateCaption;
    FIniFileName: String;
    FUseRegistry: Boolean;
    FLocked: Boolean;
    FUnlockDlgShowing: Boolean;
    FSaveOnRestore: TNotifyEvent;
    FAfterLogin: TNotifyEvent;
    FBeforeLogin: TNotifyEvent;
    FOnUnlock: TCheckUnlockEvent;
    FOnUnlockApp: TUnlockAppEvent;
    FOnIconDblClick: TNotifyEvent;
    function GetLoggedUser: string;
    function GetIniFileName: string;
    procedure SetIniFileName(const Value: string);
    function UnlockHook(var Message: TMessage): Boolean;
  protected
    function CheckUnlock(const UserName, Password: string): Boolean; dynamic;
    function CreateLoginForm(UnlockMode: Boolean): TRxLoginForm; 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 FAllowEmpty write FAllowEmpty default True;
    property AttemptNumber: Integer read FAttemptNumber write FAttemptNumber default 3;
    property IniFileName: string read GetIniFileName write SetIniFileName;
    property MaxPasswordLen: Integer read FMaxPasswordLen write FMaxPasswordLen default 0;
    property UpdateCaption: TUpdateCaption read FUpdateCaption write FUpdateCaption default ucNoChange;
    property UseRegistry: Boolean read FUseRegistry write FUseRegistry default False;
    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;
  public
    constructor Create(AOwner: TComponent); override;
    destructor Destroy; override;
    function Login: Boolean; virtual;
    procedure TerminateApplication;
    procedure Lock;
    property LoggedUser: string read GetLoggedUser;
  end;

{ TRxLoginDialog }

  TRxLoginDialog = class(TRxCustomLogin)
  private
    FOnCheckUser: TRxLoginEvent;
    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 AttemptNumber;
    property IniFileName;
    property MaxPasswordLen;
    property UpdateCaption;
    property UseRegistry;
    property OnCheckUser: TRxLoginEvent read FOnCheckUser write FOnCheckUser;
    property AfterLogin;
    property BeforeLogin;
    property OnUnlockApp;
    property OnIconDblClick;
  end;

{ TRxLoginForm }

  TRxLoginForm = class(TForm)
    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
    { Private declarations }
    FSelectDatabase: Boolean;
    FUnlockMode: Boolean;
    FAttempt: Integer;
    FOnFormShow: TNotifyEvent;
    FOnOkClick: TNotifyEvent;
  public
    { Public declarations }
    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): TRxLoginForm;

implementation

uses {$IFDEF WIN32} Registry, {$ENDIF} IniFiles, AppUtils, RxDConst,
  Consts, VclUtils, RxConst;

{$R *.DFM}

const
  keyLoginSection  = 'Login Dialog';
  keyLastLoginUserName = 'Last Logged User';

function CreateLoginDialog(UnlockMode, ASelectDatabase: Boolean;
  FormShowEvent, OkClickEvent: TNotifyEvent): TRxLoginForm;
begin
  Result := TRxLoginForm.Create(Application);
  with Result do begin
    FSelectDatabase := ASelectDatabase;
    FUnlockMode := UnlockMode;
    if FUnlockMode then begin
      FormStyle := fsNormal;
      FSelectDatabase := False;
    end
    else begin
      FormStyle := fsStayOnTop;
    end;
    OnFormShow := FormShowEvent;
    OnOkClick := OkClickEvent;
  end;
end;

{ TRxCustomLogin }

constructor TRxCustomLogin.Create(AOwner: TComponent);
begin
  inherited Create(AOwner);
  FIniFileName := EmptyStr;
  FLoggedUser := EmptyStr;
  FActive := True;
  FAttemptNumber := 3;
  FAllowEmpty := True;
  FUseRegistry := False;
end;

destructor TRxCustomLogin.Destroy;
begin
  if FLocked then begin
    Application.UnhookMainWindow(UnlockHook);
    FLocked := False;
  end;
  //DisposeStr(FLoggedUser);
  //DisposeStr(FIniFileName);
  inherited Destroy;
end;

function TRxCustomLogin.GetIniFileName: string;
begin
  Result := FIniFileName;
  if (Result = '') and not (csDesigning in ComponentState) then begin
{$IFDEF WIN32}
    if UseRegistry then Result := GetDefaultIniRegKey
    else Result := GetDefaultIniName;
{$ELSE}
    Result := GetDefaultIniName;
{$ENDIF}
  end;
end;

procedure TRxCustomLogin.SetIniFileName(const Value: string);
begin
  FIniFileName := Value;
end;

function TRxCustomLogin.GetLoggedUser: string;
begin
  Result := FLoggedUser;
end;

procedure TRxCustomLogin.SetLoggedUser(const Value: string);
begin
  FLoggedUser := Value;
end;

procedure TRxCustomLogin.DoAfterLogin;
begin
  if Assigned(FAfterLogin) then FAfterLogin(Self);
end;

procedure TRxCustomLogin.DoBeforeLogin;
begin
  if Assigned(FBeforeLogin) then FBeforeLogin(Self);
end;

procedure TRxCustomLogin.DoIconDblCLick(Sender: TObject);
begin
  if Assigned(FOnIconDblClick) then FOnIconDblClick(Self);
end;

procedure TRxCustomLogin.DoUpdateCaption;
var
  F: TForm;
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;

function TRxCustomLogin.Login: Boolean;
var
  LoginName: string;
begin
  LoginName := EmptyStr;
  DoBeforeLogin;
  Result := DoLogin(LoginName);
  if Result then begin
    SetLoggedUser(LoginName);
    DoUpdateCaption;
    DoAfterLogin;
  end;
end;

procedure TRxCustomLogin.Lock;
begin
  FSaveOnRestore := Application.OnRestore;
  Application.Minimize;
  Application.HookMainWindow(UnlockHook);
  FLocked := True;
end;

procedure TRxCustomLogin.TerminateApplication;
begin
  with Application do begin
{$IFDEF WIN32}
    ShowMainForm := False;
{$ENDIF}
    if Handle <> 0 then ShowOwnedPopups(Handle, False);
    Terminate;
  end;
{$IFDEF RX_D3}
  CallTerminateProcs;
{$ENDIF}
{$IFNDEF RX_D3}
  Halt(10);
{$ENDIF}
end;

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
精品在线播放午夜| 国产在线视频不卡二| 狠狠狠色丁香婷婷综合激情| 成人免费毛片a| 日韩欧美资源站| 亚洲免费电影在线| 久久9热精品视频| 欧美日韩精品一区二区三区四区 | 国产精品伦一区二区三级视频| 亚洲国产精品欧美一二99| 成人免费看视频| 久久久久久一二三区| 日韩高清欧美激情| 一区二区三区四区蜜桃| 国产精品一二三四| 欧美日韩国产精品成人| 国产欧美综合在线| 青椒成人免费视频| 色偷偷久久一区二区三区| 精品国产髙清在线看国产毛片| 国产精品久久久久7777按摩| 免费在线观看一区二区三区| 91美女在线视频| 久久精品日韩一区二区三区| 亚洲国产视频一区二区| 国产成人免费xxxxxxxx| 4438成人网| 亚洲男女一区二区三区| 国产iv一区二区三区| 日韩你懂的在线观看| 亚洲国产视频一区| 欧美精品亚洲二区| 亚洲精品自拍动漫在线| 99re6这里只有精品视频在线观看| 久久一区二区三区国产精品| 午夜精品久久久| 日本精品视频一区二区| 亚洲欧洲av一区二区三区久久| 国产精品综合二区| 精品精品国产高清a毛片牛牛| 午夜精品在线看| 欧美亚洲动漫精品| 亚洲另类色综合网站| 99天天综合性| 亚洲四区在线观看| 成人午夜av影视| 中文字幕在线不卡一区二区三区| 国产在线观看免费一区| 精品日韩一区二区三区免费视频| 日本v片在线高清不卡在线观看| 欧美系列亚洲系列| 亚洲影视在线播放| 欧美日韩你懂得| 亚洲日本护士毛茸茸| 成人精品免费视频| 亚洲国产精品成人久久综合一区| 成人精品视频一区二区三区尤物| 久久久美女毛片| 丁香五精品蜜臀久久久久99网站| 久久久久国产精品麻豆| 成人午夜av电影| 亚洲啪啪综合av一区二区三区| 波多野结衣中文字幕一区二区三区 | 欧美成人综合网站| 国产精品18久久久久| 中文成人av在线| 国产成人精品亚洲日本在线桃色| 精品国产欧美一区二区| 国产美女精品人人做人人爽| 国产精品二区一区二区aⅴ污介绍| 成人免费不卡视频| 亚洲成人三级小说| 日韩欧美国产成人一区二区| 国产精品亚洲综合一区在线观看| 欧美哺乳videos| 亚洲色图第一区| 欧美三级中文字| 免费在线看成人av| 亚洲国产精品成人综合| 欧美系列在线观看| 国产乱码精品一区二区三区五月婷| 国产欧美精品国产国产专区| 91丨porny丨最新| 三级欧美在线一区| 日本一区二区高清| 欧美精品乱码久久久久久按摩| 国产在线精品免费av| 亚洲人成网站色在线观看| 欧美一区二区三区在线看| 国产大陆亚洲精品国产| 亚洲妇熟xx妇色黄| 日韩欧美在线综合网| 成人性视频网站| 视频在线观看一区| 日韩一区在线播放| 精品日韩在线观看| 在线亚洲免费视频| 国产精品99久久久| 亚洲成人在线网站| 国产精品嫩草99a| 日韩欧美亚洲一区二区| 色综合久久综合网| 久草中文综合在线| 亚洲成av人在线观看| 国产精品伦理在线| 精品久久久久久久人人人人传媒| 91精品福利在线| 成人午夜av影视| 九色porny丨国产精品| 亚洲高清不卡在线| 亚洲女同女同女同女同女同69| 26uuu亚洲婷婷狠狠天堂| 精品污污网站免费看| 一本到三区不卡视频| 精品一区二区在线免费观看| 在线综合亚洲欧美在线视频| 欧美在线你懂的| 91年精品国产| 成人av网站大全| 成人黄色国产精品网站大全在线免费观看 | 欧洲生活片亚洲生活在线观看| 国产精品538一区二区在线| 国产在线播放一区三区四| 青青草97国产精品免费观看 | 色综合久久88色综合天天6 | 欧美精品aⅴ在线视频| 一本色道a无线码一区v| 久久国产免费看| 天天爽夜夜爽夜夜爽精品视频| 国产精品久久久久国产精品日日| 精品国产露脸精彩对白| 91精品在线麻豆| 69av一区二区三区| 99精品国产一区二区三区不卡| av一本久道久久综合久久鬼色| 国产精品一区2区| 国产精品自拍在线| 国产一区二区三区免费看| 韩国一区二区视频| 国产91综合一区在线观看| 成人在线视频一区| 93久久精品日日躁夜夜躁欧美| 欧美亚洲动漫另类| 成人爽a毛片一区二区免费| 国产999精品久久久久久| 成人av先锋影音| 色先锋aa成人| 91 com成人网| 56国语精品自产拍在线观看| 色综合亚洲欧洲| 欧美日韩一区二区三区高清| 在线成人午夜影院| 精品伦理精品一区| 日本一区二区视频在线| 国产精品国产三级国产专播品爱网| 自拍偷拍亚洲综合| 亚洲高清不卡在线| 国产在线观看一区二区| 成人av在线看| 欧美日韩www| 久久精品免视看| 日韩毛片一二三区| 日韩中文字幕麻豆| 粉嫩aⅴ一区二区三区四区五区| 91视频在线观看| 制服丝袜日韩国产| 日本一区二区电影| 亚洲va天堂va国产va久| 蜜臀va亚洲va欧美va天堂| 国产不卡在线视频| 欧美一区二区三区视频免费| 中文字幕电影一区| 五月婷婷激情综合| 成人天堂资源www在线| 91麻豆精品国产91| 一区免费观看视频| 久久精品国产精品亚洲精品| 不卡的av中国片| 精品欧美乱码久久久久久 | 国产盗摄一区二区| 欧美亚洲综合在线| 中文字幕精品—区二区四季| 亚洲成人一区在线| 成人动漫一区二区在线| 日韩精品中文字幕一区| 亚洲狠狠丁香婷婷综合久久久| 视频在线观看一区二区三区| 成人中文字幕合集| 精品剧情在线观看| 婷婷夜色潮精品综合在线| 91麻豆国产福利在线观看| 久久精品视频一区| 日韩av中文字幕一区二区| 91偷拍与自偷拍精品| 久久久不卡网国产精品二区| 天天操天天色综合| 色婷婷精品久久二区二区蜜臂av| 欧美精品一区二区久久久| 石原莉奈一区二区三区在线观看| 99久久免费视频.com|