一个密码窗口无法关闭的问题。(50分)

  • 主题发起人 主题发起人 树熊132
  • 开始时间 开始时间

树熊132

Unregistered / Unconfirmed
GUEST, unregistred user!
我在主窗体之前设置了密码窗口,但当我密码输入正确时,密码窗口消失,但当把主窗体
拖到一边后,发现密码窗口还在后台,如何使该密码窗口真正消失。
文件代码。
Application.CreateForm(Tdmodal, dmodal);
Application.CreateForm(Tfrmmima, frmmima);
Application.CreateForm(Tfrmtrade, frmtrade);
frmflash.free;
密码模块文件代码:
在密码正确后:
if not assigned(frmtrade) then
begin
frmtrade:=tfrmtrade.create(nil);
end;
//frmmima.close;
frmtrade.showmodal;
主窗体代码:
onshow
frmmima.close;
但会出错,我如何使那个该死的密码框消失,各位大哥帮忙。
 
我的做法,密码输入界面不用系统来自动生成,而是在登陆界面的Unit中写一段窗体实例
化函数来实现,返回值为输入密码是否正确,即是一个boolean,然后在工程文件中来调用
这个实例化函数
function CreateEntryForm: boolean;

implementation

{$R *.dfm}

{*******************************************************************************
名称:CreateEntryForm;
描述:EntryForm的实例化函数;
参数:无;
返回: T or F ,点击“退出”而关闭窗体返回False,登录成功则为True;
时间:
作者:TERRY
修改:
To-Do:
*******************************************************************************}

function CreateEntryForm: boolean;
var
EntryForm: TEntryForm;
begin
EntryForm := TEntryForm.Create(nil);
try
EntryForm.ShowModal;
Result := EntryForm.EntryFlag;
finally
EntryForm.Free;
end;
end;

工程文件中的代码
if CreateEntryForm then
begin
Application.Initialize;
Application.Title := 'HandooMail';
Application.CreateForm(TMainForm, MainForm);
Application.Run;
end;
 
那你的实例化函数是写在哪里的
 
你可以在主form的show事件中编写如下代码!
设frmlogin为密码窗口!
procedure Tfrmmain.FormShow(Sender: TObject);
begin
if frmlogin.ShowModal <>mrok then
application.terminate
end;
只要在formlogin中密码确定后,在代码中加上modalresult :=mrok 它自己就会消失掉的!
我的程序就是这么做的,已经试验过了,放心吧 !
 
给你一个例子:
1.密码检验窗口
type
TForm1 = class(TForm)
Edit1: TEdit;
Button1: TButton;
procedure FormCreate(Sender: TObject);
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
FRight : boolean;
end;

var
Form1: TForm1;

implementation

{$R *.DFM}

procedure TForm1.FormCreate(Sender: TObject);
begin
FRight := False;
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
if Edit1.Text = 'me' then FRight := True
else FRight := False;
Close;
end;

end.

2.工程文件

begin
Application.Initialize;

Application.CreateForm(TForm1, Form1);
Form1.Showmodal;
if not Form1.FRight then Application.Terminate
else Form1.Free;
Application.CreateForm(TMainForm, MainForm);
Application.CreateForm(TAboutBox, AboutBox);
Application.Run;
end.

 
写在密码窗口的那个Unit中
 
我同意狮子王的!
那样很简单,我也做过!
 
狮子王大哥,你的密码框是再工程文件中生成的还是在需要时动态生成的
 
在你的登录窗体的onClose中加上Action := cafree;
在onDestroy中加上frmtrade(如果这是登录窗体的话) := nil;
我一般也是这样做的。希望对你有所帮助。
[:D][:D][:D]
 
就在工程文件中生成的呀!
也就是说在设计时frmlogin里就有Edit2(password)的呀!
我这个就是直接调用frmlogin的窗体!
 
我的原代码:
if key=13 then
begin
dmodal.cd1.active:=false;
dmodal.cd1.ProviderName:='Provider1';
dmodal.cd1.commandtext:='select * from znhuman where humanpsw='+''''+edit7.text+''''+' and humanname='+''''+pws.LookupValue+'''';
dmodal.cd1.active:=true;
if dmodal.cd1.recordcount=1 then
begin
frmmima.ModalResult:=mrok;
if not assigned(frmtrade) then
begin
frmtrade:=tfrmtrade.create(nil);
end;
//frmmima.close;
frmtrade.showmodal;
frmmima.Release;
end
else
begin
showmessage('您的密码不正确,请重新输入!');
end;
end;
其中,frmmima是登陆框,frmtrade是主窗体,我刚才用了大家的方法,都不行,到底怎么做
 
把你的信箱给我,我把我的程序发给你看看!
 
broken133@elong.com
 
已经给你发过去了,你去看看吧!
 
只要在frmMima的OnClose事件里加入
Action := caFree;[BLUE]//关闭时从内存释放[/BLUE]
在frmMima的OnDestroy事件里加入
frmMima := nil;[BLUE]//防止下次创建时出错[/BLUE]
 
接受答案了.
 
后退
顶部