Announcement

Collapse
No announcement yet.

Grund des Windows Anzeige Fehlers

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • Grund des Windows Anzeige Fehlers

    Hallo Herr Kosch,

    Ich habe immer in den Netzwerkkomponenten die Schuld am Anzeigefehler gegeben, diese waren aber garnicht schuld!!

    Schuld war ein Blinkendes Symbol in der TNA!!!!!!!!!!!

    Ich habe ein kleines Beispiel Programm geschrieben, das nur blinkt (also das Problem vollkommen isoliert), dann ist das Problem nach ca. 10 Sek. Aufgetreten, weiters habe ich festgestellt, daß es nur bei WinNT 4.0 auftritt(keine Ahnung wieso)!

    Hier mein Quellcode:

    var <br>
    blink : boolean;<br>
    icostatus:longint;<br>
    <br>
    procedure TaskBarAddIcon;<br>
    var tnid : TNOTIFYICONDATA ;<br>
    ico : ticon;<br>
    begin<br>
    tnid.cbSize := sizeof(TNOTIFYICONDATA);<br>
    tnid.Wnd := frmmain.handle;<br>
    tnid.uID := 1;<br>
    tnid.uFlags := NIF_MESSAGE or NIF_ICON or NIF_TIP;<br>
    ico:=ticon.Create;<br>
    frmmain.imglst.GetIcon(0,ico);<br>
    tnid.hIcon := ico.Handle;<br>
    strcopy(tnid.szTip,'BugReport');<br>
    Shell_NotifyIcon(NIM_ADD, @tnid);<br>
    end;<br>

    procedure TaskbarChangeIcon(index : integer);<br>
    var tnid : TNotifyIconData;<br>
    ico : ticon;<br>
    begin<br>
    tnid.cbSize := sizeof(TNOTIFYICONDATA);<br>
    tnid.Wnd := frmmain.handle;<br>
    tnid.uID := 1;<br>
    tnid.uFlags := NIF_MESSAGE or NIF_ICON or NIF_TIP;<br>
    tnid.uCallbackMessage := WM_TASKBAREVENT;<br>
    ico:=ticon.Create;<br>
    frmmain.imglst.GetIcon(index,ico);<br>
    tnid.hIcon := ico.Handle;<br>
    case index of<br>
    0 : strcopy(tnid.szTip,'BugReport');<br>
    1 : strcopy(tnid.szTip,'Neue Mitteilung');<br>
    end;<br>
    if index>1 then<br>
    strcopy(tnid.szTip,'Neue Mitteilung');<br>
    Shell_NotifyIcon(NIM_MODIFY, @tnid);<br>
    end;<br>

    procedure Tfrmmain.Timer1Timer(Sender: TObject);<br>
    begin<br>
    if blink then begin<br>
    {if icostatus=0 then<br>
    icostatus:=1<br>
    else<br>
    icostatus:=0;}<br>
    if (icostatus+1)>95 then<br>
    icostatus:=0<br>
    else<br>
    icostatus:=icostatus+1;<br>
    TaskbarChangeIcon(IcoStatus);<br>
    end;<br>
    end;<br>

    procedure Tfrmmain.FormCreate(Sender: TObject);<br>
    begin<br>
    blink:=false;<br>
    taskbaraddicon;<br>
    blink:=true;<br>
    end;<br>

    Dieses Problem habe ich nun schon seit April, und jetzt da ich den Grund weiß würde mich eine saubere Lösung des Problems interessieren, (??Was ist falsch an meinem Code??)

    mit bestem Dank im Voraus
    Hansjörg

  • #2
    Hm, du erstellst bei jedem Timer-Aufruf in der Prozedur TaskbarChangeIcon ein eigenes Icon ohne es nachher freizugeben:<br>
    Zeile: <b>ico:=ticon.Create;</b><p>
    Vielleicht liegt das Problem ja daran.....?!?<p>
    Nimm lieber ein einmalig (z.b. im FormCreate) erstelltes Icon her oder verwende Application.Icon stattdessen.......<p>

    Gruß aus der grossen City, *g*,<br>
    Bernhar

    Comment


    • #3
      Hallo,

      verbirgt sich hinter <i>imglst</i> eine TImageList-Instanz? Wenn ja, verschwindet der Effekt, wenn der Aufruf von <b>GetIcon</b> auskommentiert wird (d.h. die TImageList-Instanz ist zwar noch vorhanden, wird jedoch niemals im Programm angefasst)? Wenn das Problem dann verschwindet, würde ich die TImageList-Eigenschaft <b>ShareImages</b> auf True setzen, damit sich das Programm und Win32 beim gemeinsamen Verwalten der Handles nicht mehr in die Quere kommen. Verschwindet dann das Problem

      Comment


      • #4
        Danke für die Antworten,

        Das Problem ist mit dem freigeben des Icons verschwunden, es wird wohl etwas mit dem Verwalten der Handles zu tun haben!!

        Nochmals Danke
        Hansjör

        Comment

        Working...
        X