gpt4 book ai didi

delphi - fsStayOnTop 表单隐藏的模态表单

转载 作者:行者123 更新时间:2023-12-02 04:05:34 25 4
gpt4 key购买 nike

我有一个表单(下例中的 TBigForm),它允许操作一些复杂的数据并需要显示其他信息。我将此信息放入 fsStayOnTop 表单(示例中为 OnTopForm)中,以确保它始终可见,但可以在必要时移开。现在,当 TBigForm 中的某些用户操作显示模式表单时,它通常会隐藏在 OnTopForm 后面,这使得应用程序看起来卡住。我怎样才能避免这种情况? (搜索产生了很多很多的结果,但我无法从中提炼出解决方案。)

在我的真实应用程序中,有很多地方显示模式表单,因此我想避免更改所有这些调用。

示例:创建一个新的 VCL 应用程序,在 Form1 上放置一个 TButton,双击该按钮,然后将生成的 Button1Click 实现 stub 替换为以下内容:

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;

启动应用程序,单击“Button1”,然后单击“卡住!”。

(顺便说一句:我们使用 D2007。)

最佳答案

在将另一个表单显示为模态之前暂时更改 OnTopform 的 FormStyle:

procedure TBigForm.Button1Click(Sender: TObject);
begin
OnTopForm.FormStyle := fsNormal;
ShowMessage('Test');
OnTopForm.FormStyle := fsStayOnTop;
end;

它应该可以满足您的需求...

关于delphi - fsStayOnTop 表单隐藏的模态表单,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3408594/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com