我有一个窗体(下面例子中的TBigForm),它允许操纵一些复杂的数据并需要显示其他信息。我把这个信息放在一个fsStayOnTop窗体中(示例中的OnTopForm),以确保它始终可见,但如果有必要的话可以移出。现在,当TBigForm中的某些用户操作显示一种模式形式时,这通常会隐藏在OnTopForm后面,这使得应用程序看起来像冻结了。我怎样才能避免这种情况? (搜索产量很多很多点击,但我无法提炼出他们的解决方案。)fsStayOnTop窗体隐藏的模态窗体
在我的真实应用程序中有很多显示模式窗体的地方,所以我想避免更改所有这些电话。
例:创建一个新的VCL应用程序,滴在Form1上的一个TButton,双击该按钮并用以下替换生成Button1Click实现存根:
type
TBigForm = class(TForm)
strict private
OnTopForm: TForm;
Button1: TButton;
procedure Button1Click(Sender: TObject);
protected
procedure DoHide; override;
procedure DoShow; override;
public
constructor Create(AOwner: TComponent); override;
end;
{ TBigForm }
procedure TBigForm.Button1Click(Sender: TObject);
begin
ShowMessage('Test');
end;
constructor TBigForm.Create(AOwner: TComponent);
begin
inherited CreateNew(AOwner);
Caption := 'Big form';
WindowState := wsMaximized;
Button1 := TButton.Create(Self);
Button1.Parent := Self;
Button1.Caption := 'Freeze!';
Button1.SetBounds(10, 10, 100, 100);
Button1.OnClick := Button1Click;
end;
procedure TBigForm.DoHide;
begin
OnTopForm.Free;
inherited DoHide;
end;
procedure TBigForm.DoShow;
begin
inherited DoShow;
OnTopForm := TForm.Create(Self);
OnTopForm.Caption := 'Important information';
OnTopForm.BorderStyle := bsToolWindow;
OnTopForm.FormStyle := fsStayOnTop;
OnTopForm.Position := poScreenCenter;
OnTopForm.Show;
end;
{ TForm1 }
procedure TForm1.Button1Click(Sender: TObject);
var
f: TBigForm;
begin
f := TBigForm.Create(nil);
try
f.ShowModal;
finally
f.Free;
end;
end;
启动应用程序,点击“按钮1“,然后在”冻结!“。
(BTW:我们使用D2007)显示另一种形式,模式
这很有趣 - 在3.5年后,一片茫然,没有任何评论。 – 2014-02-06 17:16:45
这是一个upvote抵消downvote。 – Shannon 2014-12-07 04:31:08
@Shannon,谢谢! :-) – 2014-12-07 09:24:52