Bild in Quellcode einbinden?

  • Hi!

    Ich würde gerne wissen, wie ich ein Bild in den Quellcode einbinden kann, sodass ich nicht mehr die logo.gif anhängen muss.

    FileInstall("C:\logo.gif", @ScriptDir & "logo.gif")

    ... hab ich schon probiert, hat aber keinen Effekt.

    fabs

    Einmal editiert, zuletzt von fabs (8. Mai 2008 um 18:32)

  • FileInstall funktioniert nur für ein kompiliertes Skript (.exe) :)
    Sonst musst du es immer Anhängen, oder, Wenn es ein kleines Bild ist, kannst du es als BinaryString mit ins Skript aufnehmen :)
    Mach grad ein Bsp :)
    //Edit: Macht Datei fertig zum Einfügen ins Skript :)

    Spoiler anzeigen
    [autoit]

    #include <Array.au3>
    $file = FileOpenDialog("Choose EmbedFile",@DesktopDir,"All Files (*.*)")
    $Fname = StringTrimLeft($file,StringInStr($file,"\",1,-1))

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

    If @error Then Exit
    $f = FileOpen($file,16)
    $t = FileRead($f)
    FileClose($f)
    $z = StringRegExp($t,"(.{128}|.{1,128)",3)
    $Ubound = UBound($z)
    If $UBound = 1 Then
    $String = '$FileName = "' & $z[0] & '"'
    ElseIf $UBound > 1 Then
    $String = '$FileName = "' & $z[0] & '" & _' & @CRLF
    For $i = 1 To $UBound-2 Step 1
    $String &= ' "' & $z[$i] & '" & _' & @CRLF
    Next
    $String &= ' "' & $z[$UBound-1] & '"' & @CRLF
    EndIf

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

    If $UBound > 0 Then $String &= '$WritungFile = FileOpen(@ScriptDir & "\'&$Fname&'",18)' & @CRLF & 'FileWrite($WritungFile,$FileName)' & @CRLF & 'FileClose($WritungFile)' & @CRLF & @CRLF
    FileDelete(@TempDir & "\tempembedFile.txt")
    FileWrite(@TempDir & "\tempembedFile.txt",$String)
    ShellExecute(@TempDir & "\tempembedFile.txt")

    [/autoit]

    Einmal editiert, zuletzt von progandy (8. Mai 2008 um 18:44)

    • Offizieller Beitrag

    Dein Beispiel von ganz oben hätte auch funktioniert, wenn das Script sich ebenfalls im Hauptpfad (z.B. C:\) befunden hätte, denn dann liefert @ScriptDir einen Backslash als letztes Zeichen, also z.B. C:\ (was meiner Meinung nach ein Fehler ist). Einen Workaround für diesen "Fehler" wäre eine kleine Funktion "_AddBacksl()":

    [autoit]


    #include<GUIConstants.au3>

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

    FileInstall("C:\logo.gif", _AddBacksl(@ScriptDir, "logo.gif"))
    GUICreate('Test', 640, 480)
    GUICtrlCreatePic(_AddBacksl(@ScriptDir, "logo.gif"), 10, 10)

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

    GUISetState()
    Do
    Until GUIGetMsg() = $GUI_EVENT_CLOSE

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

    Func _AddBacksl($macro, $path)
    If StringRight($macro, 1) <> '\' Then $macro &= '\'
    Return $macro & $path
    EndFunc

    [/autoit]
  • Hab mal so nen includer für Quellcode geschrieben : [ gelöst ] Bild in Quellcode einbinden?

    Zitat

    FileInstall() sollte schon funktionieren (auch wenn es "nur" als Script läuft)


    Wenn man das Skript im Forum anhängt, muss bei FileInstall das Bild extra angehängt werden.

    • Offizieller Beitrag

    Wenn man das Skript im Forum anhängt, muss bei FileInstall das Bild extra angehängt werden.

    Ok, bei einer Veröffentlichung (z.B. hier im Forum), wo man das Script weitergibt, da muss auch das Bild mitgeschickt werden. Sonst kann man daraus keine Exe erstellen.
    Mir ging es jetzt nur um das funktionieren von FileInstall(), wenn man also das Script nur mal eben testen will.

    Edit: Äh, progandy, Dein Link zeigt auf diesen Thread. :rolleyes:

  • Ja, habs in den alten Post reineditier, bevor ich gesehen hab, dass es weitere Posts gibt :)

  • @progandy: Interessante Funktion ! Wenn ich die erzeugte Datei "tempembededfile.txt" in 'au3' umbenenne und ausführe kommt bei mir folgender Fehler:
    "Error: String missing closing quote".
    Obwohl der String in allen Zeilen sauber abgeschlossen ist. Scheinbar geht die Menge an mit "&" aneinandergefügten Strings nicht.

    Ich habe also den Code wie folgt abgeändert:

    Spoiler anzeigen
    [autoit]

    #include <Array.au3>
    $file = FileOpenDialog("Choose EmbedFile",@DesktopDir,"All Files (*.*)")
    $Fname = StringTrimLeft($file,StringInStr($file,"\",1,-1))

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

    If @error Then Exit
    $f = FileOpen($file,16)
    $t = FileRead($f)
    FileClose($f)
    $z = StringRegExp($t,"(.{128}|.{1,128)",3)
    $Ubound = UBound($z)
    If $UBound = 1 Then
    $String = '$FileName = "' & $z[0] & '"'
    ElseIf $UBound > 1 Then
    $String = '$FileName = "' & $z[0] & '"' & @CRLF
    For $i = 1 To $UBound-2 Step 1
    $String &= ' $FileName &= "' & $z[$i] & '"' & @CRLF
    Next
    $String &= ' $FileName &= "' & $z[$UBound-1] & '"' & @CRLF
    EndIf

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

    If $UBound > 0 Then $String &= '$WritungFile = FileOpen(@ScriptDir & "\'&$Fname&'",18)' & @CRLF & 'FileWrite($WritungFile,$FileName)' & @CRLF & 'FileClose($WritungFile)' & @CRLF & @CRLF
    FileDelete(@TempDir & "\tempembedFile.txt")
    FileWrite(@TempDir & "\tempembedFile.txt",$String)
    ShellExecute(@TempDir & "\tempembedFile.txt")

    [/autoit]

    Damit funktioniert es. Leider fehlen am Ende immer einige Bytes und das Bild hat einige Fehler. Woran kann das liegen ?

    Zur Nutzung dieses Forum's, ist ein Übersetzer für folgende Begriffe unerlässlich:

    "On-Bort, weier, verscheiden, schädliges, Butten steyling, näckstet, Parr, Porblem, scripe, Kompletenz, harken, manuel zu extramieren, geckukt, würglich, excell, acces oder Compilevorgeng"

  • Der RegExp. Hat neicht ganz gepasst. So geht es :)

    Spoiler anzeigen
    [autoit]

    #include <Array.au3>
    $file = FileOpenDialog("Choose EmbedFile",@DesktopDir,"All Files (*.*)")
    $Fname = StringTrimLeft($file,StringInStr($file,"\",1,-1))
    If @error Then Exit
    $f = FileOpen($file,16)
    $t = FileRead($f)
    FileClose($f)
    $z = StringRegExp($t,"(.{1,128})",3)
    $Ubound = UBound($z)
    If $UBound = 1 Then
    $String = '$FileName = "' & $z[0] & '"'
    ElseIf $UBound > 1 Then
    $String = '$FileName = "' & $z[0] & '"' & @CRLF
    For $i = 1 To $UBound-2 Step 1
    $String &= ' $FileName &= "' & $z[$i] & '"' & @CRLF
    Next
    $String &= ' $FileName &= "' & $z[$UBound-1] & '"' & @CRLF
    EndIf
    If $UBound > 0 Then $String &= '$WritungFile = FileOpen(@ScriptDir & "\'&$Fname&'",18)' & @CRLF & 'FileWrite($WritungFile,$FileName)' & @CRLF & 'FileClose($WritungFile)' & @CRLF & @CRLF
    FileDelete(@TempDir & "\tempembedFile.txt")
    FileWrite(@TempDir & "\tempembedFile.txt",$String)
    ShellExecute(@TempDir & "\tempembedFile.txt")

    [/autoit]
  • Top, funktioniert jetzt einwandfrei !

    Gruß
    Micha_he

    Zur Nutzung dieses Forum's, ist ein Übersetzer für folgende Begriffe unerlässlich:

    "On-Bort, weier, verscheiden, schädliges, Butten steyling, näckstet, Parr, Porblem, scripe, Kompletenz, harken, manuel zu extramieren, geckukt, würglich, excell, acces oder Compilevorgeng"