Button / Icons aus DB bzw. Array erstellen

  • Hallo Zusammen,

    ich bin aktuell am umstellen unseres IT-Helpdesk Tools. Ziel der Umstellung ist es die Icons dynamisch aus einem Array bzw. Datenstring zu erstellen. Die Daten dafür kommen aus einer Access DB.

    Aktuell wird für jedes Icon mit der Zeile "GUICTRLCreateIcon" einzeln erstellt.

    AutoIt
    $ico01 = GUICtrlCreateIcon(@ScriptDir & "\bin\icons\Prog1.ico",25, $ico_left, 70, 40, 40)
    $label01 = GUICtrlCreateLabel("Prog1",$label_left, 115,$label_length,25)
    GUICtrlSetTip($ico01, "Prog1")
    GUICtrlSetTip($label01, "Prog1")

    Maximal sollen es 12 oder 13 Icons werden.

    Hier mal ein Bild der GUI

    Ich bin der Meinung es gab da mal ein Beispiel für eine dynamische Erstellung, ich finde aber grad nichts dazu.

    Hat das jemand schonmal umgesetzt?


    Gruß gmmg

  • Im engl. Forum habe ich ein Beispiel für die Button Erstellung gefunden.

    Mal sehen, ob ich damit weiter komme.

    Einmal editiert, zuletzt von gmmg (5. September 2023 um 09:35)

  • Habe schon eine erste Version gebaut, funktioniert aber noch nicht so wie gewünscht.

    Hat noch einer eine Idee dazu?

    Gruß gmmg

  • Hi gmmg ,

    ist der zweite Parameter iconName, der Funktion GUICtrlCreateIcon() gewollt die Zahl 25 (in Zeile 44) oder nicht?

    Ansonsten ist es auch noch hilfreich, wenn du uns die beiden UDFs noch zu Verfügung stellst, damit man auch wirklich testen kann 😉 .

    AutoIt
    #include <D:\Scripte\MS_AccessCom\Access UDF\Access_UDF.au3>
    #include <D:\Scripte\ArrayMultiColSort\ArrayMultiColSort.au3>

    Viele Grüße
    Sven

  • Hallo Sven,

    bei dem Create Icon kommt die Nummer daher, dass ich die Icons in einer DLL gespeichert hatte.

    Die udf 'S gibt es hier im engl. Forum

    ArrayMultiColSort -New Release 06 April 2019
    [New Release] - 06 April 2019 Added: Error-checking for sensible column numbers in the $aSortData array, with an additional error status.…
    www.autoitscript.com
    Yet another Access UDF( but different - *.accdb only)
    Hi all,This is an UDF for working with Access(2007 above) databases. I would like to say thanks to @spudw2k for his wonderful ADODB udf. That is my…
    www.autoitscript.com

    Gruß gmmg

  • Habe schon eine erste Version gebaut, funktioniert aber noch nicht so wie gewünscht.

    Moin, wie wäre es denn gewünscht?

    Geht es nur darum eine variable Zahl von Icons (mit einer bekannten Maximalzahl) und zugehörigen Texten in zwei Reihen neben/untereinander anzuzeigen (wobei die Icon-IDs und der gemeinsame Text für 'Unterschrift' und Tooltip aus einer Access-DB geladen werden)?

    Und, wie sollen sie eingelesenen Werte sortiert werden (bzw. was steht in den Spalten 0 -3)?

  • Hallo Velted,

    genau, ich möchte die X Anzahl an Icons Nebeneinander anzeigen + die Labels entsprechend unter dem jeweiligen Icon.

    Label Texte, der Icon Name und der ToolTip kommen aus der DB, wobei der Tooltip im ersten Step gleich dem Label Text sein kann.

    Was in meinem Beispiel nicht funktioniert, beim Scriptstart wird gleich die MsgBox(0, "Label clicked") angezeigt, obwohl ich selbst ja noch auf kein Label oder Icon geklickt habe.

    In der Access DB habe ich für die Sortierung einfach eine Spalte mit Zahlenwerten 01-13 die ja dann mit dem ArraySort Absteigend sortiert werden.

    Code
    _ArrayMultiColSort($GetData, $aSortData)

    so sieht die Access DB aus

    System ist dann = Label Text und Tooltipp

    Gruß gmmg

    5 Mal editiert, zuletzt von gmmg (20. März 2023 um 09:42)

  • Ich habe in die Access DB jetzt noch ein Spalte für die Label ID bzw. Icon ID aufgenommen und schreibe dann die Werte beim erstellen in diese Spalte.

    $aLabels[$i][4]

    $aIcons[$i][4]

    Das anklicken der Icon und Label funktioniert jetzt auch. Hier war der Fehler, dass in der DB nicht alle Felder mit Icon Werten gefüllt waren, somit 0 Werte drin standen.

    Spoiler anzeigen

    Hier mal mit Fixer Ausrichtung der Labels

    Gruß gmmg

    2 Mal editiert, zuletzt von gmmg (20. März 2023 um 11:02)

  • Moin,

    danke für die Erläuterungen. Das bringt mich auf ein paar Ideen:

    • Kann man sich die Werte aus der Access-DB nicht schon sortiert nach der Spalte "Sortierung" ausgeben lassen? SQL kennt ja die Option SELECT ... ORDER BY ...;.
      Wenn nicht, brauchst Du jedenfalls nicht die Funktion _ArrayMultiColSort(), weil Du ja nur nach einer Spalte sortierst. Das 'normale' _ArraySort() mit $iSubItem = 3 sollte reichen.
    • Für die Labels verwendest Du eine Folge von Ifs, deren Anweisung sich nur in der X-Position unterscheiden. Es sollte möglich sein, die erforderliche Maximalbreite zu ermitteln und die Texte mit dem Stil $SS_CENTER = 0x01 zu zentrieren. Dann kannst Du auch für die Labels eine konstante Ausgangsposition verwenden und sie wie die Icons handhaben.
  • Moin @Velved,

    Stimmt, mit der SQL OrderBY Option klappt es auch. Das ändere ich gleich mal ab.

    Local $Array_Systeme = _Get_Records("SELECT * FROM " & $tblname001 & " Order By Sortierung ASC " & ";")

    Und für die Labels hatte ich das bereits mit dem $SS_Center=0x01 so umgesetzt, das passt jetzt auch.

    Gruß gmmg :)

    2 Mal editiert, zuletzt von gmmg (21. März 2023 um 10:28)

  • Gut. Ich habe das "Hier mal mit Fixer Ausrichtung der Labels" als "Hier mal mit gefixter Ausrichtung der Labels" gelesen und mich auf das falsche Skript konzentriert.

    Ist jetzt alles so, wie Du es wolltest?

  • Ja, das passt.

    Habe aber noch eine ToDo. Ist es möglich die Schriftgröße zu ändern, wenn ich die Maus über das Icon oder Label bewege?

    Wie ein Hover effekt.

  • Habe aber noch eine ToDo. Ist es möglich die Schriftgröße zu ändern, wenn ich die Maus über das Icon oder Label bewege?

    Der einfachste Weg:

    Erstelle zwei Label übereinander, mit jeweils unterschiedlicher Schriftgröße. Das zm Hovern setzt du auf HIDE.

    GUIGetCursorInfo liefert die ID des Ctrl über dem die Maus ist, damit kannst du zwischen den Ctrl SHOW/HIDE switchen.

  • Hallo BugFix,

    mit den dynamisch erzeugten Label und Icons, habe ich es noch nicht geschafft, die Infos mit GUIGetCursorInfo(4) auszulesen.

    Als Grundlage dient ja der Quelltext aus Post2. Ich habe hier bestimmt einen Denkfehler.

    Gruß gmmg

  • Den ToolTip kann ich mit folgendem Beispiel manipulieren.

  • für das 2 label klappt die Änderung jetzt auch. Lässt sich aber sicherlich noch optimieren oder in eine Funktion packen.

    Gruß gmmg

  • Ich hatte gerade mal erstellt: Maus über Button - Label darunter wird Text vergrößert: