Kann jemand bitte testen, ob die Exe Dateien zu starten sind? Ab Windows 7 wäre es für mich interessant.
Startet beides und postet auch ein Bild:
Wie zu erwarten startet die crinkled Version auch langsamer, die muss vermutlich entpackt werden?
Kann jemand bitte testen, ob die Exe Dateien zu starten sind? Ab Windows 7 wäre es für mich interessant.
Startet beides und postet auch ein Bild:
Wie zu erwarten startet die crinkled Version auch langsamer, die muss vermutlich entpackt werden?
Meinst Du vielleicht : https://www.autoitscript.com/autoit3/docs/l…Redirection.htm
War wohl doch nur fürs Dateisystem.
Setz mit GUICtrlSetData den Inhalt der zweiten ComboBox wenn du ein Event von der ersten bekommst.
Bei der Auswahl solltest du im Switch-Statement entweder das Case $hAusgewaehlteStadt abfragen, (oder event-basiert leicht anders) und dann den entsprechenden Inhalt anzeigen GUICtrlSetData($hStadtInfos, "....")
Wieso nicht mit einem Regex replacen?
So funktioniert es nicht!
let sMp3File = "F:\Audio\MP3\CD\Top 3000-4ever\Top 3000-4ever 0401-0500\0458. Albert Hammond - The Free Electric Band (1973).mp3"
Weil du sehr wahrscheinlich die Zeichen escapen musst. Versuchs mal mit \\ statt einem Backslash.
Genau das will ich ja eben nicht... deshalb verwende ich ja die Word-UDF... schön wäre, wenn man damit die Formatierung ändern könnte.
Ich schätze mal diese Funktion gibt es auch in der UDF, oder im COM-Objekt.
![]()
Ich kenn mich mit der UDF nicht aus, deshalb habe ich dir nur den Weg genannt wie man es manuell macht.
Vielleicht findest du ja in der Doku zum Objekt die Möglichkeit Formatierungsoptionen eines Objektes zu setzen?
Das funktioniert soweit auch ganz gut, allerdings werden die Bilder in der PDF-Datei nicht 1:1 übernommen, sondern kleiner dargestellt, als im Original.
Das liegt sehr wahrscheinlich daran, dass die Formatierung in Word falsch gewählt wurde. Leider hab ich kein Word mehr drauf, also weiß ich nicht mehr wie man exakt die Formatierung anpasst, aber sofern ich mich erinnere war das Rechtsklick aufs Bild > Format > "Passend".
Dann kannst du das Bild auch dementsprechend verschieben und skalieren. Ich schätze mal diese Funktion gibt es auch in der UDF, oder im COM-Objekt.
Anschließend brauchst du ja nur zu prüfen ob das Bild zuerst rechts oder unten am Seitenrand überläuft wenn es skaliert. Dann nimmst du diesen Faktor und streckts das Bild auf die Seite.
Thread gelesen und vergessen mich zu melden, passiert in der 'Hektik' der Quarantäne. Her mit der Demo!
Ups, ja stimmt. Arbeite mich in C++ ein und bin gedanklich vermutlich schon bei den Referenzen x)
Ich vergrößere das Bild auf Desktopgröße bevor ich den Text einfüge.
Deshalb kann ich doch kein FileCopy verwenden. Oder meinst du was anderes?
Mein Fehler, ich hab das vergrößern übersehen, aber du kannst es ja auch direkt vergrößern und draufzeichnen. Wozu zwischenspeichern?
#Region ;************ Includes ************
#Include <GDIPlus.au3>
#Include <File.au3>
#EndRegion ;************ Includes ************
_bild_text("C:\Windows\Web\Wallpaper\Windows\img0.jpg", 500, 500, "Hallo", 50)
Func _bild_text($bild_quelldatei_func, $text_pos_x_func, $text_pos_y_func, $text, $text_schriftgroesse_func)
_GDIPlus_Startup()
Local $szDrive, $szDir, $szFName, $szExt
;kompletter Pfad Zielbild
_PathSplit($bild_quelldatei_func, $szDrive, $szDir, $szFName, $szExt)
Local $desktopbild_zieldatei = $szFName & "2" & $szExt
Local $zielbild_io = @TempDir & "\" & $desktopbild_zieldatei
Local $hImage = _GDIPlus_ImageLoadFromFile($bild_quelldatei_func)
Local $hBitmap = _GDIPlus_BitmapCreateFromScan0(@DesktopWidth, @DesktopHeight) ;create an empty bitmap
Local $hGraphics = _GDIPlus_ImageGetGraphicsContext($hBitmap)
_GDIPlus_GraphicsDrawImageRect($hGraphics, $hImage, 0, 0, @DesktopWidth, @DesktopHeight)
;Abmaße ermitteln
Local $iX = @DesktopWidth
Local $iy = @DesktopHeight
If $text_pos_x_func > 0 Then ;+Wert = Abstand von links
$iX -= $text_pos_x_func
Else ;-Wert = Abstand von rechts
$text_pos_x_func += $iX
EndIf
If $text_pos_y_func > 0 Then ;+Wert = Abstand von oben
$iy -= $text_pos_y_func
Else ;-Wert = Abstand von unten
$text_pos_y_func += $iy
EndIf
;Schrift erstellen
Local $hFormat = _GDIPlus_StringFormatCreate()
Local $hFamily = _GDIPlus_FontFamilyCreate("Arial")
Local $hFont = _GDIPlus_FontCreate($hFamily, $text_schriftgroesse_func, 1)
Local $tLayout = _GDIPlus_RectFCreate($text_pos_x_func, $text_pos_y_func)
;Ermittelt die Abmaße des Textes
Local $aInfo = _GDIPlus_GraphicsMeasureString($hGraphics, $text, $hFont, $tLayout, $hFormat)
Local $text_breite = Ceiling(DllStructGetData($aInfo[0], "Width"))
Local $text_hoehe = Ceiling(DllStructGetData($aInfo[0], "Height"))
;Zeichnet ein weißes Feld hinter den Text
Local $hBrush2 = _GDIPlus_BrushCreateSolid(0xFFFFFFFF)
_GDIPlus_GraphicsFillRect($hGraphics, $text_pos_x_func, $text_pos_y_func, $text_breite, $text_hoehe, $hBrush2)
;Zeichnet den Text
Local $hBrush = _GDIPlus_BrushCreateSolid()
_GDIPlus_GraphicsDrawStringEx($hGraphics, $text, $hFont, $aInfo[0], $hFormat, $hBrush)
;Speichert die Datei
_GDIPlus_ImageSaveToFile($hBitmap, $zielbild_io)
;Ressourcen freigeben
_GDIPlus_BrushDispose($hBrush)
_GDIPlus_BitmapDispose($hBitmap)
_GDIPlus_FontDispose($hFont)
_GDIPlus_FontFamilyDispose($hFamily)
_GDIPlus_Shutdown()
ShellExecute($zielbild_io)
Return $zielbild_io
EndFunc ;==>_bild_mit_text
Alles anzeigen
Du kannst sogar statt 'ner Bitmap zum zwischenspeichern auf dem Original arbeiten:
#Region ;************ Includes ************
#Include <GDIPlus.au3>
#Include <File.au3>
#EndRegion ;************ Includes ************
_bild_text("C:\Windows\Web\Wallpaper\Windows\img0.jpg", 500, 500, "Hallo", 50)
Func _bild_text($bild_quelldatei_func, $text_pos_x_func, $text_pos_y_func, $text, $text_schriftgroesse_func)
_GDIPlus_Startup()
Local $szDrive, $szDir, $szFName, $szExt
;kompletter Pfad Zielbild
_PathSplit($bild_quelldatei_func, $szDrive, $szDir, $szFName, $szExt)
Local $desktopbild_zieldatei = $szFName & "2" & $szExt
Local $zielbild_io = @TempDir & "\" & $desktopbild_zieldatei
Local $hImage = _GDIPlus_ImageLoadFromFile($bild_quelldatei_func)
_GDIPlus_ImageResize($hImage, @DesktopWidth, @DesktopHeight)
Local $hGraphics = _GDIPlus_ImageGetGraphicsContext($hImage)
;Abmaße ermitteln
Local $iX = @DesktopWidth
Local $iy = @DesktopHeight
If $text_pos_x_func > 0 Then ;+Wert = Abstand von links
$iX -= $text_pos_x_func
Else ;-Wert = Abstand von rechts
$text_pos_x_func += $iX
EndIf
If $text_pos_y_func > 0 Then ;+Wert = Abstand von oben
$iy -= $text_pos_y_func
Else ;-Wert = Abstand von unten
$text_pos_y_func += $iy
EndIf
;Schrift erstellen
Local $hFormat = _GDIPlus_StringFormatCreate()
Local $hFamily = _GDIPlus_FontFamilyCreate("Arial")
Local $hFont = _GDIPlus_FontCreate($hFamily, $text_schriftgroesse_func, 1)
Local $tLayout = _GDIPlus_RectFCreate($text_pos_x_func, $text_pos_y_func)
;Ermittelt die Abmaße des Textes
Local $aInfo = _GDIPlus_GraphicsMeasureString($hGraphics, $text, $hFont, $tLayout, $hFormat)
Local $text_breite = Ceiling(DllStructGetData($aInfo[0], "Width"))
Local $text_hoehe = Ceiling(DllStructGetData($aInfo[0], "Height"))
;Zeichnet ein weißes Feld hinter den Text
Local $hBrush2 = _GDIPlus_BrushCreateSolid(0xFFFFFFFF)
_GDIPlus_GraphicsFillRect($hGraphics, $text_pos_x_func, $text_pos_y_func, $text_breite, $text_hoehe, $hBrush2)
;Zeichnet den Text
Local $hBrush = _GDIPlus_BrushCreateSolid()
_GDIPlus_GraphicsDrawStringEx($hGraphics, $text, $hFont, $aInfo[0], $hFormat, $hBrush)
;Speichert die Datei
_GDIPlus_ImageSaveToFile($hImage, $zielbild_io)
;Ressourcen freigeben
_GDIPlus_BrushDispose($hBrush)
_GDIPlus_ImageDispose($hImage)
_GDIPlus_FontDispose($hFont)
_GDIPlus_FontFamilyDispose($hFamily)
_GDIPlus_Shutdown()
ShellExecute($zielbild_io)
Return $zielbild_io
EndFunc ;==>_bild_mit_text
Alles anzeigen
Dein Text ist aus dem Bild raus, weil du da die Größe des eigentlichen Bildes draufaddierst.
Kommentier mal 57/58 aus, dann siehst du deinen Text.
Lass dir wenn du dir unsicher bist immer die Werte ausgeben, du siehst bei $text_pos_x_func, dass diese (bei mir) irgendwo bei 3000+ liegen.
Außerdem brauchst du gar keine GUI zu erzeugen (Z. 37) um das Bild zu kopieren, ich weiß zwar nicht warum du nicht einfach FileCopy nutzt,
aber du kannst auch Bitmaps ohne GUIs erzeugen. _GDIPlus_BitmapCreateFromScan0.
Klingt sehr eigenartig, hattest du vielleicht einen Hardcrash deiner AutoIt Exe oder ähnliches?
Ich hätte auf falsche Parametertypen getippt aber es scheint ja alles OK zu sein.
Also eine andere Art von If-Then-Else.
Nicht ganz. Der ternäre Operator gibt immer Werte zurück und kann bestimmte Statements nicht ausführen, da sie keine Werte zurückgeben.
Klassisches Beispiel: ContinueLoop, ContinueCase, Exit, ...
@kilo Der Operator wird verwendet um elegant If-Verzweigungen einzubinden. Damit spart man sich ein paar Zeilen, hier ein kleines Beispiel:
Local $iZahl = 1000
Local $sString = ""
$sString = ($iZahl < 0 ? "-" : "+") & $iZahl
; sString= "+1000"
;statt der langen Variante
If $iZahl < 0 Then
$sString = "-"
Else
$sString = "+"
EndIf
$sString &= $iZahl
; sString = "+1000"
Alles anzeigen
$ret = Ping("www.google.com",150
ConsoleWrite("Internet = " & ($ret ? "AN" : "AUS") & @CRLF)
Dann stimmt was bei dir nicht. Wenn man von der fehlenden Klammer mal absieht, denn bei mir wird AN zurückgegeben.
Ich weiß ja nicht wie viele Monde das her ist, aber direkter Dateizugriff ist meist deaktiviert, damit Webseiten nicht den Inhalt des Userdatenträgers auslesen können.
Nur sollte das eigentlich nicht der Fall sein wenn du die HTML-Datei im Browser öffnest ohne Webserver.
Anders siehts wiederum aus bei Javascript, dort werden die Dateien auf dem PC mit XMLHttpRequests (oder wie das heißt) angefordert.
Webbrowser sollten diese direkt blockieren, auch wenn du die HTMl-Datei direkt öffnest.
Ich kann in deinem Code allerdings nichts davon erkennen, dass die Tabelle in irgendeinerweise direkt in die HTML geladen (oder in die HTML generiert wird).
Verwendest du JS zum laden sollte es eigentlich reichen, wenn du ein file input verwendest, denn wenn der User die Datei auswählt (die geladen werden soll) lassen Webbrowser für gewöhnlich den Zugriff zu.
Tutorials wie man Dateien lädt findest du überall im Netz.
Was/Womit willst du denn replacen?
Ich versuche auch möglichst unnötige Variablen zu vermeiden, auch deshalb sieht das letzte Script von Musashi ganz interessant aus, da man damit u.a. auch einige Variablen sparen kann.
Hä, hast du die überhaupt mein Skript mal angesehen? Dort hast du nur eine zusätzliche Variable, und die ist vom StringRegExp/StringBetween.
Ist zwar letztlich das selbe Skript aber ich hab das Gefühl du liest hier die Beiträge irgendwie nicht vollständig.
Nur kann man das nicht auch mit einem RegEx machen?
Ich könnte mir schon vorstellen, dass diese Sache mit RegEx und ohne viel Scripterei zu machen währe.
Sicherlich geht das, aber du musst nicht zwangsweise mit Kanonen auf Spatzen schießen.
Ich bin nicht sehr bewandert was RegEx/RegExpReplace angeht, aber du kannst deinen Code auch erheblich kürzen, sofern die Eingabedaten nicht stark variieren (je nach dem was gesucht wird um es zu replacen).
Hier der Weg den ich dir vor ein paar Posts beschrieben hab:
Global $sText = 'Das ist, aber schön, [18, "D:", 34, "X:"][20, 50][3][5, 22][500][60, "D"], Hier ist der, String, zu Ende.'
Global $aRegEx = StringRegExp($sText, "\[(.+?)\]", 3)
For $i = 0 To UBound($aRegEx) - 1
$sText = StringReplace($sText, $aRegEx[$i], StringReplace($aRegEx[$i], ", ", "- "))
Next
MsgBox(0, 0, $sText)
Und um eine persönliche Note reinzubringen:
Ich bin immer dafür, einfach lesbaren und verständlichen Code zu haben, wenn es das Skript nicht anders erfordert.
Wenn du in ein paar Wochen/Monaten/Jahren wieder in das Skript reinsiehst, weißt du vielleicht gar nicht mehr wie das Pattern eigentlich funktioniert.
Also was bringen dir denn drei bis vier gesparte Codezeilen (und vielleicht paar µs Zeitersparnis) wenn der Code unverständlich wird.