用户登录
关于系统用户注销然后以另一用户身份登录的Delphi实现
做一个普通的管理系统,有用户退出和用户注销的菜单。用户退出后整个系统关闭;用户注销后系统并不关闭,而是同重新启动系统一样,弹出登录窗体等待其他用户登录。
看了n多资料,方法高深得很。但是看了一下program里的代码,借用窗体的事件,轻松地实现了。
具体实现方法如下:在注销菜单的click事件中添加如下代码:
Frm_Interface.Destroy;//程序主窗体销毁;我的程序中Frm_Interface是系统启动时自动生成的主窗体。
Application.Initialize;
Application.CreateForm(TFrm_Interface, Frm_Interface);//重新创建主窗体,由于我的主窗的onshow
//事件中调用了系统登录界面,在主窗体显示之前会先启动登录界面。
Application.Run;
//
最后要强调,要想用以上方法成功实现用户注销,注意你的主窗体的Destroy事件中是不是用了不该出现的代码让整个应用程序结束了呢?如果有,解决吧!否则整个程序都注销了,后面的代码还能执行到么?!
/////////////////////////////////////////////////////////
重新登陆的事件中 mainForm.hide;if loginForm.showmodal = mbok then mainform.show 这种是主窗口在工程中比登录窗口先创建,只是被隐藏了
////////////////////////////////////////
点击“重新登录”按钮,隐藏MAin,显示Login,正确后显示Main。
追问:
我试过了,不行!
回答:
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;
type
TForm1 = class(TForm)
Button1: TButton;
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
uses Unit2;
{$R *.dfm}
procedure TForm1.Button1Click(Sender: TObject);
begin
Hide;
Form2.Show;
end;
end.
unit Unit2;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;
type
TForm2 = class(TForm)
Label1: TLabel;
Label2: TLabel;
UserName: TEdit;
Password: TEdit;
Button1: TButton;
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form2: TForm2;
implementation
uses Unit1;
{$R *.dfm}
procedure TForm2.Button1Click(Sender: TObject);
begin
if (UserName.Text = '123') and (Password.Text = '456') then
begin
Form1.Show;
Hide;
end;
end;
end.
追问:
我用的是showmodal 就不行了,为什么呢!奇怪了!
回答:
用Showmodal的话,Unit2中的Hide需要改成close或Free;Unit1中的Form2.ShowModal之前要创建窗口,相对比较复杂一点。还是用Show-Hide这一对命令较好。
////////////////////////////////////////////////////////////////////
这是我的,你参考一下:
program Tools;
uses
Windows,
Forms,
ToolsMain in 'ToolsMain.pas' {Form1},
Toolslogin in 'Toolslogin.pas' {Form2},
logindatamodule in 'logindatamodule.pas' {DataModule1: TDataModule};
{$R *.res}
begin
Application.Initialize;
Application.CreateForm(TForm1, Form1);
Application.CreateForm(TForm2, Form2);
Application.CreateForm(TDataModule1, DataModule1);
//禁止显示主窗口
application.ShowMainForm:=false;
//显示登录窗口
form2.Showmodal;
application.Title:='因公护照、通行证工具';
Application.Run;
end.