经常看到一些新手在CSDN上问登录窗口如何写,也看到N多人form1.show/form1.create/…中做form2.show之类。实在看不下去了。这种写法实在不是很好,于是还是把自己理解的登录框架来写写吧。希望能给新人一些引导(可不要误导了呀!)

1.登录窗口在什么地方调用?

我说:最好在项目文件中,splash窗口显示过,一些需要加载的资源、窗口加载过后,Application.Run之前,进行用户登录。此时,可能用到的数据连接已经建立起来了,登录就可以进系统。

2.如何调用登录窗口

我说:在登录窗口单元提供一个函数出来吧,比如Login():Boolean; 这样在要到的地方直接调用LoginF.Login()就可以呼叫登录窗口,并使用标准逻辑了。毕竟,你的登录窗口在系统中至少有两个地方要用到(启动时、重新登录时).

//项目文件代码
program KBS;

uses
  Forms,
  Windows,
  MainF in 'MainF.pas' {frmMain},
  SplashF in 'SplashF.pas' {frmSplash},
  mainDM in 'mainDM.pas' {dmMain: TDataModule},
  LoginF in 'LoginF.pas' {frmLogin};

{$R *.RES}

var
  frmMain: TfrmMain;
  dmMain: TdmMain;
begin
  Application.Initialize;
  //显示封面
  SplashF.Show;
  try
    //创建需要的资源
    Application.CreateForm(TdmMain, dmMain);
    Application.CreateForm(TfrmMain, frmMain);
    //...其它
  finally
    SplashF.Close;
  end;

if LoginF.Login() then  //呼叫登录窗口:就这一行,简单吧!
    Application.Run;
end.

3.登录窗口如何写?

我说:这个比较简单,直接上代码吧。有不懂的再交流。

unit LoginF;

interface

uses
  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
  ExtCtrls, StdCtrls, Buttons;

type
  TfrmLogin = class(TForm)
    pnl1: TPanel;
    edUserName: TEdit;
    lblUserName: TLabel;
    edPasswd: TEdit;
    lblPasswd: TLabel;
    btnOK: TBitBtn;
    btnCancel: TBitBtn;
    procedure FormCreate(Sender: TObject);
    procedure btnOKClick(Sender: TObject);
  private
    FTryTimes: Integer;
    function CheckUserInfo(AUserName, APassword: string): Boolean;
  public
  end;

function Login: Boolean;  //登录函数

implementation

{$R *.DFM}

function Login: Boolean;
begin
  //动态创建登录窗口
  with TfrmLogin.Create(nil) do
  begin
    //只有返回OK的时候认为登录成功
    Result := ShowModal() = mrOk;
    Free;
  end;
end;

function TfrmLogin.CheckUserInfo(AUserName, APassword: string): Boolean;
begin
  //简单的验证,可以修改为其它的方式
  Result := (AUserName = 'lihd' ) and (APassword = 'P@ssw0rd');
end;

procedure TfrmLogin.FormCreate(Sender: TObject);
begin
  //尝试登录的次数,初始化为0
  FTryTimes := 0;
end;

procedure TfrmLogin.btnOKClick(Sender: TObject);
begin
  Inc(FTryTimes); //尝试登录的次数 + 1
  
  if CheckUserInfo(edUserName.Text, edPasswd.Text) then
  begin
    //如果通过检查,返回OK
    Self.ModalResult := mrOk;
  end else
  begin
    if (FTryTimes > 2) then
    begin
      MessageBox(self.Handle, '你已经尝试登录3次,请联系系统管理员。', '错误', MB_OK + MB_ICONERROR);
      Self.ModalResult := mrCancel;
      Exit;
    end;

//通不过,报错
    MessageBox(self.Handle, '错误的用户名或密码,请重新输入!', '错误', MB_OK + MB_ICONERROR);
    edUserName.SetFocus();
    edUserName.SelectAll();
  end;    
end;

end.

最后,啰嗦一句:一定要好好命名函数和控件!不要一大篇form1/form2/…edit1/edit2/…要多写注释!代码缩进要有章法!

