gpt4 book ai didi

delphi - 如何安排非主窗体与任务栏按钮相关联?

转载 作者:行者123 更新时间:2023-12-03 18:36:42 25 4
gpt4 key购买 nike

如果隐藏主窗体 (Form1) 并显示另一个 (Form2),则任务栏中将没有应用程序图标。有没有办法纠正这个问题,所以我也有子表单的应用程序图标?

最佳答案

在下文中,当我提到所有者时,我指的是 Windows 概念而不是 VCL 概念。

据我了解,您是在问如何让您的其他表单在任务栏上有一个按钮。安排顶级窗口在任务栏上有一个按钮的方法是:

  • 使窗口可见且无主,或
  • 使窗口可见,并使用 WS_EX_APPWINDOW扩展窗口样式。

  • 您申请的主要形式, Form1 , 是无主的。当它可见时,它在任务栏上有一个按钮。

    应用程序中的其他表单具有所有者。因此,它们在任务栏上没有按钮。

    为了使您的其他表单在任务栏上有按钮,您需要确保上述任一选项都适用。这涉及覆盖 CreateParams .
    type
    TForm2 = class(TForm)
    ....
    protected
    procedure CreateParams(var Params: TCreateParams); override;
    ....
    end;
    ....
    procedure TForm2.CreateParams(var Params: TCreateParams);
    begin
    inherited;
    Params.WndParent := 0;
    end;

    以上为您提供了选项 1。对于选项 2,您可以这样写:
    procedure TForm2.CreateParams(var Params: TCreateParams);
    begin
    inherited;
    Params.ExStyle := Params.ExStyle or WS_EX_APPWINDOW;
    end;

    您在评论中询问该代码的放置位置。好吧,VCL 表单是在 Win32 之上实现的。这意味着 VCL 表单被实现为顶级窗口。通过调用 CreateWindowEx 创建窗口它接收各种参数。 Windows 可能会在窗体的生命周期内重新创建,这需要一些脚手架。

    该脚手架的一部分是 Windows VCL 控件提供要传递给 CreateWindowEx 的参数的机制。 .这些参数在 protected 虚拟方法 CreateParams 中提供.您永远不会调用该方法,您可以选择实现它。框架在需要知道 CreateWindowEx 所需的参数时调用它。 .

    通常 VCL 属性映射到传递给 CreateWindowEx 的参数(例如窗口样式) .但是,对于我上面描述的两个选项,都没有这样的 VCL 属性。所以你需要实现 CreateParams .

    关于delphi - 如何安排非主窗体与任务栏按钮相关联?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23325351/

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