我的form1是主要形式。我用它来登录,在我不需要之后 我隐藏了它。如果登录成功,则在按钮单击时,将调用form3。
procedure TForm1.AdvGlowButton1Click(Sender: TObject);
begin
ABSQuery4.Active:=false;
ABSQuery4.SQL.Clear;
ABSQuery4.SQL.Add('select .....bla,bla,bla....');
ABSQuery4.Open;
if ABSQuery4.FieldByName('passsword').AsString<>''
then begin
Form3.Show;
Form1.Hide;
end else begin
cxTextedit1.Text := '';
showmessage('wrong password');
end;
end;
现在我注意到有时事件会产生奇怪的结果。 显示Form3,但Form1也可见。用于显示主要表格 从form3我用:
procedure TForm3.FormClose(Sender: TObject; var Action: TCloseAction);
begin
Form1.Show;
end
由于我需要Form3的应用程序图标,我有:
procedure TForm3.CreateParams(var Params: TCreateParams) ;
begin
inherited;
Params.ExStyle := Params.ExStyle or WS_EX_APPWINDOW;
Params.WndParent := 0;
end;
你能告诉我,我搞乱了什么,还是有更好的方法 使表格行为正常?
答案 0 :(得分:3)
有一种更好的方法可以做到这一点。首先,您应该为表单提供有意义的名称!
您真正的问题是您的主表单正在被隐藏,因为您将其用作登录表单。这样做会让生活变得不必要地变得困难和复杂。
所以主要的建议是你应该让你真正的主要形式是Delphi的主要形式。 Delphi主表单是使用Application.CreateForm
创建的第一个表单。我建议您只调用Application.CreateForm
一次,以创建主窗体。
这可能会让您想知道如何创建其他表单。好吧,你只需使用标准构造函数创建它们,就像任何其他对象一样。
所以你的.dpr文件代码可能如下所示:
Application.Initialize;
LoginForm := TLoginForm.Create(nil);
try
if LoginForm.ShowModal <> mrOK then
exit;
finally
LoginForm.Free;
end;
Application.CreateForm(TMainForm, MainForm);
Application.Run;
进行此更改后,您会发现不需要采取措施强制将主表单强加到任务栏上。