Icon für einen Button in den Quelltext implementieren

  • Hallo Community,

    eine Frage zu folgendem Thread: https://autoit.de/index.php?page=Thread&threadID=7140

    Dazu mein Quelltext:

    [autoit]

    #AutoIt3Wrapper_Res_Icon_Add=H:\AutoIt\Projekte\DataZeit\Ja.ico
    #AutoIt3Wrapper_Res_Icon_Add=H:\AutoIt\Projekte\DataZeit\Beenden.ico
    #AutoIt3Wrapper_Res_Icon_Add=H:\AutoIt\Projekte\DataZeit\Oeffnen.ico
    ;################Datumsänderer#################

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

    ~ Unötiger Quelltext ~

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

    GUICtrlCreateButton("",50,10,30,30, $BS_ICON)
    GUICtrlSetOnEvent(-1,"_Pfad")
    GUICtrlSetImage(-1,@ScriptFullPath,-7)

    [/autoit]

    Kann ich das in dem oben gezeigtem Thread (speziell aus progandys 1. Post) so in meinem Skript verwenden? Den es funktioniert so nicht.^^
    Vielleicht hab ich auch was falsch gemacht...? Ich wäre für hilfe sehr dankbar.´

    Oder gibt es eine besser Lösung zum Verwenden eines Icons für einen Button, welches aus dem Quelltext entnommen wird?
    Den ein FileInstall bei jedem Programmstart in einem anderen Ordner ist auf dauer recht datenmüllerzeugend. Und eine andere Möglichkeit eine ICON als Buttongrafik zu verwenden, außer eben aus einem bestimmten Ordner zu beziehen, kenn ich nicht.

    Ich hoffe Ihr könnt mir ,wie sonst auch immer, helfen.

    Gruß
    Prixma

  • Hallo Prixma,
    die Lösung mit

    [autoit]

    FileInstall()

    [/autoit]

    halte ich nicht für sehr "datenmüllerzeugend", weil man die Datei ja nicht immer wieder neu installieren muss, wenn sie einmal (beim ersten Programmstart), erzeugt wurde. Der Pfad ist somit immer relativ zum Script und einfach mit

    [autoit]

    @ScriptDir

    [/autoit]

    aufzurufen. Eventuell noch 'nen eigenen Ordner für die Icons anlegen lassen und das Problem sollte gelöst sein.

  • Sich ist der Weg mit FileInstall und @ScriptDir mit Ordner der einfachste. Aber ich habe auch Programme mit viel mehr Icons als nur 3 Stk. Dafür suche ich z.B. auch eine Lösung.
    Und ich finde diese Lösung zwar akzeptabel, aber nicht wirklich schön.

  • Ein Beispiel:

    Spoiler anzeigen
    [autoit]


    #Region ;**** Directives created by AutoIt3Wrapper_GUI ****
    #AutoIt3Wrapper_outfile=iconPLUS1.exe
    #AutoIt3Wrapper_UseUpx=n
    #AutoIt3Wrapper_Res_Icon_Add=C:\Test\10.ico
    #AutoIt3Wrapper_Res_Icon_Add=C:\Test\11.ico
    #AutoIt3Wrapper_Res_Icon_Add=C:\Test\12.ico
    #EndRegion ;**** Directives created by AutoIt3Wrapper_GUI ****

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

    #include <ButtonConstants.au3>
    #include <GUIConstantsEx.au3>

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

    #Region - GUI Create
    GUICreate(' iconPLUS', 400, 400)
    $Checkbox = GUICtrlCreateCheckbox("cb", 30, 90, 150, 40, BitOR($BS_ICON, $BS_PUSHLIKE))
    GUICtrlSetImage(-1, @ScriptFullPath, -7)
    $bnOK = GUICtrlCreateButton("OK", 20, 350, 75, 40, $BS_ICON)
    GUICtrlSetImage(-1, @ScriptFullPath, -5)
    $bnClose = GUICtrlCreateButton("b", 305, 350, 75, 40, $BS_ICON)
    GUICtrlSetImage(-1, @ScriptFullPath, -6)
    GUISetState()
    #EndRegion - GUI Create

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

    #Region - GUI SelectLoop
    While 1
    $msg = GUIGetMsg()
    Select
    Case $msg = $GUI_EVENT_CLOSE Or $msg = $bnClose
    MsgBox(64, " iconPLUS - Example", "Viel Spaß wünscht RR04 !" & @TAB, 3)
    Exit
    Case $msg = $bnOK
    MsgBox(64, " iconPLUS - Example", "OK wurde gedrückt !" & @TAB)
    Case $msg = $Checkbox
    MsgBox(64, " iconPLUS - Example", "CheckBox wurde gedrückt !" & @TAB)
    EndSelect
    WEnd
    #EndRegion - GUI SelectLoop
    ; Ende

    [/autoit]
  • Ich weiß beim besten Willen nicht was ich falsch mache -.-

    Ich hab jetzt RR04s Skript in mein SciTE eingefügt und nur die Pfade mit den TestX.ico durch meine Pfade ersetz. Dann hab ich es gespeichert mit Aut2Exe.exe gepackt und ausgeführt. Keine Icon auf den Buttons / Checkbox zu sehen. Nur die jeweiligen Buchstaben.

    Hab ich was falsch gemacht? Muss ich anders damit arbeiten? Oder liegt das an was ganz anderem?

    Gruß
    Prixma

  • Gruß Prixma,

    ich habe es eben nocheinmal mit neuen beliebigen Icons bei mir probiert und es hat funktioniert (siehe Anhang) ! ;)

    Spoiler anzeigen
    [autoit]


    #region ;**** Directives created by AutoIt3Wrapper_GUI ****
    #AutoIt3Wrapper_outfile=iconPLUS1.exe
    #AutoIt3Wrapper_UseUpx=n
    #AutoIt3Wrapper_Res_Icon_Add=C:\Test\1.ico
    #AutoIt3Wrapper_Res_Icon_Add=C:\Test\2.ico
    #AutoIt3Wrapper_Res_Icon_Add=C:\Test\3.ico
    #AutoIt3Wrapper_Run_Tidy=y
    #AutoIt3Wrapper_Run_Obfuscator=y
    #Obfuscator_Parameters=/striponly
    #endregion ;**** Directives created by AutoIt3Wrapper_GUI ****

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

    #include <ButtonConstants.au3>
    #include <GUIConstantsEx.au3>

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

    #region - GUI Create
    GUICreate(' iconPLUS', 400, 400)
    $Checkbox = GUICtrlCreateCheckbox("cb", 30, 90, 150, 40, BitOR($BS_ICON, $BS_PUSHLIKE))
    GUICtrlSetImage(-1, @ScriptFullPath, -7)
    $bnOK = GUICtrlCreateButton("OK", 20, 350, 75, 40, $BS_ICON)
    GUICtrlSetImage(-1, @ScriptFullPath, -5)
    $bnClose = GUICtrlCreateButton("b", 305, 350, 75, 40, $BS_ICON)
    GUICtrlSetImage(-1, @ScriptFullPath, -6)
    GUISetState()
    #endregion - GUI Create

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

    #region - GUI SelectLoop
    While 1
    $msg = GUIGetMsg()
    Select
    Case $msg = $GUI_EVENT_CLOSE Or $msg = $bnClose
    MsgBox(64, " iconPLUS - Example", "Viel Spaß wünscht RR04 !" & @TAB, 3)
    Exit
    Case $msg = $bnOK
    MsgBox(64, " iconPLUS - Example", "OK wurde gedrückt !" & @TAB)
    Case $msg = $Checkbox
    MsgBox(64, " iconPLUS - Example", "CheckBox wurde gedrückt !" & @TAB)
    EndSelect
    WEnd
    #endregion - GUI SelectLoop
    ; Ende

    [/autoit] [autoit][/autoit] [autoit][/autoit]
  • Das ist die Ausgabe nach dem Compilieren in der Konsole

    Spoiler anzeigen

    >"H:\AutoIt\SciTE\..\aut2exe\aut2exe.exe" /in "H:\AutoIt\Projekte\DataZeit\Zeitschummler 1.1.au3"
    Ultimate Packer for eXecutables
    Copyright (C) 1996 - 2008
    UPX 3.03w Markus Oberhumer, Laszlo Molnar & John Reiser Apr 27th 2008

    File size Ratio Format Name
    -------------------- ------ ----------- -----------
    646144 -> 300544 46.51% win32/pe Zeitschummler 1.1.exe

    Packed 1 file.
    >Exit code: 0 Time: 6.558

  • [autoit]


    #region ;**** Directives created by AutoIt3Wrapper_GUI ****
    #AutoIt3Wrapper_outfile=iconPLUS1.exe
    #AutoIt3Wrapper_UseUpx=n ;############ übersehen ???
    #AutoIt3Wrapper_Res_Icon_Add=C:\Test\1.ico
    #AutoIt3Wrapper_Res_Icon_Add=C:\Test\2.ico
    #AutoIt3Wrapper_Res_Icon_Add=C:\Test\3.ico
    #AutoIt3Wrapper_Run_Tidy=y
    #AutoIt3Wrapper_Run_Obfuscator=y
    #Obfuscator_Parameters=/striponly
    #endregion ;**** Directives created by AutoIt3Wrapper_GUI ****

    [/autoit]
  • Also jetzt passiert folgendes!

    Ich hab dein Archiv "IconPlus" runtergeladen und entpackt. Wenn ich jetzt auf die exe gehe ... dann funktioniert dein Skript. Alles geht wie es soll. DIe Buttons sind mit Icons belegt.
    Wenn ich allerdings den Quelltext öffne .... und im SciTE auf Tools > Compile geh ... dann geht es nicht. Ich hab den Pfad an meinen angepasst. Und trotzdem funktioniert es nicht.
    In der Compilierten Datei ist kein Icon, obwohl ich nur meinen Pfad angepasst habe.
    Von C:\Test\1.ico zu C:\Users\BlackFx\Downloads\IconPlus\Test\1.ico

    Es ist zum verrückt werden -.-

  • Hier ein Auszug aus der Scite -Hilfe.

    Spoiler anzeigen
    [autoit]


    ;Adding Extra Ico's to the program resources.
    ;Example adding additional Icon to the Program resources and using it in your script.

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

    ;To test, compile the below script and run the exe:

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

    ; Example 1

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

    #AutoIt3Wrapper_Res_Icon_Add=C:\Program Files\AutoIt3\Icons\au3.ico

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

    #AutoIt3Wrapper_Res_Icon_Add=C:\Program Files\AutoIt3\Icons\filetype1.ico

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

    #AutoIt3Wrapper_Res_Icon_Add=C:\Program Files\AutoIt3\Icons\filetype2.ico

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

    #AutoIt3Wrapper_Res_Icon_Add=C:\Program Files\AutoIt3\Icons\filetype3.ico

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

    #AutoIt3Wrapper_Res_Icon_Add=C:\Program Files\AutoIt3\Icons\filetype-blank.ico

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

    #include <ButtonConstants.au3>

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

    GUICreate("Demo resource ICO's")

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

    $h_Button1 = GUICtrlCreateButton("my picture button", 10, 20, 40, 40, $BS_ICON)

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

    GUISetState()

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

    For $x = 0 To 9

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

    $rc = TraySetIcon(@ScriptFullPath, -$x)

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

    $rc2 = GUICtrlSetImage($h_Button1, @ScriptFullPath, -$x)

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

    If $x < 5 Then

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

    TrayTip("Default ico:" & $x, "TraySetIcon rc:" & $rc & @LF & "GUICtrlSetImage rc:" & $rc2, 3)

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

    Else

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

    TrayTip("New ico:" & $x, "TraySetIcon rc:" & $rc & @LF & "GUICtrlSetImage rc:" & $rc2, 3)

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

    EndIf

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

    Sleep(2000)

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

    Next

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

    GUIDelete()

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

    ; Example 2

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

    #AutoIt3Wrapper_Res_File_Add=C:\WINDOWS\Media\tada.wav, SOUND, MYWAV
    Global Const $SND_RESOURCE = 0x00040004
    Global Const $SND_ASYNC = 1
    DllCall("winmm.dll", "int", "PlaySound", "str", "MYWAV", "hwnd", 0, "int", $SND_RESOURCE)
    DllCall("winmm.dll", "int", "PlaySound", "str", "MYWAV", "hwnd", 0, "int", BitOR($SND_RESOURCE, $SND_ASYNC))
    For $n = 1 To 100
    Sleep(15)
    ToolTip("Asynch! " & $n)
    Next

    [/autoit]

    Und wenn Du die Icons einfach ins ScriptDir legst, wird doch nur einmal benötigt ?