2009-08-24 5 views
1

ich CoolTrayIcon Komponente verwenden, aber ich kann es durch hand.What modifizieren ich erreichen will ist, den Text in dem Ballon zu aktualisieren Ich habe gerade, ohne eine andere balloon.Problem tatsächlich zu schaffen ist:Wie aktualisiert man den Text in einer Tray-Icon-Sprechblase von Hand?

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; 

dachte ich, die Problem ist in der Funktion HideBalloonHint, aber ich war falsch.Ich habe den Aufruf von HideBalloonHint bei ShowBalloonHint in anderen kommentiert, um den Text zu aktualisieren, aber es hat nicht funktioniert.

Frage: Wie wird nur der Text im Trayballon aktualisiert, ohne einen weiteren Ballon zu erstellen?

Antwort

2

Es scheint, dass Ihr Symbol nur gesetzt wird, wenn InitIcon wahr ist. Ändern Sie Ihre modifyIcon Prozedur zu lesen:

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

oder setzen InitIcon auf true vor ModifyIcon Aufruf.

EDIT-- Das Aufzeichnungsformat für @IconData verwendete documented auf der MSDN-Website zusammen mit dem shell_NotifyIcon Anruf. Von den Spezifikationen gelesen, sollten Sie in der Lage sein, den gleichen Datensatz zu übergeben, der ursprünglich zum Aktualisieren gesendet wurde, da dies nicht funktioniert, müssen Sie möglicherweise einen anderen Ansatz wählen.

Erstellen Sie Ihr "eigenes" Sprechblasenhinweisformular und positionieren Sie es direkt über Ihrem Aufgabensymbol und aktualisieren Sie es direkt. Dies würde die mehreren Ballonfenster eliminieren.

+0

Es schafft immer noch zwei Ballons. –

Verwandte Themen