Icon (Symbol) ändern und die Größe beibehalten

  • Hallo!

    Vielleicht mache ich was falsch, aber die Größe eines Icons ändert sich wenn ich das Symbol ändere und eine Größenangabe ich nicht möglich!

    Zuerst setzte ich das Icon mit

    local $edge_icon1= GUICtrlCreateIcon("imageres.dll", $rot, 190, 220, 20, 20)

    später im Script soll es sich je nach Auswertung des Returncodes ändern. Da passiert so:

    GUICtrlSetImage ($edge_icon1, "imageres.dll", $gruen, 0)

    und damit wird es etwas größer...

    So soll es sein:

    und so ist es nachdem mit GUICtrlSetimage verändert worden ist.

    Bitte nicht von dem Stören lassen das es hier an einer andere Stelle angezeigt wird. Es geht nur um die Icon-Größe.

    Verwende ich hier nicht den richtigen Befehl oder gibt es da noch einen Kniff der nicht in der Doku steht?


    Beispielscript:

  • Hi Racer ,

    mit GUICtrlCreateIcon() vergibst du eine spezifische Größe. Beim button event jedoch (mit GUICtrlSetImage()), setzt du "nur" ein anderes Icon ein (mehr geht in der Funktion auch nicht, ist klar). Dabei fällt die Größenzuteilung weg. Nimm mal in Zeile 13 die "Width" und "Height" Angaben weg und schaue es dir dann an.

    Viele Grüße
    Sven

  • Ich habe gerade mal ein wenig herum experimentiert und denke es könnte ein BUG sein! Denn mit GUICtrlSetPos($Icon1, 40, 40, 19, 19) als Zeile 30, wird das Icon auf 19x19 gesetzt, doch beim erneutem Button-Klick, wieder auf die icontype Eigenschaft "normal" von GUICtrlSetImage (also auf eine andere Größe). Also das der Style immer überwiegt ist seltsam.

    Zudem konnte ich mit 20x20 GUICtrlSetPos($Icon1, 40, 40, 20, 20) gar keinen Effekt feststellen 🤔 😒 .

    Viele Grüße
    Sven

  • Ich würde lieber ein Pic-Control nehmen und eine kleine (selbstgeschriebene) Funktion:

  • Ganz hervorragend Oscar 👍 .
    Die Funktion kommt gleich in meine Snippets (wenn du erlaubst 😇). Bin mir zwar nicht sicher wann ich sie mal nutzen werde, doch "besser man hat als man hätte" 🤭 .

    Kleine Verbesserung/Anmerkung:

    AutoIt
    #include <SendMessage.au3>
    #include <WinAPIHObj.au3>
    #include <WinAPIInternals.au3>

    Diese drei includes sind nicht nötig, für dein angepasstest Skript. Es reicht also wenn "nur" diese eingebunden sind:

    AutoIt
    #include <GUIConstantsEx.au3>
    #include <StaticConstants.au3>
    #include <WinAPIGdi.au3>
    #include <WinAPIShellEx.au3>
    #include <WinAPISysInternals.au3>

    Dies sollte die bzw. eine Lösung für dein Anliegen sein Racer.

    Viele Grüße
    Sven

  • Vielen lieben Dank!

    Die kleine aber wichtige Funktion kommt gleich in meine Sammlung ;)

    Testen kann ich es morgen, aber ich bin sicher das es so zu dem gewünschten Ergibnis führen wird!

    Danke

    Racer

  • Rückmeldung:

    Nachdem ich gesehen habe das jetzt ein GUICtrlCreatePic funktioniert alles bestens!

    Vielen Dank für die schnelle Lösung.

    lg

    Racer

  • Ja, ich wollte eigentlich noch etwas zu dem "warum: GUICtlrCreatePic" schreiben, hatte aber nicht mehr soviel Zeit.

    Deswegen hier die Erklärung:

    Bei GUICtrlCreateIcon gibt es einen Bug: wenn man keine Icondatei beim Erstellen angibt, wird ein Platzhalter mit den Maßen 0,0 (width, height) erzeugt, und _WinAPI_GetClientRect liefert nicht die korrekten Daten.

    Bei GUICtlrCreatePic tritt das nicht auf, weshalb ich bevorzugt dieses Controlelement benutze.

    Beispiel:

  • Das passt eh alles so wie es ist für mich. Ich will halt nur kleine Bilder anzeigen um zu signalisieren das die Durchführung gut oder nicht gut gegangen ist....

    Liegt daran das unsere Help(less)Deskmitarbeiter nicht lesen können,....jetzt versuche ich es mal mit Bilder!

    Für mich ist das so ausreichend wie Du es gemacht hast - ich habe es nur nicht gleich gesehen das ich hier PIC statt Icon verwenden muss......

    lg

    Racer

  • Bei GUICtrlCreateIcon gibt es einen Bug: wenn man keine Icondatei beim Erstellen angibt, wird ein Platzhalter mit den Maßen 0,0 (width, height) erzeugt, und _WinAPI_GetClientRect liefert nicht die korrekten Daten.

    Danke das du meine Annahme (das es ein BUG ist) bestätigst, Oscar 👍 . Danke auch für die Erläuterung warum.

    Viele Grüße
    Sven