Icons aus der resource-table ins dictionary laden - geht das?

  • Ich würde gerne Icons, die sich im resource-table des kompilierten Scripts besfinden, in ein dictionary laden, um sie anschliessend mit Namen ansprechen zu können. Geht sowas überhaupt?

    Der nachfolgende Versuch haut jedenfalls schon mal nicht hin^^

    Vielen Dank

    Einmal editiert, zuletzt von Slevin (29. Mai 2018 um 09:08)

  • Hallo Slevin

    Wenn die Position stimmt, dann kannst du es einfach so machen (Nur die ID speichern).

    Grüße autoiter

  • @autoiter, ja, das ist ein Ansatz der zumindest funktioniert.

    Allerdings hoffte ich auf eine Möglichkeit, die es sowohl erlaubt, das Skript unkompiliert als auch kompiliert laufen zu lassen.

    Über das Skript verteilt wird das TrayIcon unzählige male geändert. Es ist im Grunde das wichtigste Kommunikationsmittel. Deine Variante würde jetzt leider nur compiled funktionieren.

    Ich will mal zeigen, wie das in etwa aussieht:

    Natürlich funktioniert der Abschnitt @Compiled so nicht. Ich wüsste sonst noch eine Variante, bei der eine eigene Funktion das Setzen der Icons übernimmt. Dann wäre zumindest an allen Stellen im Skript, wo das Icon getauscht wird, ein einheitlich verständlicher Code vorhanden.

    Ich hoffte halt auf eine etwas elegantere Lösung :S

  • Naja, wenn die Icons auch im unkompilierten Zustand verfügbarsein sollen, ist das natürlich nicht möglich resource-tables zu verwenden, da die Icons ja erst beim kompilieren eingebunden werden.

    Du könntest die Icons 1. in einem Ordner (lokal) ablegen, 2. in eine DLL speichern oder binär einbinden

  • Hehe, irgendwie hat sich das Thema total geändert, oder? :D

    Du musst die Icons doch gar nicht über Wrapper-Anweisungen einbinden. Dann hast du diese Probleme auch nicht...

    Du könntest das Icon Verzeichnis erstellen und die Icons etwa mit FileInstall einbinden und so dafür sorgen, dass die Icon immer vorhanden sind. Oder soll man die Icons eigentlich nicht sehen? Ich habe den Hintergrund einfach noch nicht verstanden.

    Grüße autoiter

  • Da hast du Recht, aber das wird so leicht nicht möglich sein, da dass TrayIcon ja keine ID hat, über dass es angesprochen werden kann. Ich denke nicht, dass man das Icon iwie mit GDI+ manipulieren kann.

  • Die Icons liegen in einem Unterordner und werden beim Compilieren ins Script miteingebunden. FileInstall will ich nicht vornehmen, das mache ich maximal nur für die Settings.ini.

    Das Script soll zuhasue unkompiliert laufen, da hab ich für mich auch kein Problem damit, dass die Icons in einem separaten Ordner liegen. Gleichzeitig aber soll das Skript als selbständiges Tool kompiliert ohne Installationsroutine (auch ohne FileInstall) weitergegeben werden können.

    Ich mag's selbst auch überhaupt nicht, wenn kleine Helferprogramme unzählige Dateien und Ordner brauchen - va, wenn das nicht zwingend sein muss. Klein und fein, so sollt es sein :)

    Und da dachte ich halt, vielleicht gibt es eine Möglichkeit, die Dictionary-Variable je nach Bedarf zu befüllen, entweder mit einer Adressierung zum physisch vorhandenen Icon im Unterordner oder aber zu einem Icon in der Resourcen-Tabelle. Und in weiterer Folge dann mit Hilfe dieser Dictionary-Variablen TraySetIcon anzuweisen seine Arbeit zu verrichten.

  • Dann legst du bis zur Auslieferung die Icons in nen extra Ordner und danach kannst du es ja immer noch umändern. Aber mein Tipp: Verwende eine DLL. Da kannst du alle Icons reinspeichern und ganz leicht mit TraySetIcon aufrufen. Dann hast du nur eine Datei für alle Icons.

  • Aber mein Tipp: Verwende eine DLL. Da kannst du alle Icons reinspeichern und ganz leicht mit TraySetIcon aufrufen. Dann hast du nur eine Datei für alle Icons.

    Und wenn du nicht weiß wie es geht, einfach Ressource Hacker nutzen und die Icons manuell hinzufügen. Du kannst die Datei dann als .dll speichern, brauchst also keine teuren Programme o. ä..

  • Dann legst du bis zur Auslieferung die Icons in nen extra Ordner und danach kannst du es ja immer noch umändern. Aber mein Tipp: Verwende eine DLL. Da kannst du alle Icons reinspeichern und ganz leicht mit TraySetIcon aufrufen. Dann hast du nur eine Datei für alle Icons.

    Ob die Icons in einer separaten DLL oder in der kompilierten EXE selbst liegen ist doch egal, oder übersehe ich da was?

    Es geht mir um das Verständnis, ob es möglich ist, eine Variable zu deklarieren, mit der ich ein Icon aus einer Datei für TrySetIcon ansteuern kann. Ich weiß nicht, wie ich es besser ausdrücken soll. Das Icon befindet sich in der EXE, und die Variable soll die EXE und die Position an TraySetIcon übergeben.

    autoiter Der "File to Base64 String Code Generator v1.20 Build 2015-01-20" klingt nicht nur für diesen Zweck sehr interessant. Hast du das Skript ausprobiert? Bei mir gibt es Deklarationsfehler von Const-Variablen, mal schaun, woran das liegen könnte - vielleicht, weil manche includes von von 2015 andere Variablen haben.

  • Ich habe das Beispiel mal etwas abgewandelt (einfach das Setzen des Icons in eine Funktion gepackt).

    Slevin dir ging es doch darum, dass die die Icons am liebsten mit sprechendem Namen aufrufen kannst. Dazu bräuchtest du bei der Methode, wo du die Icons in das Skript inkludierst nur die Funktion richtig benennen. Da brauchst du auch kein Dictionary. Schau dir die Aufrufe bei den Button-Auswertungen an. Da werden einfach die Funktionsnamen weiter gegeben..

  • autoiter Der "File to Base64 String Code Generator v1.20 Build 2015-01-20" klingt nicht nur für diesen Zweck sehr interessant. Hast du das Skript ausprobiert? Bei mir gibt es Deklarationsfehler von Const-Variablen, mal schaun, woran das liegen könnte - vielleicht, weil manche includes von von 2015 andere Variablen haben.

    Das liegt einfach an unterschiedlichen AutoIt-Versionen. Die Konstanten sind mittlerweile bereits inkludiert und müssen nicht mehr im Skript deklariert werden.

    Grüße autoiter

  • Ok, dann hab ich jetzt ja die freie Auswahl :)

    Mal schaun, wie ich mich letztendlich entscheiden werde - man muss halt erst mal über die Möglichkeiten Bescheid wissen.

    Danke euch allen

  • Hallo slevin,

    in numpad.au3 tausche ich ein Trayicon zur Laufzeit aus, ist zwar nicht genau die Methode die @auoiter vorschlägt (_CreateTmpFile und auch die Binärdatenerzeugung sind afair von BugFix ) sollte aber leicht auf das GDI+ Verfahren (von UEZ ?) umzustellen sein.

    Nachtrag: der Link in "über Numpad" existiert nicht mehr.

    mfg (auto)Bert

    Einmal editiert, zuletzt von autoBert (29. Mai 2018 um 19:35)

  • So, dann abschließend nochmal vielen Dank für eure Hilfe.

    Ich habe mich nun für die Base64-embedded-String Variante entschieden, da man hier ohne Plattenzugriff auskommt und keine speziellen Lösungen für compiled vs non-compiled benötigt.

    So langsam wird's ja was... :)