Icon in Gui einbauen - Wie funktioniert das genau?

  • Hallo,

    heute sind einige Verständnisschwierigkeiten zum Einbinden eines Icons in die Gui aufgetaucht.
    Bei Multiicons (mehrere Größen in einer Datei) wird wodurch entschieden welche Größe genau verwendet wird?

    Spoiler anzeigen
    [autoit]


    #include <GUIConstantsEx.au3>
    #include <StaticConstants.au3>
    #include <WindowsConstants.au3>

    [/autoit] [autoit][/autoit] [autoit]

    #Region ### START Koda GUI section ### Form=
    $Form1 = GUICreate("Form1", 633, 447, 193, 125)
    $iconpath = @ScriptDir &"\dll\Icons"
    $Icon1 = GUICtrlCreateIcon($iconpath & "\stop.ico", 7, 128, 48, 128, 128, BitOR($SS_NOTIFY,$WS_GROUP))

    [/autoit] [autoit][/autoit] [autoit]

    GUISetState(@SW_SHOW)
    #EndRegion ### END Koda GUI section ###

    [/autoit] [autoit][/autoit] [autoit]

    While 1
    $nMsg = GUIGetMsg()
    Switch $nMsg
    Case $GUI_EVENT_CLOSE
    Exit

    [/autoit] [autoit][/autoit] [autoit]

    EndSwitch
    WEnd

    [/autoit]


    Im Anhang ein Beispiel Multiicon und ein einzelnes mit 16*16
    Laut Icon-Sushi heissen die Einzelicons: stop.icon-000 bis 006 (256*256 - 16*16)
    Die Hilfe besagt, dass über Paramter 2 von Guictrlcreateicon auswählbar sein müsste welches verwendet wird.
    Die Darstellung ist aber auch beim Versuch das 16*16 Icon zu laden sauber.
    Wird das Einzelicon verwendet ist die Darstellung verpixelt, was ich auch beim Multiicon & 16*16 Vorgabe erwartet hätte.

    Wofür ist das wichtig wenn doch die Ausgabe sowieso sauber ist?
    Tja ist sie das? Wird aufgrund der Parameter width und height das Icon ausgesucht?
    Passt man nämlich die Größe (width & height) des Icons der Desktopausfösung an müsste man ggf. reagieren.

    Gruß nuts

  • Hallo nuts,

    hier einmal ein Beispiel, wofür der 2. Parameter benutzt werden kann:

    Spoiler anzeigen
    [autoit]

    #include <GUIConstantsEx.au3>
    #include <StaticConstants.au3>
    #include <WindowsConstants.au3>

    [/autoit] [autoit][/autoit] [autoit]

    #Region ### START Koda GUI section ### Form=
    $Form1 = GUICreate("Form1", 633, 600, 0, 0)
    $iconpath = @ScriptDir &"\dll\Icons"
    $Icon1 = GUICtrlCreateIcon($iconpath & "\Stop.icl", -1, 128, 48, 128, 128, BitOR($SS_NOTIFY,$WS_GROUP))
    $Icon2 = GUICtrlCreateIcon($iconpath & "\Stop.icl", -2, 128, 248, 128, 128, BitOR($SS_NOTIFY,$WS_GROUP))
    $Icon3 = GUICtrlCreateIcon($iconpath & "\Stop.icl", -3, 128, 448, 128, 128, BitOR($SS_NOTIFY,$WS_GROUP))

    [/autoit] [autoit][/autoit] [autoit]

    GUISetState(@SW_SHOW)
    #EndRegion ### END Koda GUI section ###

    [/autoit] [autoit][/autoit] [autoit]

    While 1
    $nMsg = GUIGetMsg()
    Switch $nMsg
    Case $GUI_EVENT_CLOSE
    Exit

    [/autoit] [autoit][/autoit] [autoit]

    EndSwitch
    WEnd

    [/autoit]

    bei Multiicons, wird meines Erachtens nach immer das 1. genommen und in AutoIt skaliert (hoffe Oscar oder ein anderer Mod korrigiert mich, falls ich unrecht habe). Bei Iconlibraries kann man den 2 Parameter verwenden,

    mf (Auto)Bert

  • Hallo nuts,

    muss mich nach einem weiteren Test korrigieren, bei MultiIcons wird nicht automatisch das 1. genommen sondern ist von der Grösse des aufnehmenden Controls abhängig:

    Spoiler anzeigen
    [autoit]

    #include <GUIConstantsEx.au3>
    #include <StaticConstants.au3>
    #include <WindowsConstants.au3>

    [/autoit] [autoit][/autoit] [autoit]

    #Region ### START Koda GUI section ### Form=
    $Form1 = GUICreate("Form1", 633, 600, 0, 0)
    $iconpath = @ScriptDir &"\dll\Icons"
    $Icon1 = GUICtrlCreateIcon($iconpath & "\Stop2.ico", -1, 128, 48, 256, 256, BitOR($SS_NOTIFY,$WS_GROUP)); 256 soll gezeigt werden
    $Icon2 = GUICtrlCreateIcon($iconpath & "\Stop2.ico", -2, 128, 248, 128, 128, BitOR($SS_NOTIFY,$WS_GROUP)); 128 soll gezeigt werden
    $Icon3 = GUICtrlCreateIcon($iconpath & "\Stop2.ico", -4, 128, 448, 64, 64, BitOR($SS_NOTIFY,$WS_GROUP)); 32 soll gezeigt werden

    [/autoit] [autoit][/autoit] [autoit]

    GUISetState(@SW_SHOW)
    #EndRegion ### END Koda GUI section ###

    [/autoit] [autoit][/autoit] [autoit]

    While 1
    $nMsg = GUIGetMsg()
    Switch $nMsg
    Case $GUI_EVENT_CLOSE
    Exit

    [/autoit] [autoit][/autoit] [autoit]

    EndSwitch
    WEnd

    [/autoit]

    mfg (Auto) Bert

  • Hm bestätigt auch meinen Eindruck.
    Ist aber ja klasse, denn dann muss man bei flexibler Icongröße (innerhalb der vorhandenen "Untericons) einfach gar nichts machen und die Darstellung ist immer sauber.