Delphi用户登录窗口框架的更多相关文章

  1. SourceTree不出现用户登录窗口,提示错误fatal: unable to access'...'; error setting certificate verify locations

    SourceTree不出现用户登录窗口,提示错误fatal: unable to access'...'; error setting certificate verify locations; .. ...

  2. 用户登录安全框架shiro—用户的认证和授权(一)

     ssm整合shiro框架,对用户的登录操作进行认证和授权,目的很纯粹就是为了增加系统的安全线,至少不要输在门槛上嘛. 这几天在公司独立开发一个供公司内部人员使用的小管理系统,客户不多但是登录一直都是 ...

  3. asp.net -mvc框架复习(7)-基于MVC搭建用户登录项目框架

    整体框架: 一.搭建Model层 1.添加通用数据访问类 2.添加实体类(封装和传递数据,和数据库中数据表对应) 3.添加数据访问类(通常和实体类同名,但是后缀名发生改变) 二.搭建控制器层Contr ...

  4. php基础系列:从用户登录处理程序学习mysql扩展基本操作

    用户注册和登录是网站开发最基本的功能模块之一,现在通过登录处理程序代码来学些下php对mysql的基本操作. 本身没有难点,主要是作为开发人员,应该能做到手写这些基本代码,算是自己加强记忆,同时希望能 ...

  5. 高仿QQ即时聊天软件开发系列之三登录窗口用户选择下拉框

    上一篇高仿QQ即时聊天软件开发系列之二登录窗口界面写了一个大概的布局和原理 这一篇详细说下拉框的实现原理 先上最终效果图 一开始其实只是想给下拉框加一个placeholder效果,让下拉框在未选择未输 ...

  6. ASP.NET MVC+EF框架+EasyUI实现权限管理系列(15)-用户登录详细错误和权限数据库模型设计

    原文:ASP.NET MVC+EF框架+EasyUI实现权限管理系列(15)-用户登录详细错误和权限数据库模型设计     ASP.NET MVC+EF框架+EasyUI实现权限管系列 (开篇)    ...

  7. ssh框架的小实例(用户登录)

    刚学SSH框架写一个小实例,以便以后查看: 本案例简单的实现一个用户登录: 数据库方面就不写了,自己领悟吧!哈哈(根据user.hbm.xml文件就知道了) 我们一般可以创建下面几个包,什么意思呢,自 ...

  8. 使用 Flask 框架写用户登录功能的Demo时碰到的各种坑(五)——实现注册功能

    使用 Flask 框架写用户登录功能的Demo时碰到的各种坑(一)——创建应用 使用 Flask 框架写用户登录功能的Demo时碰到的各种坑(二)——使用蓝图功能进行模块化 使用 Flask 框架写用 ...

  9. 使用 Flask 框架写用户登录功能的Demo时碰到的各种坑(四)——对 run.py 的调整

    使用 Flask 框架写用户登录功能的Demo时碰到的各种坑(一)——创建应用 使用 Flask 框架写用户登录功能的Demo时碰到的各种坑(二)——使用蓝图功能进行模块化 使用 Flask 框架写用 ...

随机推荐

  1. Javascript 及 CSS3 实现进度条效果

    Javascript 及 CSS3 实现进度条效果 一:css2 属性clip实现网页进度条:  在实现之前,我们先来介绍一下clip属性,因为这个属性在css2.1中很少使用到,所以我们有必要来了解 ...

  2. windows安装wget

    windows安装wget1. 下载wget-1.11.4-1-setup.exehttps://jaist.dl.sourceforge.net/project/gnuwin32/wget/1.11 ...

  3. python在输出一段话中插入多个变量,每日作业补充

    %s用来插入用户输入的值name=input('请输入您的姓名:')age=input('请输入您的年龄:')sex=input('你的性别:')print('-------您好!%s------\n ...

  4. 虚拟机上不能使用CUDA

    虚拟机的显卡是虚拟的,不能使用CUDA(至少很难),搞了一天才晃过神来: lspci 查找目前主机的硬件配备 用 grep -i 进行大小写无关的搜索

  5. 20155302《网络对抗》Exp7 网络欺诈防范

    20155302<网络对抗>Exp7 网络欺诈防范 实验内容 (1)简单应用SET工具建立冒名网站 (1分) (2)ettercap DNS spoof (1分) (3)结合应用两种技术, ...

  6. 20155320《网络对抗》Exp4 恶意代码分析

    20155320<网络对抗>Exp4 恶意代码分析 [系统运行监控] 使用schtasks指令监控系统运行 首先在C盘目录下建立一个netstatlog.bat文件(由于是系统盘,所以从别 ...

  7. 汇编 EBP ,ESP 寄存器

    知识点:  CALL框架  EBP寄存器 栈底指针  ESP寄存器 栈顶指针 一.EBP栈底指针 EBP是一个特殊的寄存器,通过EBP+偏移量 可以访问CALL里边的局部变量.它的低16位叫BP ...

  8. python 回溯法 子集树模板 系列 —— 4、数字组合问题

    问题 找出从自然数1.2.3.....n中任取r个数的所有组合. 例如,n=5,r=3的所有组合为: 1,2,3 1,2,4 1,2,5 1,3,4 1,3,5 1,4,5 2,3,4 2,3,5 2 ...

  9. 利用Python统计微信联系人男女比例以及简单的地区分布

    寒暄的话不多说,直接进入主题. 运行效果图: [准备环境] Python版本:v3.5及其以上 开发工具:随意,此处使用Pycharm [依赖包] 1.itchat (CMD运行:pip instal ...

  10. 【第十三课】监控Linux系统状态

    目录 1.查看系统负载命令:w.uptime 2.vmstat详解 3.top动态查看负载 4.sar命令(监控网卡流量) 5.nload命令(监控网卡流量) 6.iostat iotop(监控IO性 ...