Nach Compileren zur Exe ist das GUI ohne eingefügten Bildern (Background/Buttons)

  • Habe mir ein Programm mit GUI Oberfläche geschrieben in der Die Buttons Bilder benutzen.
    Auch als Hintergrund habe ich ein Bild benutzt. Sieht alles ganz gut aus doch sobald ich zur einer .exe compiliere
    findet/lädt er die Bilddateien nichtmehr(Außer ich kopiere den Design Ordner mit, was ich ja nicht möchte).

    Die Bilder sind als .bmp (Bitmap) gespeichert:

    [autoit]


    @ScriptDir & "\design\button1.bmp"
    @ScriptDir & "\design\background.bmp"

    [/autoit]

    Hat jemand eine Idee, wie mann die Bilder so in die .exe einfügt das er sie in der GUI lädt? ?(
    PS: Falls es zu wenig Informationen sind, kann ich am späten Nachmittag noch den kompletten Header des Scripts posten.

    2 Mal editiert, zuletzt von chrisbyRRC (19. März 2010 um 14:27)

  • Bevor die Frage kommt: "Wie funktioniert das? bei mir kommt ein ERROR!"
    Du musst bei Fileinstall den Source (=Quellpfad) vollständig eintippen - Ohne Variablen oder Makros!!

    Wer immer nur das tut, was er bereits kann - wird auch immer nur das bleiben, was er bereits ist!

  • Bevor die Frage kommt: "Wie funktioniert das? bei mir kommt ein ERROR!"
    Du musst bei Fileinstall den Source (=Quellpfad) vollständig eintippen - Ohne Variablen oder Makros!!

    *g* im zweifelsfall kann man ruhig mal davon ausgehen dass der fragende die Hilfedatei lesen kann^^

  • Ok also "Fileinstall" ist die einzige Möglichkeit die Bilder für die Buttons mitzunehmen??
    Weil es schön wäre wenn es eine Möglichkeit gibt das es die Bilder direkt aus der exe liest und nicht erst irgendwo auf den Computer entpacken muss.

    Wenns nichts anderes gibt werd ich heut nachmittag mal mit "Fileinstall" probieren, auch wenn es weniger schön ist den Zielcomputer vollzumülln. ;)

  • Hallo chrisbyRRC,

    Zitat von chrisbyRRC

    Ok also "Fileinstall" ist die einzige Möglichkeit die Bilder für die Buttons mitzunehmen


    nein, du kannst auch die Bilder als Binärdaten einbinden. Siehe dazu: Fremddateien "includen" (ohne FileInstall)

    Zitat

    Weil es schön wäre wenn es eine Möglichkeit gibt das es die Bilder direkt aus der exe liest und nicht erst irgendwo auf den Computer entpacken muss.

    Entpacken musst du sie auf dem Computer so oder so. Du kannst sie aber bei beiden Verfahren, auch sofort nach dem erzeugen auf der Gui wieder von der Platte löschen, sie werden ja immer wieder neu auf die Platte geschrieben.

    mfg (Auto)Bert

  • Hallo SEuBo,

    Entpacken musst du sie auf dem Computer so oder so. Du kannst sie aber bei beiden Verfahren, auch sofort nach dem erzeugen auf der Gui wieder von der Platte löschen, sie werden ja immer wieder neu auf die Platte geschrieben.

    Im Zsammenhang ist sehr wohl ersichtlich, dass ich mit so oder so die beiden Verfahren

    • FileInstall
    • Fremddateien "includen" (ohne FileInstall)

    gemeint habe und da muss man die Dateien zumindest temporär erzeugen,

    mfg (Auto)Bert

  • Ok "Fileinstall()" hab ich mal gelassen weil ich mir nicht vorstellen kann das/wie es funktioniert. Ich muss einmal Quel- und Zielpfad angeben, was doch heisst das er beim ausführen schon die Dateien entpackt braucht.
    Bin total verwirrt :wacko:

    Aber egal, ich wollt ja sowieso ganz gern alles in einer exe. Deswegen hab ich mir mal die Methode von SEuBo angeschaut.
    Aber ich bezweifel das ich verstanden habe was es genau tut. :rolleyes:

    Dennoch hab ich mal testeshalber ein Button-Bild ersetzt, hier mein kompletter Header: (hab paar comments gemacht damit ihr vllt. besser durchseht)

    Spoiler anzeigen
    [autoit]


    #RequireAdmin
    #Region ;**** Directives created by AutoIt3Wrapper_GUI ****
    #AutoIt3Wrapper_icon=codwaw-trainer.ico ; HIER IST DAS ICO FUER DIE EXE
    #AutoIt3Wrapper_Res_File_Add=D:\Users\Master\Desktop\coordinaten\CoD\background.bmp ; HIER IST DER HINTERGRUND
    #AutoIt3Wrapper_Res_File_Add=D:\Users\Master\Desktop\coordinaten\CoD\button_disable.bmp ; BMP FUER BUTTON DISABLE
    #AutoIt3Wrapper_Res_File_Add=button_enable.bmp, rt_bitmap, BUEN_BMP_1 ; ===> SO HIER HAB ICH MAL UMGEAENDERT - BUTTON ENABLE
    #EndRegion ;**** Directives created by AutoIt3Wrapper_GUI ****

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

    ;**** Directives created by AutoIt3Wrapper_GUI ****
    #include <ButtonConstants.au3>
    #include <GUIConstantsEx.au3>
    #include <StaticConstants.au3>
    #include <WindowsConstants.au3>
    #include <string.au3>
    #include <Memory.au3>
    #include <resources.au3>

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

    #Region ### START Koda GUI section ### Form=D:\Users\Master\Desktop\coordinaten\CoD-WAW-Trainer.kxf
    $Form1 = GUICreate("CoD-WAW by c0dycZ and Shorty123", 451, 251, 430, 260)
    GUISetIcon(@ScriptDir & "\codwaw-trainer.ico")
    $Pic1 = GUICtrlCreatePic(@ScriptDir & "RCData\1.bmp", 0, 0, 450, 250, BitOR($SS_NOTIFY,$WS_GROUP,$WS_CLIPSIBLINGS))
    GUICtrlSetState(-1, $GUI_DISABLE)
    $ammo_disable = GUICtrlCreateButton("", 250, 170, 150, 50, $BS_BITMAP)
    GUICtrlSetImage(-1, @ScriptDir & "RCData\3.bmp", 0)
    $ammo_enable = GUICtrlCreateButton("", 250, 90, 150, 50, $BS_BITMAP)
    $BUEN = GUICtrlSetImage(-1,"", 0) ; ====>> SO UND HIER HAB ICH AUCH ABGEAENDERT
    _ResourceSetImageToCtrl($BUEN, "BUEN_BMP_1", $RT_BITMAP) ; DAS SELBE^^
    $reload_disable = GUICtrlCreateButton("", 40, 170, 150, 50, $BS_BITMAP)
    GUICtrlSetImage(-1, @ScriptDir & "RCData\3.bmp", 0)
    $reload_enable = GUICtrlCreateButton("", 40, 90, 150, 50, $BS_BITMAP)
    GUICtrlSetImage(-1, @ScriptDir & "RCData\2.bmp", 0)
    $ChooseYourWeapon = GUICtrlCreateCombo("ChooseYourWeapon", 144, 144, 153, 25)
    GUICtrlSetData(-1, "MG42|PPSh-41|M1897 Schrotflinte|PTRS-41|STG-44")
    GUICtrlSetFont(-1, 8, 800, 0, "MS Sans Serif")
    GUISetState(@SW_SHOW)
    #EndRegion ### END Koda GUI section ###

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

    ;...hier kommt denn der script

    [/autoit]

    Ja, hab die GUI übrigens mit Koda Form Designer erstellt, falls das wichtig sein sollte.
    Und hier die Fehlermeldung :S :

    Spoiler anzeigen
    [autoit]


    >"D:\Program Files\AutoIt3\SciTE\AutoIt3Wrapper\AutoIt3Wrapper.exe" /run /prod /ErrorStdOut /in "D:\Users\Master\Desktop\coordinaten\CoD\CoD-WAW-Trainer.au3" /autoit3dir "D:\Program Files\AutoIt3" /UserParams
    +>14:50:16 Starting AutoIt3Wrapper v.2.0.1.24 Environment(Language:0407 Keyboard:00000407 OS:WIN_VISTA/Service Pack 2 CPU:X64 OS:X86)
    >Running AU3Check (1.54.19.0) from:D:\Program Files\AutoIt3
    D:\Program Files\AutoIt3\Include\resources.au3(143,36) : ERROR: _MemGlobalAlloc(): undefined function.
    $hData = _MemGlobalAlloc($nSize,2)
    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^
    D:\Program Files\AutoIt3\Include\resources.au3(144,33) : ERROR: _MemGlobalLock(): undefined function.
    $pData = _MemGlobalLock($hData)
    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^
    D:\Program Files\AutoIt3\Include\resources.au3(145,40) : ERROR: _MemMoveMemory(): undefined function.
    _MemMoveMemory($ResData,$pData,$nSize)
    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^
    D:\Program Files\AutoIt3\Include\resources.au3(146,26) : ERROR: _MemGlobalUnlock(): undefined function.
    _MemGlobalUnlock($hData)
    ~~~~~~~~~~~~~~~~~~~~~~~^
    D:\Program Files\AutoIt3\Include\resources.au3(229,24) : ERROR: _MemGlobalFree(): undefined function.
    _MemGlobalFree($hData)
    ~~~~~~~~~~~~~~~~~~~~~^
    D:\Users\Master\Desktop\coordinaten\CoD\CoD-WAW-Trainer.au3 - 5 error(s), 0 warning(s)
    !>14:50:16 AU3Check ended.rc:2

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

    Puh, ich glaub ohne Euch schaff ich das nich! :pinch:

  • Ok "Fileinstall()" hab ich mal gelassen weil ich mir nicht vorstellen kann das/wie es funktioniert. Ich muss einmal Quel- und Zielpfad angeben, was doch heisst das er beim ausführen schon die Dateien entpackt braucht.

    den quellpfad braucht er nur beim kompilieren. die datei vom quellpfad wird dann mit in die exe gepackt.


    edit:
    kommen die fehlermeldungen vielleicht weil du

    [autoit]

    #Include <Memory.au3>

    [/autoit]


    vergessen hast?

  • Ich glaub ich würd doch lieber zu der Fileinstall() Variante tendieren. :)
    Komme mit der anderen Methode nicht klar.

    Ist es wirklich nur notwendig diese Zeile vor der GUI zu schreiben? :

    [autoit]

    FileInstall("D:\Users\Master\Desktop\coordinaten\CoD\design\button_enable.bmp", "C:\c0dycZ\data\button_enable.bmp", 1)

    [/autoit]

    und dann halt die GUI-Befehle so abzuändern? :

    [autoit]

    GUICtrlSetImage(-1, "C:\c0dycZ\data\button_enable.bmp", 0)

    [/autoit]

    Ich bekomme zwar keine Fehler, aber er erstellt weder einen Ordner noch sehe ich die Bilder in der GUI. ?( Was muss ich noch beachten?

  • Jonathan
    Dies ist eine gute Idee. Wollte auch erst folgenden Pfad nehmen: C:\Users\Master\AppData\Local\Temp
    Doch das ja wohl nur für WinVista oder vllt. auch Win7 gilt hab ichs sein lassen. Mit @TempDir sollte er automatisch den Pfad finden, richtig?

    EDIT: Tja wie auch immer ob im Temp Verzeichnis oder nicht, es wird kein Verzeichnis erstellt und die Bilder erscheinen auch nicht. Irgendwas mache ich falsch ?(

    Einmal editiert, zuletzt von chrisbyRRC (18. März 2010 um 21:07)

  • Dies ist eine gute Idee. Wollte auch erst folgenden Pfad nehmen: C:\Users\Master\AppData\Local\Temp
    Doch das ja wohl nur für WinVista oder vllt. auch Win7 gilt hab ichs sein lassen. Mit @TempDir sollte er automatisch den Pfad finden, richtig?


    jap, dann geht er automatisch zu dem pfad

    EDIT: Tja wie auch immer ob im Temp Verzeichnis oder nicht, es wird kein Verzeichnis erstellt und die Bilder erscheinen auch nicht. Irgendwas mache ich falsch ?(


    Poste doch mal deinen kompletten code (aber bitte im spoiler)
    Edit: \\ oh, ahst du ja schon :D

  • EDIT: Jo jez weiss ich wo die Fehler lagen.
    1. Obwohl in der Hilfedatei drin steht das beim Destination-Folder Variabeln genutzt werden dürfen kommt er mit "@TempDir nicht klar. Mit nem andern Pfad gehts.
    2. Musste ich zuerst mit "DirCreate(@TempDir & "\c0dycZ\data")", die fehlenden Unterordner erstellen. Hatte ich wohl in der Hilfedatei überlesen.

    Naja Danke nochmal für den Tipp, jetzt klappt ja alles! :D

    Einmal editiert, zuletzt von chrisbyRRC (19. März 2010 um 14:26)

  • Hallo

    die Bilder müssen beim Ausführen aus @Temdir\data geladen werden:

    Spoiler anzeigen
    [autoit]

    #RequireAdmin
    #Region ;**** Directives created by AutoIt3Wrapper_GUI ****
    #AutoIt3Wrapper_icon=D:\Users\Master\Desktop\coordinaten\CoD\design\codwaw-trainer.ico
    #AutoIt3Wrapper_Res_Comment=coded by c0dycZ designed by Shorty123
    #AutoIt3Wrapper_Res_Description=Call of Duty World at War Trainer
    #AutoIt3Wrapper_Res_Fileversion=1.0.0.0
    #AutoIt3Wrapper_Res_LegalCopyright=c0dycZ and Shorty123
    #AutoIt3Wrapper_Res_Language=1031
    #EndRegion ;**** Directives created by AutoIt3Wrapper_GUI ****

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

    if not FileExists(@TempDir & "\data") then DirCreate(@TempDir & "\data) ;<======= wichtig

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

    FileInstall("D:\Users\Master\Desktop\coordinaten\CoD\design\button_enable.bmp", @TempDir & "\data\button_enable.bmp", 1)

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

    ;**** Directives created by AutoIt3Wrapper_GUI ****
    #include <ButtonConstants.au3>
    #include <GUIConstantsEx.au3>
    #include <StaticConstants.au3>
    #include <WindowsConstants.au3>
    #include <string.au3>
    #include <Memory.au3>

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

    #Region ### START Koda GUI section ### Form=d:\users\master\desktop\coordinaten\cod-waw-trainer.kxf
    $Form1_1 = GUICreate("CoD-WAW by c0dycZ and Shorty123", 451, 501, 490, 142)
    GUISetIcon(@Tempdir & "\data\codwaw-trainer.ico")
    $Pic1 = GUICtrlCreatePic(@Tempdir & "\data\background.bmp", 0, 0, 450, 500, BitOR($SS_NOTIFY,$WS_GROUP,$WS_CLIPSIBLINGS))
    GUICtrlSetState(-1, $GUI_DISABLE)
    $ammo_disable = GUICtrlCreateButton("", 250, 225, 150, 50, $BS_BITMAP)
    GUICtrlSetImage(-1, @Tempdir & "\data\button_disable.bmp", 0)
    $ammo_enable = GUICtrlCreateButton("", 250, 145, 150, 50, $BS_BITMAP)
    GUICtrlSetImage(-1,@TempDir & "\data\button_enable.bmp", 0) ; <<<<<<<<<<<<<<<<========= hier würde das Bild was über FileInstall() entpackt wird geladen
    $reload_disable = GUICtrlCreateButton("", 40, 225, 150, 50, $BS_BITMAP)
    GUICtrlSetImage(-1, @Tempdir & "\data\button_disable.bmp", 0)
    $reload_enable = GUICtrlCreateButton("", 40, 145, 150, 50, $BS_BITMAP)
    GUICtrlSetImage(-1, @Tempdir & "\data\button_enable.bmp", 0)
    $Weapon = GUICtrlCreateCombo("Weapon", 240, 72, 153, 25)
    GUICtrlSetData(-1, "MG42|PPSh-41|M1897 Schrotflinte|PTRS-41|STG-44")
    GUICtrlSetFont(-1, 8, 800, 0, "MS Sans Serif")
    $ephackenable = GUICtrlCreateButton("", 40, 330, 150, 50, $BS_BITMAP)
    GUICtrlSetImage(-1, @Tempdir & "\data\button_enable.bmp", 0)
    $ephackdisable = GUICtrlCreateButton("", 40, 410, 150, 50, $BS_BITMAP)
    GUICtrlSetImage(-1, @Tempdir & "\data\button_disable.bmp", 0)
    $grenadesenable = GUICtrlCreateButton("", 250, 330, 150, 50, $BS_BITMAP)
    GUICtrlSetImage(-1, @Tempdir & "\data\button_enable.bmp", 0)
    $grenadesdisable = GUICtrlCreateButton("grenadesdisable", 250, 410, 150, 50, $BS_BITMAP)
    GUICtrlSetImage(-1, @Tempdir & "\data\button_disable.bmp", 0)
    GUISetState(@SW_SHOW)
    #EndRegion ### END Koda GUI section ###

    [/autoit]

    der erste Pfad bei FileInstall ist der in dem sie sich zum Zeitpunkt des kompilierens befinden

    mfg (Auto)Bert