Cómo actualizar el texto en un icono de globo de la bandeja con la mano?
-
19-09-2019 - |
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
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.