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

  • Timer Sonstiges

    • Moombas
    • 19. Juni 2023 um 07:54

    Hast du denn auch alle Variablen etc. so eingebaut wie ich im Testcode?

    Notfalls musst du das ganze Skript posten, ansonsten wird eine Hilfe dazu schwierig.

  • Schliessen geöffneter Datei

    • Moombas
    • 16. Juni 2023 um 10:45

    Ich habe dazu folgendes gefunden: https://support.microsoft.com/en-au/office/w…2a-68da245a0446

    Alternativ teste mal ob dir das hilft: https://www.autoitscript.com/forum/topic/12…&comment=853798

  • Timer Sonstiges

    • Moombas
    • 16. Juni 2023 um 08:40
    Zitat von WhiteHorse

    @Moombas kannst du mir mal bitte noch erklären warum meine ini Datei nicht mehr geht, es steht zwar was in der ini aber die Input Felder werden nicht von der ini übernommen. Wenn jetzt aber "GUICtrlSetData($input1[3], IniRead($ini, "3","Sekunden", 2)) ;ggf. den Defaultwert (2) (wenn die Ini nicht gefunden/gelesen werden kann) ändern"

    darin steht, trägt er die 2 ein so wie es im Code steht aber in der ini steht was anderes und die Zahlen trägt er nicht in die Input Felder.

    Ich kann den fehler jetzt auch nicht finden. ?(

    Hast du denn $ini richtig gesetzt?

    Bei meinem Code wäre das in Zeile 9, wo du den Dateinamen & Pfad natürlich noch anpassen musst.

    Und ändere in Zeile 20 (bei meinem Code) BitOR($WS_VISIBLE, $WS_OVERLAPPEDWINDOW) in BitOR($WS_CAPTION, $WS_MAXIMIZEBOX, $WS_MINIMIZEBOX, $WS_OVERLAPPED, $WS_SYSMENU, $WS_THICKFRAME) (Danke nochmal Velted für das aufschlüsseln) damit du später weißt was da gemacht wurde.

  • Barcode Scanner mit Etiketten Drucker

    • Moombas
    • 15. Juni 2023 um 10:47
    Zitat von Haldi

    Natürlich Kontinuierlich.

    Ist ja schliesslich ein WIRELESS Scanner. Wenn du abdrückst kommt der Input so gut wie ohne verzögerung.

    Für das wenig geld echt ein cooles ding. Nur wie gut der Akku hält müssen wir noch testen.

    Naja, das kommt auf den Anwendungsfall wie man Wireless definiert an.

    Beispiel 1:

    Der Scanner ist per Basis, Dongle, BT mit dem PC/Kasse/Smartphone,... verbunden und überträgt die gescannten Daten direkt.

    Beispiel 2:

    Du gehst zum Scannen außerhalb der Reichweite (anderes Lagerhaus, Keller,...), scannst Kartons etc. (die gescannten Daten werden dann im Scanner gespeichert) und packst ihn dann zum Auslesen in die Station, wo diese dann vom PC verarbeitet werden müssen. Das wäre auch eine Form von Wireless arbeiten.

    Aber an die schon existierende (Teil)-Lösung von Oscar hatte ich garnicht mehr gedacht. Gut das Kanashius das noch wusste ;)

  • Barcode Scanner mit Etiketten Drucker

    • Moombas
    • 14. Juni 2023 um 13:55

    Aber blöde Frage: Wie arbeitet der Scanner?

    Wir haben das beim Zebra (gleiches Setup), das der Scanner erst die gescannten Datenüberträgt, wenn er in die Station gesteckt wird.

    Oder überträgt der DeLock diese kontinuierlich?

  • Barcode Scanner mit Etiketten Drucker

    • Moombas
    • 14. Juni 2023 um 13:49

    Alternativ wäre eine art keylogger (alle Zeichen der Tastatur mitloggen (TAB/Leertaste macht ein Reset der Daten) und immer prüfen ob der eingegebene String deiner Erwartung entspricht) aber ob das Sinnvoll und im Unternehmen erlaubt ist, sei mal dahin gestellt.

  • Barcode Scanner mit Etiketten Drucker

    • Moombas
    • 14. Juni 2023 um 13:34

    Warum so kompliziert?

    Also am einfachsten wäre, du hast eine GUI mit nur einem Input, wo du "reinscannst", davon abhängig läuft dann der Rest.

    Würde da etwas dagegen sprechen?

  • tabellarische Reporte oder Berichte aus Autoit

    • Moombas
    • 14. Juni 2023 um 11:40

    Ich habe das Tabellenformat in der *.dat nochmal an das angepasst, was du gepostet hast, er nimmt den Titel nun aus dem Dateinamen anstatt der Tabelle (passt sonst nicht) und ein erster Entwurf für die PDF-Erstellung ist drin, müsstest du Testen.

    Was noch fehlen würde wäre:

    - Prüfung ob alles auf eine Seite passt und ggf. nächste Seite erzeugen.

    - Anpassung der Schrift (aktuell sehen die Tabelleneinträge aus wie bold und die Überschrift nicht, irgendwie falsch herum, hab aber da die Lösung nicht gefunden)

    - Kopfzeile und Fußzeile (das sollte relativ einfach machbar sein)

    AutoIt
    Opt('MustDeclareVars', 1)
    #cs ----------------------------------------------------------------------------
    
        AutoIt Version: 3.3.16.0
        Author:         Moombas
    
        Script Function:
    Get data from a csv (*.dat) file put it into a Listview and save it as PDF
    ToDo:
    - Prüfung ob alles auf eine Seite passt und ggf. nächste Seite erzeugen.
    - Anpassung der Schrift
    - Kopfzeile und Fußzeile
    
    #ce ----------------------------------------------------------------------------
    #AutoIt3Wrapper_Au3Check_Parameters=-q -d -w 1 -w 2 -w 3 -w 4 -w 5 -w 6 -w 7
    
    #include <Array.au3>
    #include <AutoItConstants.au3>
    #include <File.au3>
    #include <FileConstants.au3>
    #include <GUIConstantsEx.au3>
    #include <GuiListView.au3>
    #include <ListViewConstants.au3>
    #include <MsgBoxConstants.au3>
    #include "MPDF_UDF.au3"
    
    ;GUI
    Global $fMain, $lvData, $eComment, $bSave, $bClose, $bReset, $bNext, $iTableHigh
    Global Const $iMainWidth  = 1024
    Global Const $iMainHeight = 768
    Global Const $iCommHeight = 200
    Global Const $iBtnHeight  = 40
    Global Const $iBtnWidth   = 100
    Global Const $iBorder     = 5
    
    ;Variables
    Global $File, $FileName
    Global $bSaved = False
    Global Const $sInputFolder  = @ScriptDir & '\In\'
    Global Const $sOutputFolder = @ScriptDir & '\Out\'
    Global Const $sBackupFolder = @ScriptDir & '\Backup\'
    
        $FileName = FileFindNextFile(FileFindFirstFile($sInputFolder & '*.dat'))
        _FileReadToArray($sInputFolder & $FileName, $File, $FRTA_NOCOUNT, ';')
        If not IsArray($File) then
            MsgBox($MB_OK+$MB_ICONERROR, 'Fehler', 'Keine Datei gefunden.')
            Exit
        Else
            _GenerateGUI($File)
        EndIf
    
        While 1
            Switch GUIGetMsg()
                Case $GUI_EVENT_CLOSE
                    ExitLoop
                Case $bReset
                    _FileReadToArray($sInputFolder & $FileName, $File, $FRTA_NOCOUNT, ';')
                    _CreateListView($File)
                Case $bNext
                    _NextFile()
                Case $bSave
                    _DataToPDF()
                    _NextFile()
                Case $bClose
                    _Exit()
            EndSwitch
    ;~          sleep(100)
        WEnd
    
    
    Func _GenerateGUI($aFile)
    Local Const $sTitle = Stringsplit($FileName, '.')[1]
        $fMain    = GUICreate($sTitle, $iMainWidth, $iMainHeight)
    
        _CreateListView($aFile)
    
        $eComment = GUICtrlCreateEdit('Insert comments here', $iBorder, $iMainHeight-(2*$iBorder)-$iCommHeight-$iBtnHeight, $iMainWidth-(2*$iBorder), $iCommHeight)
        $bReset   = GUICtrlCreateButton('Reset'    , $iBorder                                   , $iMainHeight-$iBorder-$iBtnHeight, $iBtnWidth, $iBtnHeight)
        $bNext    = GUICtrlCreateButton('Nächste'  , (2*$iBorder)+$iBtnWidth                    , $iMainHeight-$iBorder-$iBtnHeight, $iBtnWidth, $iBtnHeight)
        $bSave    = GUICtrlCreateButton('Speichern', ($iMainWidth/2)-($iBtnWidth/2)-(2*$iBorder), $iMainHeight-$iBorder-$iBtnHeight, $iBtnWidth, $iBtnHeight)
        $bClose   = GUICtrlCreateButton('Beenden'  , $iMainWidth-$iBorder-$iBtnWidth            , $iMainHeight-$iBorder-$iBtnHeight, $iBtnWidth, $iBtnHeight)
        GUISetState(@SW_HIDE, $bNext)
    
        GUISetState(@SW_SHOW, $fMain)
    EndFunc
    
    Func _NextFile();Nimmt aktuell nur die erste gefundene Datei, Anpassungen notwendig, sofern durchgeklickt werden soll. Nach dem Speichern, wird hiermit die nächste Datei aufgerufen
        If not $bSaved then
            If MsgBox($MB_YESNO, 'Beenden ohne zu Speichern?', 'Wollen sie das Programm beenden ohne zu speichern?' & @CRLF & _
                                                               'Mögliche Änderungen gehen sonst verloren.') = $IDYES Then Return
        EndIf
    
        $FileName = FileFindNextFile(FileFindFirstFile($sInputFolder & '*.dat'))
        _FileReadToArray($sInputFolder & $FileName, $File, $FRTA_NOCOUNT, ';'); Kann gegen eine Funktion ausgetauscht werden um z.B. alle *.? Dateien in einem "Inputordner" o.ä. zu verarbeiten.
        If not IsArray($File) then
            MsgBox($MB_OK+$MB_ICONERROR, 'Fehler', 'Keine weitere Datei gefunden.')
            Exit
        Else
            _CreateListView($File)
        EndIf
    EndFunc
    
    Func _CreateListView($aFile)
    Local Const $iRows  = Ubound($aFile, $UBOUND_Rows)-1
    Local Const $iCols  = Ubound($aFile, $UBOUND_COLUMNS)-1
    Local Const $sTitle = Stringsplit($FileName, '.')[1]
    
        WinSetTitle($fMain, '', $sTitle)
        _GUICtrlListView_Destroy($lvData)
    
        $lvData   = GUICtrlCreateListView("", $iBorder, $iBorder, $iMainWidth-(2*$iBorder), $iMainHeight-(4*$iBorder)-$iCommHeight-$iBtnHeight, $LVS_NOCOLUMNHEADER)
        _GUICtrlListView_SetExtendedListViewStyle($lvData, BitOR($LVS_EX_FULLROWSELECT, $LVS_EX_GRIDLINES))
    
        For $iCol = 0 To $iCols
            _GUICtrlListView_AddColumn($lvData, $aFile[0][$iCol], 150)
        Next
        For $iRow = 0 To $iRows
            _GUICtrlListView_AddItem($lvData, $aFile[$iRow][0], $iRow)
            For $iCol = 1 to $iCols
                _GUICtrlListView_AddSubItem($lvData, $iRow, $aFile[$iRow][$iCol], $iCol)
            Next
        Next
        GUICtrlSetData($eComment, 'Insert comments here')
        $bSaved = False
    Endfunc
    
    Func _DataToPDF()
    Local $aData = _GUICtrlListView_CreateArray($lvData)
    Local Const $sTitle  = Stringsplit($FileName, '.')[1]
    Local Const $iBorder = 2
    Local Const $bTest   = True
    Local Const $iRows   = Ubound($aData, $UBOUND_Rows)-1
    Local Const $iCols   = Ubound($aData, $UBOUND_COLUMNS)-1
        _ArrayDelete($aData, 0)
        ;PDF Code comes here
    
        ;set the properties for the pdf
        _SetTitle($sTitle)
        _SetSubject('')
        _SetKeywords("pdf, data, sqllite")
        _OpenAfter($bTest);open after generation
        _SetUnit($PDF_UNIT_CM)
        _SetPaperSize("CUSTOM",841.890, 595.276); A4 landscape
        _SetZoomMode($PDF_ZOOM_FULLPAGE)
        _SetOrientation($PDF_ORIENTATION_LANDSCAPE)
        _SetLayoutMode($PDF_LAYOUT_CONTINOUS)
    
        ;initialize the pdf
        _InitPDF($sOutputFolder & WinGetTitle($fMain) & '_' & Stringsplit($FileName, '.')[1] & '.pdf')
    
        ;=== load used font(s) ===
        ;fonts: Garamond
        _LoadFontTT("_CalibriB", $PDF_FONT_CALIBRI, $PDF_FONT_BOLD)
        _LoadFontTT("_CalibriI", $PDF_FONT_CALIBRI, $PDF_FONT_ITALIC)
        _LoadFontTT("_Calibri" , $PDF_FONT_CALIBRI)
    
        ;begin page
        _BeginPage()
            _InsertTable($aData, $iBorder, _GetPageHeight()/_GetUnit()-2-(0.8*$iRows) , 0, 0.8*$iRows, $iCols, $iRows)
            _SetTextRenderingMode(1)
            _InsertRenderedText((_GetPageWidth()/_GetUnit())/2, _GetPageHeight()/_GetUnit()-1.5                   , $sTitle               , "_Calibri", 16, 100, $PDF_ALIGN_CENTER, 0x000000, 0x000000)
            _InsertRenderedText($iBorder                      , _GetPageHeight()/_GetUnit()-$iTableHigh-$iBorder-1, GUICtrlRead($eComment), '_Calibri', 12, 100, $PDF_ALIGN_LEFT  , 0x000000, 0x000000)
            _SetTextRenderingMode(0)
        _EndPage()
    
        ;write the buffer to disk
        _ClosePDFFile()
    
        ;When ready
    ;~     FileMove($sInputFolder & $FileName, $sBackupFolder & WinGetTitle($fMain) & '_' & $FileName, $FC_OVERWRITE + $FC_CREATEPATH)
        $bSaved = True
    EndFunc
    
    Func _Exit()
        If $bSaved then
            Exit
        Else
            If MsgBox($MB_YESNO, 'Beenden ohne zu Speichern?', 'Wollen sie das Programm beenden ohne zu speichern?' & @CRLF & _
                                                               'Mögliche Änderungen gehen sonst verloren.') = $IDYES Then Exit
        EndIf
    EndFunc
    
    Func _InsertTable($aData, $iX, $iY, $iW = 0, $iH = 0, $iCols = 0, $iRows = 0, $lTxtColor = 0x000000, $lBorderColor = 0xdddddd)
    Local $lScale, $sLength, $sText, $iColW, $iRowH, $lRGB = 0xffffff
    Local $iPgW = Round(_GetPageWidth()  / _GetUnit(), 1)
    Local $iPgH = Round(_GetPageHeight() /_GetUnit() , 1)
        If $iW = 0 Then $iW = $iPgW - $iX - 2
        If $iH = 0 Then $iH = $iPgH - $iY - 2
        $iTableHigh = $iH
        _SetColourStroke($lBorderColor)
        _Draw_Rectangle($iX, $iY, $iW, $iH, $PDF_STYLE_STROKED, 0, 0xffffff, 0.01)
        _SetColourStroke(0)
        $iColW = $iW / $iCols
        $iRowH = $iH / $iRows
        For $i = 0 To $iRows - 1
            For $j = 0 To $iCols - 1
    ;~             If $i = 0 Then
    ;~                 $lRGB = 0xfefefe
    ;~             Else
    ;~                 $lRGB = 0xefefef
    ;~             EndIf
                _SetColourStroke($lBorderColor)
                _Draw_Rectangle($iX + $j * $iColW, $iY + $iH - ($i + 1) * $iRowH, $iColW, $iRowH, $PDF_STYLE_STROKED, 0, $lRGB, 0.01)
                _SetColourStroke(0)
    
                $sText   = $aData[$i][$j]
                If $sText = '' then $sText = ' '
                $sLength = Round(_GetTextLength($sText, "_Calibri", 8), 1)
                $lScale  = Ceiling(0.75 * $iColW * 100 / $sLength)
    
                _SetColourFill($lTxtColor)
                _SetTextHorizontalScaling($lScale)
                _DrawText($iX + $j * $iColW + $iColW / 10, $iY + $iH - ($i + 1) * $iRowH + ($iRowH - 10 / _GetUnit()) / 2, $sText, "_Calibri", 8, $PDF_ALIGN_LEFT, 0)
                _SetTextHorizontalScaling(100)
                _SetColourFill(0)
            Next
        Next
    EndFunc   ;==>_InsertTable
    
    ; #FUNCTION# ====================================================================================================================
    ; Name ..........: _GUICtrlListView_CreateArray
    ; Description ...: Creates a 2-dimensional array from a listview.
    ; Syntax ........: _GUICtrlListView_CreateArray($hListView[, $sDelimeter = '|'])
    ; Parameters ....: $hListView           - Control ID/Handle to the control
    ;                  $sDelimeter          - [optional] One or more characters to use as delimiters (case sensitive). Default is '|'.
    ; Return values .: Success - The array returned is two-dimensional and is made up of the following:
    ;                                $aArray[0][0] = Number of rows
    ;                                $aArray[0][1] = Number of columns
    ;                                $aArray[0][2] = Delimited string of the column name(s) e.g. Column 1|Column 2|Column 3|Column nth
    
    ;                                $aArray[1][0] = 1st row, 1st column
    ;                                $aArray[1][1] = 1st row, 2nd column
    ;                                $aArray[1][2] = 1st row, 3rd column
    ;                                $aArray[n][0] = nth row, 1st column
    ;                                $aArray[n][1] = nth row, 2nd column
    ;                                $aArray[n][2] = nth row, 3rd column
    ; Author ........: guinness
    ; Remarks .......: GUICtrlListView.au3 should be included.
    ; Example .......: Yes
    ; ===============================================================================================================================
    Func _GUICtrlListView_CreateArray($hListView, $sDelimeter = '|')
        Local $iColumnCount = _GUICtrlListView_GetColumnCount($hListView), $iDim = 0, $iItemCount = _GUICtrlListView_GetItemCount($hListView)
        If $iColumnCount < 3 Then
            $iDim = 3 - $iColumnCount
        EndIf
        If $sDelimeter = Default Then
            $sDelimeter = '|'
        EndIf
    
        Local $aColumns = 0, $aReturn[$iItemCount + 1][$iColumnCount + $iDim] = [[$iItemCount, $iColumnCount, '']]
        For $i = 0 To $iColumnCount - 1
            $aColumns = _GUICtrlListView_GetColumn($hListView, $i)
            $aReturn[0][2] &= $aColumns[5] & $sDelimeter
        Next
        $aReturn[0][2] = StringTrimRight($aReturn[0][2], StringLen($sDelimeter))
    
        For $i = 0 To $iItemCount - 1
            For $j = 0 To $iColumnCount - 1
                $aReturn[$i + 1][$j] = _GUICtrlListView_GetItemText($hListView, $i, $j)
            Next
        Next
        Return SetError(Number($aReturn[0][0] = 0), 0, $aReturn)
    EndFunc   ;==>_GUICtrlListView_CreateArray
    Alles anzeigen
  • VBA-Code übersetzen

    • Moombas
    • 14. Juni 2023 um 08:06

    Die Funktion (auch wen sie vom Namen nicht 100% passt) könnte von der Crypt.au3 stammen (im Anhang).

    AutoIt3/Include/Crypt.au3 at master · dbkaynor/AutoIt3
    Various AutoIt3 programs. Contribute to dbkaynor/AutoIt3 development by creating an account on GitHub.
    github.com

    Hier ein kleines Minisample:

    AutoIt
    Opt('MustDeclareVars', 1)
    #include <Crypt.au3>
    
    Global $sEncryptedData, $sDecryptedData
    Global Const $sPassword = 'EncryptionPassword'
    Global Const $vCryptKey = _Crypt_DeriveKey(StringToBinary($sPassword), $CALG_AES_256)
    
    $sEncryptedData = StringTrimLeft(_Crypt_EncryptData('DataToEncrypt', $vCryptKey, $CALG_USERKEY), 2) ;StringTrim to remove 0x as indicator for Hex
    Consolewrite($sEncryptedData & @CRLF)
    $sDecryptedData = BinaryToString(_Crypt_DecryptData('0x' & $sEncryptedData, $vCryptKey, $CALG_USERKEY)) ;"'0x' & " only needed if 0x was previously removed
    Consolewrite($sDecryptedData & @CRLF)
    Alles anzeigen

    Dateien

    Crypt.au3 27,26 kB – 210 Downloads
  • Timer Sonstiges

    • Moombas
    • 13. Juni 2023 um 12:36

    Ah ok, dann war ich da falsch beim Zusammensetzen.

    Noch ein Grund für:

    Zitat

    Auch verwende lieber Bitor() um die Flags zu setzen, dann weiß man später noch, was du da gesetzt hast, mit dem puren Hex-Wert kann später keiner mehr was anfangen bzw. muss sich das mühsam zusammen suchen.

  • tabellarische Reporte oder Berichte aus Autoit

    • Moombas
    • 13. Juni 2023 um 11:08

    Im Anhang nur mal ein Sample (noch ohne die Konvertierung Array>PDF + Kommentarfeld).

    Sicherlich noch einige andere Anpassungen notwendig aber ich denke manchmal ist es einfacher einfach mal einen Ausgangspunkt, der nicht nur aus Text besteht, zu haben.

    Hier der Code (die GUI sollte sich dynamisch anpassen wenn man die jeweiligen Konstanen ändert für die jeweiligen Bedürfnisse):

    AutoIt
    Opt('MustDeclareVars', 1)
    #cs ----------------------------------------------------------------------------
    
        AutoIt Version: 3.3.16.0
        Author:         Moombas
    
        Script Function:
    Get data from a csv (*.dat) file put it into a Listview and save it as PDF
    ToDo:
    - Convert from Array to PDF as table and insert comment text
    
    #ce ----------------------------------------------------------------------------
    #AutoIt3Wrapper_Au3Check_Parameters=-q -d -w 1 -w 2 -w 3 -w 4 -w 5 -w 6 -w 7
    
    #include <Array.au3>
    #include <AutoItConstants.au3>
    #include <File.au3>
    #include <FileConstants.au3>
    #include <GUIConstantsEx.au3>
    #include <GuiListView.au3>
    #include <ListViewConstants.au3>
    #include <MsgBoxConstants.au3>
    
    ;GUI
    Global $fMain, $lvData, $eComment, $bSave, $bClose, $bReset, $bNext
    Global Const $iMainWidth  = 1024
    Global Const $iMainHeight = 768
    Global Const $iCommHeight = 200
    Global Const $iBtnHeight  = 40
    Global Const $iBtnWidth   = 100
    Global Const $iBorder     = 5
    
    ;Variables
    Global $File, $FileName
    Global $bSaved = False
    Global Const $sInputFolder  = @ScriptDir & '\In\'
    Global Const $sOutputFolder = @ScriptDir & '\Out\'
    Global Const $sBackupFolder = @ScriptDir & '\Backup\'
    
        $FileName = FileFindNextFile(FileFindFirstFile($sInputFolder & '*.dat'))
        _FileReadToArray($sInputFolder & $FileName, $File, $FRTA_NOCOUNT, ';')
        If not IsArray($File) then
            MsgBox($MB_OK+$MB_ICONERROR, 'Fehler', 'Keine Datei gefunden.')
            Exit
        Else
            _GenerateGUI($File)
        EndIf
    
        While 1
            Switch GUIGetMsg()
                Case $GUI_EVENT_CLOSE
                    ExitLoop
                Case $bReset
                    _CreateListView($File)
                Case $bNext
                    _NextFile()
                Case $bSave
                    _DataToPDF()
                    _NextFile()
                Case $bClose
                    _Exit()
            EndSwitch
    ;~          sleep(100)
        WEnd
    
    
    Func _GenerateGUI($aFile)
    Local Const $sTitle         = $aFile[0][0]
        $fMain    = GUICreate($sTitle, $iMainWidth, $iMainHeight)
    
        _CreateListView($aFile)
    
        $eComment = GUICtrlCreateEdit('Insert comments here', $iBorder, $iMainHeight-(2*$iBorder)-$iCommHeight-$iBtnHeight, $iMainWidth-(2*$iBorder), $iCommHeight)
        $bReset   = GUICtrlCreateButton('Reset'    , $iBorder                                   , $iMainHeight-$iBorder-$iBtnHeight, $iBtnWidth, $iBtnHeight)
        $bNext    = GUICtrlCreateButton('Nächste'  , (2*$iBorder)+$iBtnWidth                    , $iMainHeight-$iBorder-$iBtnHeight, $iBtnWidth, $iBtnHeight)
        $bSave    = GUICtrlCreateButton('Speichern', ($iMainWidth/2)-($iBtnWidth/2)-(2*$iBorder), $iMainHeight-$iBorder-$iBtnHeight, $iBtnWidth, $iBtnHeight)
        $bClose   = GUICtrlCreateButton('Beenden'  , $iMainWidth-$iBorder-$iBtnWidth            , $iMainHeight-$iBorder-$iBtnHeight, $iBtnWidth, $iBtnHeight)
        GUISetState(@SW_HIDE, $bNext)
    
        GUISetState(@SW_SHOW, $fMain)
    EndFunc
    
    Func _NextFile();Nimmt aktuell nur die erste gefundene Datei, Anpassungen notwendig, sofern durchgeklickt werden soll. Nach dem Speichern, wird hiermit die nächste Datei aufgerufen
        If not $bSaved then
            If MsgBox($MB_YESNO, 'Beenden ohne zu Speichern?', 'Wollen sie das Programm beenden ohne zu speichern?' & @CRLF & _
                                                               'Mögliche Änderungen gehen sonst verloren.') = $IDYES Then Return
        EndIf
    
        $FileName = FileFindNextFile(FileFindFirstFile($sInputFolder & '*.dat'))
        _FileReadToArray($sInputFolder & $FileName, $File, $FRTA_NOCOUNT, ';'); Kann gegen eine Funktion ausgetauscht werden um z.B. alle *.? Dateien in einem "Inputordner" o.ä. zu verarbeiten.
        If not IsArray($File) then
            MsgBox($MB_OK+$MB_ICONERROR, 'Fehler', 'Keine weitere Datei gefunden.')
            Exit
        Else
            _CreateListView($File)
        EndIf
    EndFunc
    
    Func _CreateListView($aFile)
    Local Const $iRows  = Ubound($aFile, $UBOUND_Rows)-1
    Local Const $iCols  = Ubound($aFile, $UBOUND_COLUMNS)-1
    Local Const $sTitle = $aFile[0][0]
        $aFile[0][0] = ''
    
        WinSetTitle($fMain, '', $sTitle)
        _GUICtrlListView_Destroy($lvData)
    
        $lvData   = GUICtrlCreateListView("", $iBorder, $iBorder, $iMainWidth-(2*$iBorder), $iMainHeight-(4*$iBorder)-$iCommHeight-$iBtnHeight, $LVS_NOCOLUMNHEADER)
        _GUICtrlListView_SetExtendedListViewStyle($lvData, BitOR($LVS_EX_FULLROWSELECT, $LVS_EX_GRIDLINES))
    
        For $iCol = 0 To $iCols
            _GUICtrlListView_AddColumn($lvData, $aFile[0][$iCol], 150)
        Next
        For $iRow = 0 To $iRows
            _GUICtrlListView_AddItem($lvData, $aFile[$iRow][0], $iRow)
            For $iCol = 1 to $iCols
                _GUICtrlListView_AddSubItem($lvData, $iRow, $aFile[$iRow][$iCol], $iCol)
            Next
        Next
        GUICtrlSetData($eComment, 'Insert comments here')
        $bSaved = False
    Endfunc
    
    Func _DataToPDF()
    Local $aData = _GUICtrlListView_CreateArray($lvData)
        _ArrayDelete($aData, 0)
        ;PDF Code comes here
    
        ;When ready
        FileMove($sInputFolder & $FileName, $sBackupFolder & WinGetTitle($fMain) & '_' & $FileName, $FC_OVERWRITE + $FC_CREATEPATH)
        $bSaved = True
    EndFunc
    
    Func _Exit()
        If $bSaved then
            Exit
        Else
            If MsgBox($MB_YESNO, 'Beenden ohne zu Speichern?', 'Wollen sie das Programm beenden ohne zu speichern?' & @CRLF & _
                                                               'Mögliche Änderungen gehen sonst verloren.') = $IDYES Then Exit
        EndIf
    EndFunc
    
    ; #FUNCTION# ====================================================================================================================
    ; Name ..........: _GUICtrlListView_CreateArray
    ; Description ...: Creates a 2-dimensional array from a listview.
    ; Syntax ........: _GUICtrlListView_CreateArray($hListView[, $sDelimeter = '|'])
    ; Parameters ....: $hListView           - Control ID/Handle to the control
    ;                  $sDelimeter          - [optional] One or more characters to use as delimiters (case sensitive). Default is '|'.
    ; Return values .: Success - The array returned is two-dimensional and is made up of the following:
    ;                                $aArray[0][0] = Number of rows
    ;                                $aArray[0][1] = Number of columns
    ;                                $aArray[0][2] = Delimited string of the column name(s) e.g. Column 1|Column 2|Column 3|Column nth
    
    ;                                $aArray[1][0] = 1st row, 1st column
    ;                                $aArray[1][1] = 1st row, 2nd column
    ;                                $aArray[1][2] = 1st row, 3rd column
    ;                                $aArray[n][0] = nth row, 1st column
    ;                                $aArray[n][1] = nth row, 2nd column
    ;                                $aArray[n][2] = nth row, 3rd column
    ; Author ........: guinness
    ; Remarks .......: GUICtrlListView.au3 should be included.
    ; Example .......: Yes
    ; ===============================================================================================================================
    Func _GUICtrlListView_CreateArray($hListView, $sDelimeter = '|')
        Local $iColumnCount = _GUICtrlListView_GetColumnCount($hListView), $iDim = 0, $iItemCount = _GUICtrlListView_GetItemCount($hListView)
        If $iColumnCount < 3 Then
            $iDim = 3 - $iColumnCount
        EndIf
        If $sDelimeter = Default Then
            $sDelimeter = '|'
        EndIf
    
        Local $aColumns = 0, $aReturn[$iItemCount + 1][$iColumnCount + $iDim] = [[$iItemCount, $iColumnCount, '']]
        For $i = 0 To $iColumnCount - 1
            $aColumns = _GUICtrlListView_GetColumn($hListView, $i)
            $aReturn[0][2] &= $aColumns[5] & $sDelimeter
        Next
        $aReturn[0][2] = StringTrimRight($aReturn[0][2], StringLen($sDelimeter))
    
        For $i = 0 To $iItemCount - 1
            For $j = 0 To $iColumnCount - 1
                $aReturn[$i + 1][$j] = _GUICtrlListView_GetItemText($hListView, $i, $j)
            Next
        Next
        Return SetError(Number($aReturn[0][0] = 0), 0, $aReturn)
    EndFunc   ;==>_GUICtrlListView_CreateArray
    Alles anzeigen

    Dateien

    DataToPDF.zip 3,69 kB – 302 Downloads
  • tabellarische Reporte oder Berichte aus Autoit

    • Moombas
    • 13. Juni 2023 um 10:33

    Wenn jemand den PDF-Part übernehmen kann, könnte ich evtl. den Rest als Entwurf zur Verfügung stellen.

    Ich habe bisher keine Tabellen, sondern nur reine txt-Dateien in PDF umgewandelt (TxTtoPDF.au3).

  • Timer Sonstiges

    • Moombas
    • 13. Juni 2023 um 07:56

    Ich empfehle dir halt Dringend Variablen so wenig wie möglichGlobal zu definieren und (wenn nicht nötig) kein Call für den Aufruf einer Funktion zu benutzen.

    Auch verwende lieber Bitor() um die Flags zu setzen, dann weiß man später noch, was du da gesetzt hast, mit dem puren Hex-Wert kann später keiner mehr was anfangen bzw. muss sich das mühsam zusammen suchen.

    Und das was ich in meinem Code hier gemacht habe (über Kommentare bei den globalen Variablen) kannst du diese dort dennoch "Gruppieren" und weißt somit wozu du diese brauchst.

    Der Trick für den Hotkey isst ja eigentlich nur, das dieser einen manuellen Click auf den Button simuliert, sprich: Wichti war nur das der Button an sich funktioniert.

    Ich hoffe du hast den Code auch verstanden den ich da zusammen gezimmert hat (mit Sicherheit noch weiter optimierbar aber dafür würde das restliche Skript evtl. fehlen bzw. ich wollte es dann nicht zu sehr von deinem ursprünglichen Code bringen).

  • Timer Sonstiges

    • Moombas
    • 12. Juni 2023 um 14:50

    Hier die leicht abgeänderte Version (jetzt funktioniert auch das F7):

    (Dein Style macht irgendwie keinen Sinn (es gibt kein Flag, das 0x00C80000 enthält), daher hab ich es mal geändert)

    AutoIt
    Opt('MustDeclareVars', 1)
    #include <GUIConstantsEx.au3>
    #include <WindowsConstants.au3>
    
    ;GUI
    Global $Aufnahme, $go, $input[4]
    
    ;Globale Variablen
    Global Const $ini = 'anyinifile.ini' ;trag hier die Inifile ein für deinen Timer
    
    HotKeySet("{F7}", "PressTimerButton")
    
    _CreateTimerGUI() ;Beispielfunktion um die GUI zu erstellen, nur deinen geposteten Part gesetzt, nicht den Rest der noch erforderlich wäre!
    Jump1()
    
    Func _CreateTimerGUI()
    Local $name[4]=[3, 'Stunden','Minuten','Sekunden']
        $input[0] = $name[0]
    
        $Aufnahme = GUICreate('Aufnahme1', 370, 70, Default, Default, BitOR($WS_VISIBLE, $WS_OVERLAPPEDWINDOW)) ;vorher:0x10C80000 = 0x10CF0000?
    
        For $i=1 To $name[0]
            GUICtrlCreateGroup($name[$i], (5+70)*$i,  5, 70, 40, Default)
            $input[$i] = GUICtrlCreateInput('', (7+70)*$i, 20, 60, 20, 1)
        Next
    
        $go = GUICtrlCreateButton('Start', 75, 45, 220, 20)
    EndFunc
    
    Func Jump1()
    Local $end, $timer
    Local $running = False
    Local $Button[2]=['Start','Stop']
        GUICtrlSetData($go, $button[$running])
        GUISetState(@SW_SHOW, $Aufnahme)
    
        ;Achtung: Sektion angepasst, da alle Timerwerte in einer Sektion platz finden
        GUICtrlSetData($input[1], IniRead($ini, "Timer","Stunden" , 0)) ;ggf. den Defaultwert (0) (wenn die Ini nicht gefunden/gelesen werden kann) ändern
        GUICtrlSetData($input[2], IniRead($ini, "Timer","Minuten" , 0)) ;ggf. den Defaultwert (0) (wenn die Ini nicht gefunden/gelesen werden kann) ändern
        GUICtrlSetData($input[3], IniRead($ini, "Timer","Sekunden", 2)) ;ggf. den Defaultwert (2) (wenn die Ini nicht gefunden/gelesen werden kann) ändern
    
        While 1
            If $running And TimerDiff($timer)>=$end Then
                $running = False
                GUICtrlSetData($go, $button[$running])
                MsgBox ("", "Test", "Timer abgelaufen", "")
            EndIf
    
            Switch GUIGetMsg()
                Case $GUI_EVENT_CLOSE
    ;~                 GUISetState(@SW_HIDE, $Aufnahme)
    ;~                 MainMenu()
                    ExitLoop
                Case $go
                    If $running = False Then
                        $running = True
                        GUICtrlSetData($go, $button[$running])
                        $end = Convert($input)
                        $timer = TimerInit()
                    Else ;
                        $running = False
                        GUICtrlSetData($go, $button[$running])
                    EndIf
            EndSwitch
            sleep(100)
        WEnd
        GUISetState(@SW_HIDE, $Aufnahme)
    EndFunc
    
    Func PressTimerButton()
        ControlClick('', '', $go)
    EndFunc
    
    Func Convert($array)
        Return 1000*(60*(60*(GUICtrlRead($array[1]))+GUICtrlRead($array[2]))+GUICtrlRead($array[3]))
    EndFunc
    Alles anzeigen
  • Timer Sonstiges

    • Moombas
    • 12. Juni 2023 um 14:29

    F7 habe ich vergessen zu testen, sorry :(

  • Timer Sonstiges

    • Moombas
    • 12. Juni 2023 um 12:54

    Ich hab das ganze mal ein wenig überarbeitet und mein test war Erfolgreich:

    AutoIt
    Opt('MustDeclareVars', 1)
    #include <GUIConstantsEx.au3>
    
    ;GUI
    Global $Aufnahme, $go, $input[4]
    
    ;Globale Variablen
    Global Const $ini = 'anyinifile.ini' ;trag hier die Inifile ein für deinen Timer
    
    HotKeySet ("{F7}", "Jump1")
    
    _CreateTimerGUI() ;Beispielfunktion um die GUI zu erstellen, nur deinen geposteten Part gesetzt, nicht den Rest der noch erforderlich wäre!
    Jump1()
    ;~ MainMenu()
    
    Func _CreateTimerGUI()
    Local $name[4]=[3, 'Stunden','Minuten','Sekunden']
        $input[0] = $name[0]
    
        $Aufnahme = GUICreate('Aufnahme1', 370, 70, Default, Default, 0x10C80000)
        For $i=1 To $name[0]
            GUICtrlCreateGroup($name[$i], (5+70)*$i,  5, 70, 40, Default)
            $input[$i] = GUICtrlCreateInput('', (7+70)*$i, 20, 60, 20, 1)
        Next
        $go = GUICtrlCreateButton('Start', 75, 45, 220, 20)
    EndFunc
    
    Func Jump1()
    Local $end, $timer
    Local $running = False
    Local $Button[2]=['Start','Stop']
        GUISetState(@SW_SHOW, $Aufnahme)
    
        ;Achtung: Sektion angepasst, da alle Timerwerte in einer Sektion platz finden
        GUICtrlSetData($input[1], IniRead($ini, "Timer","Stunden" , 0)) ;ggf. den Defaultwert (0) (wenn die Ini nicht gefunden/gelesen werden kann) ändern
        GUICtrlSetData($input[2], IniRead($ini, "Timer","Minuten" , 0)) ;ggf. den Defaultwert (0) (wenn die Ini nicht gefunden/gelesen werden kann) ändern
        GUICtrlSetData($input[3], IniRead($ini, "Timer","Sekunden", 2)) ;ggf. den Defaultwert (2) (wenn die Ini nicht gefunden/gelesen werden kann) ändern
    
        While 100
            If $running And TimerDiff($timer)>=$end Then
                $running = False
                GUICtrlSetData($go, $button[$running])
                MsgBox ("", "Test", "Timer abgelaufen", "")
            EndIf
    
            Switch GUIGetMsg()
                Case $GUI_EVENT_CLOSE
                    GUISetState(@SW_HIDE, $Aufnahme)
                    ExitLoop
                Case $go
                    If $running = False Then
                        $running = True
                        GUICtrlSetData($go, $button[$running])
                        $end = Convert($input)
                        $timer = TimerInit()
                    Else ;
                        $running = False
                        GUICtrlSetData($go, $button[$running])
                    EndIf
            EndSwitch
        WEnd
        GUISetState(@SW_HIDE, $Aufnahme)
    EndFunc
    
    Func Convert($array)
        Return 1000*(60*(60*(GUICtrlRead($array[1]))+GUICtrlRead($array[2]))+GUICtrlRead($array[3]))
    EndFunc
    Alles anzeigen
  • Timer Sonstiges

    • Moombas
    • 12. Juni 2023 um 11:29

    Mein erster Blick:

    1. Warum rufst du Funktionen mit "Call" auf, das ist nur nötig, wenn der Funktionsname (als String) "generiert" wird.

    2. Variablen in einer Funktion sind immer Local zu definieren, brauchst du sie auch außerhalb, gehört die Definition auch nach draußen:

    3. Hotkeyset, gehört an den Anfang des Scriptes.

    4. Du erstellst jedes mal einen Button/Gruppe/inputs, wenn die Funktion "Aufnahme1 aufgerufen wird. Du solltest ihn lieber in der GUI erstellen und ausblenden und hier nur wieder einblenden!

    5. du setzt den Zähler nie runter, bedeutet mit jedem Aufruf von "Jump1" wird es 1 mehr. Damit passt deine Abfrage spätestens beim 3. mal nicht mehr (startest mit 0) wobei du die 1 aaktuell auch nicht abfragst.

  • tabellarische Reporte oder Berichte aus Autoit

    • Moombas
    • 12. Juni 2023 um 10:23

    Dann wäre es interessant wie diese csv bzw txt aufebaut sind:

    ; getrennt oder , oder ganz was anderes?

    mit " vorweg und hinten dran oder ohne?

    Die Überschrift ist in der Datei enthalten oder aus dem Dateinamen oder woanders?

    Der Text unten in der PDF soll aus einem (Freitext)Kommentarfeld kommen?

    Ich gehe davon aus, das es auch mal mehrere Seiten sein können?

  • tabellarische Reporte oder Berichte aus Autoit

    • Moombas
    • 12. Juni 2023 um 08:25

    Wäre es nicht besser am Anfang zu starten (Woher kommen die Daten? Wie sehen die Daten aus? usw.) bevor man den letzten Schritt (erstellen der PDf aus der fertigen Ansicht) macht.

    Daher nochmal BlutigerAnfänger :

    - Quelle: Woher kommen die Daten? Aus einer anderen Datei (CSV, Excel,...) oder einem Programm?

    - Das ist keinesfalls egal, Programmieren bedeutet alles zusammen zu setzen und die Daten muss man sich ja irgendwo holen.

    - Sind die Daten immer gleich aufgebaut oder kann es unterschiede geben (Spaltenüberschriften/ Spaltenanzahl)?

    - Du hast was von SQLite geschrieben. Schau mal hier:

    Externer Inhalt gist.github.com
    Inhalte von externen Seiten werden ohne deine Zustimmung nicht automatisch geladen und angezeigt.
    Durch die Aktivierung der externen Inhalte erklärst du dich damit einverstanden, dass personenbezogene Daten an Drittplattformen übermittelt werden. Mehr Informationen dazu haben wir in unserer Datenschutzerklärung zur Verfügung gestellt.

    - Darstellung: Am Besten stellst du ein Bild einer Excel die Beispielhaft zeigt wie die Daten Dargestellt werden sollen.

    - PDF: Sollen sie dort 1:1 wie im Programm dargestellt werden oder kommt hier wieder ein anderes Format zum Tragen?

    - Dazu zählt auch: Überschrift, Fußnote, welche Spalten angezeigt werden sollen etc.?

    - Hierzu gab es oben ja schon ein paar Beispiele.

    Was du wegen der Dateinamen meinst (kleiner Fonts :/), erschließt sich mir noch nicht so ganz.

  • Timer Sonstiges

    • Moombas
    • 12. Juni 2023 um 08:16

    Wie wäre es wenn du mal den ganzen relevanten Code (also setzen des Kotkeys, die Funktionen selber etc.) postest (idealerweise hier als AutoIt Code anzeigen lassen).

    Dann knnen wir viel besser schauen was du falsch machst.

    Dein Auszug oben sieht verwirrend aus.

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™