gpt4 book ai didi

Delphi 窗口位于所有其他应用程序之上,而主窗口位于下方

转载 作者:行者123 更新时间:2023-12-03 15:49:45 25 4
gpt4 key购买 nike

我有一个由一个主窗口和一个弹出窗口组成的应用程序,我想位于所有其他应用程序之上。我们将“窗口 A”称为主窗口,将“窗口 B”称为顶部弹出窗口,将“窗口 C”称为另一个应用程序的窗口。

我使用以下代码将窗口 B 设置在顶部:

    SetWindowPos(Handle, HWND_TOPMOST, 0, 0, 0, 0,
SWP_NoMove or SWP_NoSize);

这按预期工作,我可以打开另一个应用程序(窗口 C)并且窗口 B 保持在顶部。但是,如果我单击其窗口标题,“窗口 A”就会出现在“窗口 C”之上。有没有办法防止单击窗口 B 的任何部分时主窗口(窗口 A)浮到前面?

最佳答案

要让“Window B”始终位于顶部,可以将其 FormStyle 属性设置为 fsStayOnTop,无需调用 SetWindowPos >。重写 CreateParams 使其不被任何窗口拥有,这样它在激活时就不会将其所有者带到前面。

type
TWindowB = class(TForm)
procedure FormCreate(Sender: TObject);
protected
procedure CreateParams(var Params: TCreateParams); override;
end;

procedure TWindowB.CreateParams(var Params: TCreateParams);
begin
inherited;
Params.WndParent := 0;
end;

procedure TWindowB.FormCreate(Sender: TObject);
begin
FormStyle := fsStayOnTop;
end;

对于普通窗口(例如 BorderStyle = bsSizeable),“窗口 B”将有一个任务栏按钮和 Alt+Tab 图标。这是正常的,因为该窗口现在不依赖于任何其他窗口来激活,所以它应该有方法来激活它。为了避免这种情况,您可以使用 bsToolWindowbsSizeToolWin 作为 BorderStyle,或者通过设置 Application.Handle< 将隐藏的应用程序窗口作为窗口所有者Params.WndParent

请注意,最顶层窗口与其他可能的最顶层窗口相比没有任何优先级,它们中的任何一个都可能被置于最前面。

关于Delphi 窗口位于所有其他应用程序之上,而主窗口位于下方,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40490440/

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