如何做系统登陆?

lostmoon 2010-02-24 05:50:07
有几个表单, FrmWec是一进入软件时显示的欢迎界面,FrmLog是用户登陆窗体,FrmMain是登陆成功后的主窗体.

如果按照这个步骤,做一个较好的登陆程序? 我原来用的是show和Hide的方式,觉得很不妥.


请给写个成熟的,大众化的代码.
...全文
263 5 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
buding79 2010-02-25
  • 打赏
  • 举报
回复
这个我觉得主要是看你了。
是先显示登陆,后显示主界面。
还是先显示主界面,还是再登陆,看你的控制了。

我写的程序是先登录的,直接写在program单元,写在最前。
//登陆
if frmlogin=nil then frmLogin:=tfrmLogin.Create(nil);
try
if not(frmLogin.ShowModal = mrok) then
begin
exit;
end;
finally
frmLogin.Free;
end;

Application.Initialize;
7年 2010-02-25
  • 打赏
  • 举报
回复
用SHOWMODEL,无非就是登陆成功显示主窗体呗。
「已注销」 2010-02-25
  • 打赏
  • 举报
回复
我的一点代码,仅供参考

procedure TFrmLogin.btnLoginClick(Sender: TObject);
var
Id: string;
password: string;
begin
if cbbUser.Items.Count = 0 then Exit;
id := PComboxID(cbbUser.Items.Objects[cbbUser.ItemIndex])._ID;
if Trim(edtPwd.Text)='' then
begin
UErrorMsgBox('密码不允许为空!');
edtPwd.SetFocus;
Exit;
end;
if qryUser.Locate('Us_ID', id, [loCaseInsensitive]) then
begin
password := qryUser.FieldByName('Us_Password').AsString;
if Trim(edtPwd.Text)<> password then
begin
UErrorMsgBox('密码错误,请重新输入!');
edtPwd.Clear;
edtPwd.SetFocus;
Exit;
end;
end;
with qryUser do
begin
with gUserInfo do
begin
_UserID:=FieldByName('Us_ID').AsInteger;
_UserName :=FieldByName('Us_Name').AsString;

end;
Close;
end;
ModalResult := mrOk;
end;

欢迎界面在工程文件里写即可。
yct0605 2010-02-25
  • 打赏
  • 举报
回复
一闪而过的窗体写在工程文件里面
yct0605 2010-02-25
  • 打赏
  • 举报
回复

1. 登录窗体先显示,登录后显示主窗体

用两个窗口举例如下:
FORM1是主窗体,FORM2是动态生成的登陆窗体(project - > options中的forms页面,把form2从左边拖到右边去),form2上面有两个按钮,一个是登陆,一个是取消,对应代码分别如下:

form2的代码:

unit Unit2;

interface

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

type
TForm2 = class(TForm)
Button1: TButton;
Button2: TButton;
procedure Button1Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;

var
Form2: TForm2;

implementation

{$R *.dfm}

procedure TForm2.Button1Click(Sender: TObject);
begin
ModalResult := mrOk;
end;

procedure TForm2.Button2Click(Sender: TObject);
begin
ModalResult := mrCancel;
end;

end.

然后在工程文件中,默认为project1.pas, 代码如下:

program Project1;

uses
Forms,
Controls,
Unit1 in 'Unit1.pas' {Form1},
Unit2 in 'Unit2.pas' {Form2};

{$R *.res}

begin
Application.Initialize;
Form2 := TForm2.Create(nil);
try
if Form2.ShowModal = mrOk then begin
Application.CreateForm(TForm1, Form1);
Application.Run;
end;
finally
Form2.Free;
end;
end.

运行,查看效果,会发现程序先出现的是form2,当点击了登陆按钮,可以显示主窗体,否则程序结束。至于你说的数据连接窗口,同样的方法,自己编码控制吧。

2 .两个窗体一起闪烁,两个窗口一起显示,登录窗体在主窗体上方显示,也就是说层叠的, 不过得登录了之后才能使主窗体活动

form1中代码如下:

unit Unit1;

interface

uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs;

type
TForm1 = class(TForm)
procedure FormCreate(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;

var
Form1: TForm1;

implementation

uses Unit2;

{$R *.dfm}

procedure TForm1.FormCreate(Sender: TObject);
begin
Form2 := TForm2.Create(nil);
Form1.Show;
try
if Form2.ShowModal <> mrOk then
Application.Terminate;
finally
Form2.Free;
end;
end;

end.

工程文件的代码如下:

program Project2;

uses
Forms,
Unit1 in 'Unit1.pas' {Form1},
Unit2 in 'Unit2.pas' {Form2};

{$R *.res}

begin
Application.Initialize;

Application.CreateForm(TForm1, Form1);

Application.Run;
end.

form2的代码如下:

unit Unit2;

interface

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

type
TForm2 = class(TForm)
Button1: TButton;
Button2: TButton;
procedure Button1Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;

var
Form2: TForm2;

implementation

{$R *.dfm}

procedure TForm2.Button1Click(Sender: TObject);
begin
ModalResult := mrOk;
end;

procedure TForm2.Button2Click(Sender: TObject);
begin
ModalResult := mrCancel;
end;

end.

1,183

社区成员

发帖
与我相关
我的任务
社区描述
Delphi Windows SDK/API
社区管理员
  • Windows SDK/API社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