Imagelist bei Buttons

  • Hey..

    ist ne ziemlich dumme Frage aber nach viel gegoogle und auch suchen hier im Forum und in der Hilfedatei komme ich trotzdem nicht weiter.

    Angenommen ich hab eine Imagelist mit 4 Bildern und 4 Buttons.
    Und jetzt möhcte ich gern das das 1. Bild beim 1. Buttons angezeigt wird.
    Soweit kein ding aber jez wirds komisch.
    Wie bekomm ich es hin, dass beim 2. Button das 2. Bild angezeigt wird ohne, dass die Liste abgeändert wird?

    Hab gedacht mit Index wie bei nem Array aber ne Imagelist ist ja wie der Name sagt ne List^^
    Und ne Funktion wie Pointer.next() wie bei Java Lists finde ich nicht...

    am besten nicht mit der shell.dll lösen sondern mit 4 ico's iwo auf dem rechner...dann kann ichs einfacher nachvollziehen ;)

    mfg zwockel:)

    Einmal editiert, zuletzt von zwockel (2. September 2013 um 15:06)

  • Wenn du uns dein bisheriges Script zeigen würdest, könnten wir besser helfen. So wird es ein raten oder warten bis jemand dir ein Testscript schreibt und darauf hofft du kannst es alleine umsetzen :)

    Also wenn möglich poste dein Script :)

    Grüße Yaerox

    Grüne Hölle

  • ja nur das Problem ist, dass ich an etwas arbeite für ne Firma.
    In meinem Arbeitvertrag steht, dass ich nicht mit 3. über den Inhalt reden darf :(
    An und für sich klappt das Script nur sie haben sich gewünscht, dass ich manche Buttons mit Bilder
    versehe...

    Hier mal ein Beispiel andem man es vllt erklären kann...

    [autoit]


    #include <GuiImageList.au3>
    #include <GuiButton.au3>

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

    GUICreate("Button and Imagelisttest",250,95)
    $imagelist=_GUIImageList_Create()
    _GUIImageList_AddIcon($imagelist,@scriptdir&"\Bilder\ButtonIcons\Beenden.ico")
    _GUIImageList_AddIcon($imagelist,@scriptdir&"\Bilder\ButtonIcons\bestellen.ico")
    _GUIImageList_AddIcon($imagelist,@scriptdir&"\Bilder\ButtonIcons\freigeben.ico")
    $button1=GUICtrlCreateButton("Button1",5,5,240,25)
    _GUICtrlButton_SetImageList(-1,$imagelist) ;1. Icon (Beenden)
    $button2=GUICtrlCreateButton("Button2",5,35,240,25) ;2. Icon (bestellen)
    $button3=GUICtrlCreateButton("Button3",5,65,240,25) ;3. Icon (freigeben)
    GUISetState(@sw_show)
    while 1
    if GUIGetMsg() = -3 Then
    Exit
    EndIf
    Wend

    [/autoit]


    also soll jeder weitere Button mit dem nächsten Icon versehen werden.
    Außerdem soll sich das nicht beim Hovern (übers Ctrl streifen) ändern...

    mfg

  • Ich mache es immer wie folgt, wenn ich mehrere Buttons nehme:

    Spoiler anzeigen
    [autoit]

    #include <GuiImageList.au3>
    #include <GuiButton.au3>

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

    Local $hImagelist, _
    $hImage_Btn1, _
    $cID_Btn1, _
    $hImage_Btn2, _
    $cID_Btn2, _
    $hImage_Btn3, _
    $cID_Btn3

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

    GUICreate("", 140, 50)
    $hImagelist =_GUIImageList_Create()

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

    $hImage_Btn1 = _GUIImageList_Create(32, 32, 5, 3, 1)
    _GUIImageList_AddIcon($hImage_Btn1, @SystemDir & "\shell32.dll", 211, True)
    $cID_Btn1 = GUICtrlCreateButton("", 5, 5, 40, 40)
    _GUICtrlButton_SetImageList($cID_Btn1, $hImage_Btn1, 0)

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

    $hImage_Btn2 = _GUIImageList_Create(32, 32, 5, 3, 1)
    _GUIImageList_AddIcon($hImage_Btn2, @SystemDir & "\shell32.dll", 210, True)
    $cID_Btn2 = GUICtrlCreateButton("", 50, 5, 40, 40)
    _GUICtrlButton_SetImageList($cID_Btn2, $hImage_Btn2, 0)

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

    $hImage_Btn3 = _GUIImageList_Create(32, 32, 5, 3, 1)
    _GUIImageList_AddIcon($hImage_Btn3, @SystemDir & "\shell32.dll", 209, True)
    $cID_Btn3 = GUICtrlCreateButton("", 95, 5, 40, 40)
    _GUICtrlButton_SetImageList($cID_Btn3, $hImage_Btn3, 0)

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

    GUISetState(@sw_show)
    while 1
    if GUIGetMsg() = -3 Then
    Exit
    EndIf
    Wend

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

    Grüße Yaerox

    Grüne Hölle

  • also für jeden Button ne eigene imagelist?
    Es funktioniert. Keine Frage aber ob das wirklich Programmtechnisch und Stylistisch "gut" ist bleibt fraglich...oder nicht?

    aber danke :) dann mach ichs vorerst so :)

  • Ich sag mal so, in der Hilfe einiger der GUIImageList Funktion wird es so gemacht, daher kann ich dir keine Antwort auf die Frage geben, nur vermuten würde ich es ist so in Ordnung. Es ist soweit ich weiß ein Unterschied ob du das mit Button-Icons machst, oder mit AddItems...

    Grüße Yaerox

    Grüne Hölle

  • Die Imagelist Funktion wird dafür verwendet eine Liste aus Icons für ein einzelnes Control zu verwenden.
    In deinem Beispiel setzt du alle drei Icons für den ersten Button.
    Das erste Icon wird im normalen Zustand angezeigt. Das zweite wärend du mit der Maus über dem Button bist (Hover) und das dritte wird angezeigt wenn du den Button gerade drückst. (vgl. Hilfe zu _GUICtrlButton_SetImageList)
    Wenn du einfach nur ein Icon setzten willst ist ImageList auch vollkommen "überdimensioniert".
    Ein einfaches GUICtrlSetImage() bzw. _GUICtrlButton_SetImage() würde da ausreichen.

  • ok :) danke :P so genau schauen die sowieso seltener in meinen code aber mich hats interessiert ob es auch anders geht :9 danke

  • Wenn du einfach nur ein Icon setzten willst ist ImageList auch vollkommen "überdimensioniert".
    Ein einfaches GUICtrlSetImage() bzw. _GUICtrlButton_SetImage() würde da ausreichen.

    Jaja, die gute alte Frage: Nehm ich den Hammer oder den Schraubendreher um einen Nagel in die Wand zu kriegen. Soll nur 1 Bild ständig bleiben ist die SetImage Variante wahrscheinlich ressourcensparender und optimierter. Da hat er recht :)

    Grüße Yaerox

    Grüne Hölle