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
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
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
#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,"(.{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
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")
Das Bild ist 378x143 groß und hat 32kb
FileInstall() sollte schon funktionieren (auch wenn es "nur" als Script läuft). Du hast aber einen Backslash bei der Pfadangabe vergessen:
Beispiel:
[autoit]
FileInstall("C:\logo.gif", @ScriptDir & "\logo.gif")
GUICreate('Test', 640, 480)
GUICtrlCreatePic(@ScriptDir & "\logo.gif", 10, 10)
Ah Danke Funktioniert alles (auch kompiliert).
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>
FileInstall("C:\logo.gif", _AddBacksl(@ScriptDir, "logo.gif"))
GUICreate('Test', 640, 480)
GUICtrlCreatePic(_AddBacksl(@ScriptDir, "logo.gif"), 10, 10)
GUISetState()
Do
Until GUIGetMsg() = $GUI_EVENT_CLOSE
Func _AddBacksl($macro, $path)
If StringRight($macro, 1) <> '\' Then $macro &= '\'
Return $macro & $path
EndFunc
Hab mal so nen includer für Quellcode geschrieben : [ gelöst ] Bild in Quellcode einbinden?
ZitatFileInstall() 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.
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.
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:
#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,"(.{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
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")
Damit funktioniert es. Leider fehlen am Ende immer einige Bytes und das Bild hat einige Fehler. Woran kann das liegen ?
Der RegExp. Hat neicht ganz gepasst. So geht es
#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")
Top, funktioniert jetzt einwandfrei !
Gruß
Micha_he