1. Dashboard
  2. Mitglieder
    1. Letzte Aktivitäten
    2. Benutzer online
    3. Team
    4. Mitgliedersuche
  3. Forenregeln
  4. Forum
    1. Unerledigte Themen
  • Anmelden
  • Registrieren
  • Suche
Alles
  • Alles
  • Artikel
  • Seiten
  • Forum
  • Erweiterte Suche
  1. AutoIt.de - Das deutschsprachige Forum.
  2. Mitglieder
  3. Moombas

Beiträge von Moombas

  • Mit Autoit eine PDF-Datei erstellen

    • Moombas
    • 16. April 2021 um 09:04

    Also folgende von Mihai Iancu funktioniert.

    AutoIt
    #include <TxTtoPDF.au3>
    Global $txtfilename, $pdffilename
    
    ; Assign a Local variable the search handle of all files in the current directory.
    Local $hSearch = FileFindFirstFile("*.txt")
    
    ; Assign a Local variable the empty string which will contain the files names found.
    Local $sFileName = "", $iResult = 0
    While 1
        $sFileName = FileFindNextFile($hSearch)
        ; If there is no more file matching the search.
        If @error Then ExitLoop
    
        $txtfilename = $sFileName
        $pdffilename = StringTrimRight ($txtfilename, 4)
    WEnd
    ; Close the search handle.
    FileClose($hSearch)
    
    ;set the properties for the pdf
    _SetTitle('')
    _SetSubject('')
    _SetKeywords('')
    _OpenAfter(True);open after generation
    _SetUnit($PDF_UNIT_CM)
    _SetPaperSize('A4')
    _SetZoomMode($PDF_ZOOM_CUSTOM, 90)
    _SetOrientation($PDF_ORIENTATION_PORTRAIT)
    _SetLayoutMode($PDF_LAYOUT_CONTINOUS)
    ;initialize the pdf
    _InitPDF($pdffilename & '.pdf')
    _LoadFontTT('F1', $PDF_FONT_CALIBRI,$PDF_FONT_ITALIC)
    
    _Txt2PDF($txtfilename, 'F1')
    
    ;write the buffer to disk
    _ClosePDFFile()
    Sleep(1000)
    FileDelete($txtfilename)
    
    Func _Txt2PDF($sFile, $sFontAlias)
        Local $hFile = FileOpen($sFile)
        Local $sText = FileRead($hFile)
        FileClose($hFile)
    
        Local $iUnit = Ceiling(_GetUnit())
        Local $iX = 2
        Local $iY = Ceiling(_GetPageHeight() / _GetUnit()) - 1.5
        Local $iPagina = Ceiling(_GetPageWidth() / $iUnit) - $iX
        Local $iWidth = Ceiling($iPagina - $iX);, 1)
        Local $lScale
        Local $iRanduri = StringSplit($sText & @CRLF & @CRLF & @CRLF & @CRLF, @CRLF, 3)
        Local $iHR = 0.5 * Ceiling($iY / (10 * $iUnit))
        Local $iPages = Ceiling((UBound($iRanduri)) * $iHR / $iY)
        Local $iNrRanduri = Ceiling(UBound($iRanduri) / $iPages-2)
        Local $nrp
        For $j = 0 To $iPages + 2
            $nrp = _BeginPage()
            _DrawText(_GetPageWidth()/_GetUnit()-1, 1, $nrp, 'F1', 10, $PDF_ALIGN_CENTER)
            For $i = 0 To $iNrRanduri - 1
                Local $sLength = Round(_GetTextLength($iRanduri[$i + $j * $iNrRanduri], $sFontAlias, 10))
                Local $iH = $iY - $iHR * ($i + 1)
                Select
                    Case $iH < 1
                        _EndPage()
                    Case $i + $j * $iNrRanduri = UBound($iRanduri) - 1
                        _EndPage()
                        Return
                    Case $sLength > $iWidth - 1
                        $lScale = Ceiling($iWidth * 100 / $sLength)
                        _SetTextHorizontalScaling($lScale)
                        _DrawText($iX, $iH, $iRanduri[$i + $j * $iNrRanduri], $sFontAlias, 10, $PDF_ALIGN_LEFT, 0)
                        _SetTextHorizontalScaling(100)
                    Case Else
                        _DrawText($iX, $iH, $iRanduri[$i + $j * $iNrRanduri], $sFontAlias, 10, $PDF_ALIGN_LEFT, 0)
                EndSelect
            Next
            _EndPage()
        Next
    EndFunc   ;==>_Txt2PDF
    Alles anzeigen

    Dateien

    TxTtoPDF.au3 163,46 kB – 583 Downloads
  • Neues Tablet für Kind!

    • Moombas
    • 13. April 2021 um 12:52

    Wenn man nicht die ganze Zeit Apps/Daten rauf und runter spielt, ist jedes anständige Tablet (kein NoName) stabil (egal ob Apple oder Android oder sonst was).

    Für Android gibt es viele Apps (auch von Android teilweise selber) die einen "Kioskmodus" setzen (Beispiel: https://play.google.com/store/apps/det…ace&hl=de&gl=US). Da muss man sich mal schlau machen welche dieser Apps zu dem was man möchte am besten passt.

    https://www.google.com/search?q=kiosk…chrome&ie=UTF-8

    https://www.google.com/search?q=kiosk…Q4dUDCA4&uact=5

  • Aufbauproblem

    • Moombas
    • 13. April 2021 um 09:23

    Und mal nebenbei:

    AutoIt
    For $i=-1 = 1 to _FileCountLines($file)                        ;fängt bei -1 an zu zählen
      $line = FileReadLine($file, $i)
      $i=$i+1
      $line = FileReadLine($file, $i)
    
      if $line = ("") then Exit  ;sind keine Zeilen mehr da hört er auf
    
      Global $aCoordinates1[2] = [$line] 
      msgbox(0,'ms1','the line ' & $i & ' is ' & $aCoordinates1[0],$aCoordinates1[1])
      FileClose($file)
    next
    Alles anzeigen

    Finde ich grausam.

    1. Zeile: $i=-1 = 1 ;macht keinen Sinn. "= 1" ist überflüssig, wenn du bei -1 starten willst

    2. Zeile: $line = FileReadLine($file, $i) ;macht keinen Sinn, da in Zeile 4 redefiniert und dazwischen nicht gebraucht wird.

    3. Zeile: $i=$i+1 Eine Schleifenvariable ;in der Schleife zu verändern kann gefährliche/unvorhersehbare folgen haben.

    5. Zeile: if $line = ("") then Exit ; Willst du hier das Programm beenden oder nur die Schleife (wäre sonst Exitloop)?

    7. Zeile: Global $aCoordinates1[2] = [$line] ; Ich bin generell kein Freund davon Variablen innerhalb einer Funktion zu initialisieren, erst recht nicht global, das gehört aus meiner Sicht an den Start des Scriptes, hier nur die Zuweisung (ohne Global)

    9. Zeile: FileClose($file); Du schließt die Datei obwohl du im nächsten Schleifendurchlauf wieder drauf zugreifen willst, das wird zu Problemen führen. Das Fileclose muss hinter die Schleife

    Und das ist nur ein Teil der mir auf die Schnelle aufgefallen ist.

  • Aufbauproblem

    • Moombas
    • 13. April 2021 um 09:09

    Du könntest alternativ (falls der Aufbau bleiben soll) auch jede zweite Zeile abfragen:

    Code
    _FileReadToArray($FilePath, $Array, $FRTA_COUNT, ",")
    For $i = 1 To $Array[0] Step +2
        MsgBox($MB_SYSTEMMODAL, "", "Readed line: " & $i)
    Next

    Wobei ein sauberes Array wie Musashi es aufgezeigt hat schöner ist.

  • Variablen und Wildcards

    • Moombas
    • 23. März 2021 um 09:01

    Wenn du sicher gehen willst, das .m3u auch am Ende steht (theoretisch wäre ja auch 'ABCabc.m3u.mp3' möglich)müsstest du das so prüfen (wie UEZ oben auch):

    AutoIt
    $media = FileOpenDialog("", "", "Media (*.wma;*.mp3;*.m3u)" ,1)
    If StringRight($media, 4) = '.m3u' Then
        ConsoleWrite("m3u gelanden")
        iniwrite_MP3()
    Else
        ConsoleWrite("m3u nicht gelanden")
        iniwrite_MP3()
        GUISetState($MP3listGui,@SW_HIDE)
    EndIf
  • Variablen und Wildcards

    • Moombas
    • 23. März 2021 um 08:27

    Du prüfst in diesem Fall ob der String '*.m3u' ist und nicht ob er diesen enhält.

    Was du suchst ist StringInStr():

    AutoIt
    $media = FileOpenDialog("", "", "Media (*.wma;*.mp3;*.m3u)" ,1)
    If StringInStr($media, '.m3u') Then
        ConsoleWrite("m3u gelanden")
        iniwrite_MP3()
    Else
        ConsoleWrite("m3u nicht gelanden")
        iniwrite_MP3()
        GUISetState($MP3listGui,@SW_HIDE)
    EndIf
  • Einfaches Setup einer HTA Datei

    • Moombas
    • 23. März 2021 um 08:09

    @Musashi Das ist richtig. Wenn man aber darauf achtet, wann der betreffende User das letzte mal im Forum aktiv war, geht es auch so ;)

  • Fehler beim Importieren erkennen

    • Moombas
    • 23. März 2021 um 08:07

    BigRox Nein, muss mich entschuldigen :) Ich meinte das von Gofel aufgezeigte:

    AutoIt
    Local $sTestKey = StringMid($sRead, StringInStr($sRead, "[") + 1, StringInStr($sRead, "]") - StringInStr($sRead, "[") - 1)

    Das kann man für den Schlüssel und den Wert machen und somit zwar eine *.reg Datei haben, sie aber wie oben von mir beschrieben einlesen/auswerten.

  • Einfaches Setup einer HTA Datei

    • Moombas
    • 22. März 2021 um 13:49

    Ich denke das auch folgende Sätze wichtig sind, da sie auch erklären warum das so ist:

    Zitat

    Die Funktion FileInstall() ist dazu gedacht, Dateien in kompilierte AutoIt-Skripte einzubinden.

    ...

    Die Datei muss während dem kompilieren gefunden werden.

    Fileinstall packt die Datei mit in die exe, weshalb eine Variable (bei der QUELLE) o.ä. hier nicht möglich ist (das Programm wird ja nicht ausgeführt, nur kompiliert).

    Beim Ziel kannst du die Variable jedoch nutzen.

    Für den Rest hat Lottich jedoch Recht. Anstatt einem Makro, kannst du zu beginn des Scriptes eine Globale Konstante (besser als Variable, da nicht veränderbar) definieren. z.B.

    AutoIt
    Global Const $ProgramFiles = 'C:\Program Files\'

    Tipp: Willst du das solche Konstanten in dern Vorschlägen immer oben angezeigt werden, setze ein Zeichen davor (Achtung: nicht alle funktionieren!).

    AutoIt
    ;folgendes müsste beides funktionieren:
    Global Const $$ProgramFiles = 'C:\Program Files\'
    Global Const $#ProgramFiles = 'C:\Program Files\'
  • Fehler beim Importieren erkennen

    • Moombas
    • 22. März 2021 um 12:17

    BigRox : Stimme ich dir zu. aber du hast selber einen Weg aufgezeigt wie es geht.

    Aus der *.reg Datei alles notwendige auslesen (Schlüssel und Wert), schreiben (regwrite (oder als ganze Datei halt vorher)) und gegenprüfen.

  • Fehler beim Importieren erkennen

    • Moombas
    • 22. März 2021 um 09:31

    Gofel : Naja die Prüfung ist auch nicht so gut, da du nur prüfst ob der Key existiert und nicht welchen Wert er hat.

    Wenn du nun keys hast, die sich "nur" ändern, wird die Prüfung auf Erfolg laufen obwohl der neue Wert nicht übernommen wurde.

    Auch ist dein Wert, den du aus Runwait zurück bekommst nicht die PID (das wäre bei Run der Fall)! Dort erhälst du den Rückgabewert des Programms!

    BigRox :

    Ich schreibe Registryeinträge mit Regwrite, dort wird @error auf einen Wert gesetzt, der Rückschlüsse zulässt (siehe dazu die Hilfe).

    Außerdem prüfe ich ALLE Registryeinträge auf ihre erwarteten Werte, wo ich eine Änderung vorgenommen habe.

  • übersetzer programmieren

    • Moombas
    • 16. März 2021 um 09:33

    Ich kann mich da meinen Vorrednern nur anschließen. Selbst deepl erkennt einige "Eigenheiten" nicht korrekt übersetzen (Beispiel: "Stille Post" - Deepl: Silent Post - Correct: "Chinese whispers")

    Für den Anfang empfiehlt sich etwas wie ein Taschenrechner (den man beliebig ausbauen kann) oder sonstige leichte Projekte zu nehmen.

  • Interessanter Artikel von Wolfgang Thierse

    • Moombas
    • 16. März 2021 um 09:14
    Zitat von Musashi

    Auch nicht schlecht :rofl:.

    So hätte ich es auch interpretiert... Der Barcode ist die Lieferscheinnummer (deswegen die Bezeichnung "Lieferschein" für den Barcode) aber der Schein selber ist im Karton.

    Ob da "/" der ideale Trenner ist, lässt sich streiten. Besser wäre wahrscheinlich "|" gewesen^^

  • Interessanter Artikel von Wolfgang Thierse

    • Moombas
    • 15. März 2021 um 12:19

    Ich bin gespannt ob jemand ob jemand das "Sie"zen noch abändern möchte. Welcher Kerl will schon als Frau angesprochen werden :rofl:

    Wobei ich ja auch eher fast nur noch duzt.

    Das Thema ist von Anfang an so lächerlich... ich kann solchen Leuten immer nur sagen: :rtfm:

  • Interessanter Artikel von Wolfgang Thierse

    • Moombas
    • 15. März 2021 um 10:00

    Naja diverses Geschlecht oder Geschlechtsneutral,... ist doch Einheitsbrei. Bin ich weder positiv noch negativ bin ich neutral. Also "das" als universal Benutzen feddisch :P

  • Interessanter Artikel von Wolfgang Thierse

    • Moombas
    • 15. März 2021 um 09:05

    Ich warte immer noch darauf, dass das ganze in die nächste Runde geht...

    Der Stuhl -> Männlich -> gender neutral wäre: das Stuhl

    Die Mauer -> Weiblich -> gender neutral wäre: das Mauer

    Nur mal ein Beipiel, hoffentlich habe ich nicht jemanden jetzt auf eine dumme Idee gebracht :D

  • _GUICtrlListView_SetColumnWidth() - keine Funktion bei Aufruf mit Array-Variabel

    • Moombas
    • 12. März 2021 um 13:27

    Es geht ja nicht nur um "besser", ich hab mal gelernt man prüft nicht auf "True" :) Und der Rest macht es halt übersichtlicher.

    Je nach Umfang kommen sonst ettliche Zeilen zusammen, wo man schnell den Überblick verlieren kann.

  • _GUICtrlListView_SetColumnWidth() - keine Funktion bei Aufruf mit Array-Variabel

    • Moombas
    • 12. März 2021 um 13:15

    Tipp1:

    Code
    if RegRead("HKEY_CURRENT_USER\Software\PCF-Doku-Tool\User-Options","Auto Read-In Data") == False Then $Switch_AutoReadInData = False
    if RegRead("HKEY_CURRENT_USER\Software\PCF-Doku-Tool\User-Options","Save ListView Width") == True Then    $Switch_SaveLVwidht = True

    Solte so auch reichen:

    Code
    $Switch_AutoReadInData = RegRead("HKEY_CURRENT_USER\Software\PCF-Doku-Tool\User-Options","Auto Read-In Data")
    $Switch_SaveLVwidht    = RegRead("HKEY_CURRENT_USER\Software\PCF-Doku-Tool\User-Options","Save ListView Width")

    Tipp2:

    Deine Zuordnung kannst du in eine Schleife packen:

    Code
    For $x = 1 To $LVwidth[0]
      _GUICtrlListView_SetColumnWidth($ListView_Overview, $x, $LVwidth[$x])
    Next

    Tipp 3:

    Unschön:

    Code
    if $Switch_SaveLVwidht == True Then $SavedLVwidth_String = RegRead("HKEY_CURRENT_USER\Software\PCF-Doku-Tool\User-Options","LV-Saved-Width")

    Besser:

    Code
    if $Switch_SaveLVwidht Then $SavedLVwidth_String = RegRead("HKEY_CURRENT_USER\Software\PCF-Doku-Tool\User-Options","LV-Saved-Width")

    Geschmackssache:

    ich hätte diese beiden getauscht (GUI erst anzeigen, wenn diese korrekt eingestellt ist):

    GUISetState(@SW_SHOW)

    _GetDataArray()

  • Zahlen trennen

    • Moombas
    • 2. März 2021 um 09:29

    Achso, also steuerst du das direkt?

    Ich dachte du hast das in einer Datei. Dann war ich wohl vom ersten Beitrag/Fragestellung noch auf dem falschen Dampfer.

  • Zahlen trennen

    • Moombas
    • 26. Februar 2021 um 09:34

    Dann ist es doch immer eine fortlaufende Folge, warum nicht per Schleife (while) einfach alle zahlen 1+x durchgehen, prüfen ob diese vorkommt und wenn nicht abbrechen, sonst weiter.

    Beispiel:

    • String der Zahlen einlesen. ($Seitenzahlen)
    • ggf. '...' im String löschen (ersetzen mit '', sollten dadurch jedoch Lücken entstehen, müssten diese ggf. irgendwie gefüllt werden)
    • while $Seitenzahlen länge = 0
    • $X = 1 (Start default)
    • prüfen ob $X in $Seitenzahlen (nur ganz links und länge von X einbeziehen) Also wenn $X = 1 ist nur das erste Zeichen in $Seitenzahlen prüfen.
    • Wenn es nicht passt, ohne aktion weiter, sonst mit aktion weiter machen
    • Am Ende $x += 1 und entsprechende Anzahl Zeichen aus $Seitenzahlen ganz links löschen.

    Dadurch müsste man es durch laufen können. Theorie!

    Wenn '...' jedoch Lücken erzeugt, wird es schwerer, da man das ggf. zu Laufzeit (oder falls möglich vorher) auffüllen müsste.

    Aber der Tipp von Musashi müsste dann doch 1:1 passen. Post #5

    In Excel berechnet man das z.B. so, was dem Beispiel von Musashi entspricht:

    Mit der höchsten Seitenzahl kennst du alle Zahlen des Strings, da es ja keine Lücken gibt/geben darf.

Spenden

Jeder Euro hilft uns, Euch zu helfen.

Download

AutoIt Tutorial
AutoIt Buch
Onlinehilfe
AutoIt Entwickler
  1. Datenschutzerklärung
  2. Impressum
  3. Shoutbox-Archiv
Community-Software: WoltLab Suite™