【问题标题】:Why is it that sometimes showing hiding forms misfires?为什么有时显示隐藏表格会失败?
【发布时间】:2014-05-28 07:16:20
【问题描述】:

我的 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;

你能告诉我是我搞砸了还是有更好的方法 使表格行为正常?

【问题讨论】:

  • 旁白:制作一个无主添加WS_EX_APPWINDOW的表单没有意义。做一个就够了。
  • 所以我应该删除:Params.ExStyle := Params.ExStyle 或 WS_EX_APPWINDOW; ??
  • 如果您按照我的回答中的建议,您将根本不需要它。
  • 我将需要重写所有内容,但首先我将尝试仅使用 2 个表单来查看它是如何工作的。问题是我也需要从 mainForm 中调出这个 LoginForm……它是一个登录/注销系统。
  • 没问题。您可以随时创建和显示表单。

标签: delphi delphi-xe4


【解决方案1】:

有更好的方法来做到这一点。首先,你应该给你的表单起有意义的名字!

您真正的问题是您的主表单被隐藏了,因为您将其用作登录表单。这样做会让生活变得不必要的困难和复杂。

所以主要的建议是你应该让你真正的主窗体成为德尔福主窗体。 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;

进行此更改后,您会发现无需采取步骤将主窗体强制到任务栏上。

【讨论】:

  • 为什么我得到 [dcc32 Error] Project1.dpr(14): E2003 Undeclared identifier: 'mrOK'
  • 因为你没有使用声明mrOK的单位。它在System.UITypes中声明。
  • 我想知道如果我告诉它隐藏,为什么我的主窗体仍然可见?
  • 说实话,你的应用有点乱。而且您发布的代码不完整,但仍包含与当前问题无关的代码。例如 SQL 代码。我回答*有没有更好的方法让表单正常运行?”如果没有良好的 SSCCE,我不想拆开你的程序。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-05-06
  • 2016-12-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多