Pregunta

Yo uso componente CoolTrayIcon, pero puedo modificarlo por hand.What que quiero lograr es actualizar el texto en el globo que acabo de crear sin tener que crear otro balloon.Problem es:

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;

pensé que el problema está en el HideBalloonHint función, pero estaba wrong.I comentó la llamada a HideBalloonHint en ShowBalloonHint en otros para actualizar el texto, pero no funcionó.

Pregunta: ¿Cómo se actualiza sólo el texto en el globo de la bandeja sin crear otro globo

¿Fue útil?

Solución

Parece que el icono sólo se establece si InitIcon es cierto. Cambiar su procedimiento modifyIcon para leer:

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

o conjunto InitIcon true antes de llamar ModifyIcon.

Editar - El formato de registro utilizado para @IconData es documentado en el sitio web de MSDN junto con el Shell_NotifyIcon llamada . Por lo que las especificaciones leen, usted debería ser capaz de pasar el mismo registro que envió originalmente para actualizar, ya que no funciona es posible que tenga que tomar otro enfoque.

Cree su "propia" forma indirecta globo, y posicionarlo poco más de su icono de la tarea, y actualizar directamente. Esto eliminaría las múltiples ventanas globo.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top