gpt4 book ai didi

windows - Delphi:将应用程序最小化到系统托盘

转载 作者:可可西里 更新时间:2023-11-01 09:42:38 24 4
gpt4 key购买 nike

我想将 Delphi 应用程序最小化到系统托盘而不是任务栏。

必要的步骤似乎如下:

  1. 创建应显示在系统托盘中的图标。
  2. 当用户点击 [-] 最小化应用程序时,执行以下操作:
    1. 隐藏表单。
    2. 将图标(第 1 步)添加到系统托盘。
    3. 隐藏/删除应用程序在任务栏中的条目。
  3. 当用户双击系统托盘中的应用程序图标时,执行以下操作:
    1. 显示表格。
    2. 再次取消最小化应用程序并将其置于最前面。
    3. 如果“WindowState”为“WS_Minimized”,则设置为“WS_Normal”。
    4. 隐藏/删除系统托盘中的应用程序图标。
  4. 当用户终止应用程序时,执行以下操作:
    1. 隐藏/删除系统托盘中的应用程序图标。

就是这样。对吧?

如何在 Delphi 中实现这一点?

我找到了以下代码,但我不知道它为什么会起作用。它不遵循我上面描述的步骤......

unit uMinimizeToTray;

interface

uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, ShellApi;

const WM_NOTIFYICON = WM_USER+333;

type
TMinimizeToTray = class(TForm)
procedure FormCreate(Sender: TObject);
procedure FormClose(Sender: TObject; var Action: TCloseAction);
procedure CMClickIcon(var msg: TMessage); message WM_NOTIFYICON;
private
{ Private-Deklarationen }
public
{ Public-Deklarationen }
end;

var
MinimizeToTray: TMinimizeToTray;

implementation

{$R *.dfm}

procedure TMinimizeToTray.CMClickIcon(var msg: TMessage);
begin
if msg.lparam = WM_LBUTTONDBLCLK then Show;
end;

procedure TMinimizeToTray.FormCreate(Sender: TObject);
VAR tnid: TNotifyIconData;
HMainIcon: HICON;
begin
HMainIcon := LoadIcon(MainInstance, 'MAINICON');
Shell_NotifyIcon(NIM_DELETE, @tnid);
tnid.cbSize := sizeof(TNotifyIconData);
tnid.Wnd := handle;
tnid.uID := 123;
tnid.uFlags := NIF_MESSAGE or NIF_ICON or NIF_TIP;
tnid.uCallbackMessage := WM_NOTIFYICON;
tnid.hIcon := HMainIcon;
tnid.szTip := 'Tooltip';
Shell_NotifyIcon(NIM_ADD, @tnid);
end;

procedure TMinimizeToTray.FormClose(Sender: TObject; var Action: TCloseAction);
begin
Action := caNone;
Hide;
end;

end.

最佳答案

如果它仍然有效,使用它可能是最简单的 JVCLTJvTrayIcon自动处理。

关于windows - Delphi:将应用程序最小化到系统托盘,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2889291/

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