1

CoolTrayIcon コンポーネントを使用していますが、手動で変更できます。達成したいことは、実際に別のバルーンを作成せずに、作成したばかりのバルーン内のテキストを更新することです。問題は次のとおりです。

function TCoolTrayIcon.ShowBalloonHint(Title: String; Text: String;
  IconType: TBalloonHintIcon; TimeoutSecs: TBalloonHintTimeOut): Boolean;
// Show balloon hint. Return false if error.
const
  aBalloonIconTypes: array[TBalloonHintIcon] of Byte =
    (NIIF_NONE, NIIF_INFO, NIIF_WARNING, NIIF_ERROR);
begin
  // Remove old balloon hint
  HideBalloonHint;
  // Display new balloon hint
  with IconData do
  begin
    uFlags := uFlags or NIF_INFO;
    StrLCopy(szInfo, PChar(Text), SizeOf(szInfo)-1);
    StrLCopy(szInfoTitle, PChar(Title), SizeOf(szInfoTitle)-1);
    TimeoutOrVersion.uTimeout := TimeoutSecs * 1000;
    dwInfoFlags := aBalloonIconTypes[IconType];
  end;
  Result := ModifyIcon;
  { Remove NIF_INFO before next call to ModifyIcon (or the balloon hint will
    redisplay itself) }
  with IconData do
    uFlags := NIF_ICON + NIF_MESSAGE + NIF_TIP;
end;

function TCoolTrayIcon.HideBalloonHint: Boolean;
// Hide balloon hint. Return false if error.
begin
  with IconData do
  begin
    uFlags := uFlags or NIF_INFO;
    StrPCopy(szInfo, '');
  end;
  Result := ModifyIcon;
end;

function TCoolTrayIcon.ModifyIcon: Boolean;
// Change icon or tooltip if icon already placed
begin
  Result := False;
  if InitIcon then
    Result := Shell_NotifyIcon(NIM_MODIFY, @IconData);
end;

HideBalloonHint 関数に問題があると思っていたのですが、違いました。ShowBalloonHint での HideBalloonHint の呼び出しを、他のテキストを更新するためにコメントしましたが、機能しませんでした。

質問:別のバルーンを作成せずに、トレイ バルーンのテキストのみを更新するにはどうすればよいですか?

4

1 に答える 1

2

InitIcon が true の場合にのみアイコンが設定されているようです。modifyIcon プロシージャを次のように変更します。

function TCoolTrayIcon.ModifyIcon: Boolean;
// Change icon or tooltip if icon already placed
begin
  Result := Shell_NotifyIcon(NIM_MODIFY, @IconData);
end;

または、ModifyIcon を呼び出す前に InitIcon を true に設定します。

編集 -- @IconData に使用されるレコード形式は、 shell_NotifyIcon呼び出しとともに MSDN Web サイトに記載されています。仕様が読み取ったものから、最初に送信されたものと同じレコードを更新に渡すことができるはずです。これは機能しないため、別のアプローチを取らなければならない場合があります。

「独自の」バルーン ヒント フォームを作成し、タスク アイコンのすぐ上に配置して、直接更新します。これにより、複数のバルーン ウィンドウがなくなります。

于 2009-08-24T17:02:38.783 に答える