#NoTrayIcon innerhalb einer Funktion wird *immer* ausgeführt

  • Ich habe eine Funktion geschrieben, in der die Zeile #NoTrayIcon vorkommt. Seltsamerweise wird diese Zeile auch dann ausgeführt, wenn die Funktion gar nicht aufgerufen wird. - kann ich das irgendwie verhindern? Ich vermute, es liegt an der Art des Befehls, die an dem Rauten-Zeichen ablesbar ist. Leider kann man nach einem Rauten-Zeichen praktisch nirgends vernünftig suchen, deshalb konnte ich nicht herausfinden, inwiefern sich solche Befehle anders verhalten als "normale" Befehle. Weiß jemand Rat?

    Danke schon mal.

    P.S.: Für das Prinzip ist es wahrscheinlich belanglos, aber ich habe trotzdem 'mal ein Script mit der Funktion angehängt. Der Sinn besteht darin, daß es eine UDF sein soll, mit der ich jedem Script auf die Schnelle ein Icon verpassen kann: "shell32" und die Nummer soll genügen für ein Symbol aus dieser Datei, und ohne Parameter soll mein Standard-Symbol erscheinen (das natürlich anderswo definiert sein muß). Das klappt auch alles, nur wenn die Funktion nicht aufgerufen wird, dann erscheint eben gar kein Symbol. Zwar könnte ich #NoTrayIcon ersetzen durch Opt ("TrayIconHide", 1), aber das hätte den Nachteil, daß für eine gewisse Zeit eben doch das Standard-AutoIt-Symbol erscheint...

    • Offizieller Beitrag

    Seltsamerweise wird diese Zeile auch dann ausgeführt, wenn die Funktion gar nicht aufgerufen wird


    Das hat auch in einer Funktion nichts verloren, es handelt sich hier um eine Kompilerdirektive (unter dem Begriff kannst du ach nach weiteren Erläuterungen suchen ;)) und diese wird immer vor dem Kompilieren des Skriptes ausgeführt, unerheblich von der Position.
    Die Compiler Directives sind Bestandteil des AutoIt Wrappers, der in SciTE4AutoIt integriert ist. Somit mußt du in der SciTE-Hilfe (Strg+F1) danach suchen.

  • wenn du nachträglich (zur Programmlaufzeit) noch etwas ändern willst hilft folgendes:

    [autoit]

    TraySetState(@SW_HIDE)
    TraySetState(@SW_SHOW)

    [/autoit]


    lg
    M

  • Danke @Marsi, aber TraySetState() wirkt leider auch nicht anders als Opt ("TrayIconHide", 1): das Symbol blitzt kurz auf, bevor es verschwindet. Ich möchte aber, daß es von Anfang an verborgen bleibt. Gibt es dafür keine Alternative?

    Danke BugFix , aber die Suche nach "Kompilerdirektive" (in der AutoIt-Hilfe, hier im Forum und bei Google) brachte leider null Ergebnisse. Gibt es keinen Trick, um das, was diese Kompilerdirektive machen soll, in einer Funktion unterzubringen?

    Auf jeden Fall herzlichen Dank an alle, die helfen wollen!

  • Setze das Icon am Skriptanfang per #NoTrayIcon unsichtbar und verwende anschließend TraySetState

  • @progandy: oh, Mann *vor die Stirn klatsch* - danke! Das ist die Lösung:

    ; Anfang der UDF-Datei:
    Opt ("TrayIconHide",0) ; weil die Zeile #NoTrayIcon in irgendeiner Funktion sonst dazu führt, daß kein Icon erscheint
    ; Einzelne Funktion:
    Func _MyTrayIcon
    #NoTrayIcon
    $IconFile = ...
    TraySetIcon ($IconFile, $IconNr)
    EndFunc

    Der Thread kann von mir aus geschlossen werden. Danke an alle, die geholfen haben!