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. BugFix

Beiträge von BugFix

  • Alle Ordner in einer Inputbox anzeigen lassen

    • BugFix
    • 30. Dezember 2014 um 18:48
    Zitat von Sirius

    gerne in einer InputBox alle Ordner


    Hier mal für ein Input (sinnvoll?).

    Spoiler anzeigen
    [autoit]

    #include <File.au3>
    #include <EditConstants.au3>

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

    Global $sPath, $aFolder, $index

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

    $hGui = GUICreate('Ordner', 414, 70)
    $inRoot = GUICtrlCreateInput('', 10, 10, 350, 20)
    GUICtrlSendMsg($inRoot, 0x1501, 0, "Bitte Ordner auswählen")
    $btSelect = GUICtrlCreateButton('...', 384, 10, 20, 20)
    $inFolder = GUICtrlCreateInput('', 10, 40, 350, 20, $ES_READONLY)
    GUICtrlSetBkColor(-1, 0xFFFFFF)
    $btPrev = GUICtrlCreateButton('<', 362, 40, 20, 20)
    $btNext = GUICtrlCreateButton('>', 384, 40, 20, 20)
    ControlFocus($hGui, '', $btSelect)

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

    GUISetState()

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

    While 1
    Switch GUIGetMsg()
    Case -3
    Exit
    Case $btSelect
    $sPath = FileSelectFolder('Bitte einen Ordner auswählen', '')
    If Not @error Then _ReadFolders($sPath)
    Case $btPrev
    _ShowPrevious()
    Case $btNext
    _ShowNext()
    EndSwitch
    WEnd

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

    Func _ReadFolders($path)
    $aFolder = _FileListToArray($path, '*', 2)
    GUICtrlSetData($inRoot, $path)
    If Not IsArray($aFolder) Then
    GUICtrlSetData($inFolder, 'Keine Unterordner!')
    Return WinSetTitle($hGui, '', '[ 0 von 0 ]')
    EndIf
    $index = 1
    GUICtrlSetData($inFolder, $aFolder[$index])
    WinSetTitle($hGui, '', '[ 1 von ' & $aFolder[0] & ' ]')
    EndFunc

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

    Func _ShowPrevious()
    If $index = 1 Then Return
    $index -= 1
    GUICtrlSetData($inFolder, $aFolder[$index])
    WinSetTitle($hGui, '', '[ ' & $index & ' von ' & $aFolder[0] & ' ]')
    EndFunc

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

    Func _ShowNext()
    If $index = $aFolder[0] Then Return
    $index += 1
    GUICtrlSetData($inFolder, $aFolder[$index])
    WinSetTitle($hGui, '', '[ ' & $index & ' von ' & $aFolder[0] & ' ]')
    EndFunc

    [/autoit]


    Nun kannst du dich mal selbst an der Combo versuchen.

  • Eingabefelder per Mausklick aktivieren

    • BugFix
    • 30. Dezember 2014 um 10:46

    Hier mal aus meinem Muster-Fundus, wie man die Bewegung mit Enter zum nächsten Control auch lösen kann.

    Spoiler anzeigen
    [autoit]

    #include <GUIConstantsEx.au3>
    #include <WinAPI.au3>
    #include <WindowsConstants.au3>
    #include <StructureConstants.au3>
    #include <Array.au3>
    Opt("GUIOnEventMode", 1)
    OnAutoItExitRegister('OnAutoItExit')

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

    Global $hStub_KeyProc = DllCallbackRegister("_KeyProc", "long", "int;wparam;lparam")
    Global $hmod = _WinAPI_GetModuleHandle(0)
    Global $hHook = _WinAPI_SetWindowsHookEx($WH_KEYBOARD_LL, DllCallbackGetPtr($hStub_KeyProc), $hmod)
    Global $active = False, $gui, $ID_lastFocus = 0
    Enum $i1, $i2, $c1, $i3, $c2, $i4, $n ; <== hier die Reihenfolge, wie der Fokus 'wandern' soll ($n ist Zähler für Anz. Ctrl)
    Global $a[$n]

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

    $gui = GUICreate('')
    GUISetOnEvent(-3, '_ende')
    $a[$i1] = GUICtrlCreateInput('', 10,10,40)
    $a[$i2] = GUICtrlCreateInput('', 60,10,40)
    $a[$c1] = GUICtrlCreateCombo('', 110,10,40)
    $a[$i3] = GUICtrlCreateInput('', 160,10,40)
    $a[$c2] = GUICtrlCreateCombo('', 210,10,40)
    $a[$i4] = GUICtrlCreateInput('', 260,10,40)
    GUISetState()

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

    While 1
    If BitAND(WinGetState($gui), 8) Then
    $active = True
    Else
    $active = False
    EndIf
    Sleep(100)
    WEnd

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

    Func _ende()
    Exit
    EndFunc

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

    ;===========================================================
    ; callback function
    ;===========================================================
    Func _KeyProc($nCode, $wParam, $lParam)
    Local $tKEYHOOKS, $vkCode, $ID, $index
    $tKEYHOOKS = DllStructCreate($tagKBDLLHOOKSTRUCT, $lParam)
    If $nCode < 0 Or Not $active Then Return _WinAPI_CallNextHookEx($hHook, $nCode, $wParam, $lParam)
    $vkCode = DllStructGetData($tKEYHOOKS, "vkCode")
    If $wParam = $WM_KEYDOWN And $vkCode = 13 Then ; ENTER gedrückt
    $ID = _WinAPI_GetDlgCtrlID(ControlGetHandle($gui, '', ControlGetFocus($gui)))
    ; Für ComboBoxen kann NICHT der Fokus abgefragt werden, da dieser auf dem Input-Ctrl der ComboBox liegt.
    ; Hier muß in der Instanz-Reihenfolge mit dem Wert des letzten Ctrl verglichen werden.
    ; Die Reihenfolge der Erstellung in der GUI ist egal, da der Fokus über die enumerierte Reihenfolge der Ctrl-Variablen
    ; weitergesetzt wird.
    ; Falls eine ComboBox als letztes Ctrl in der Folge erscheint, muß dies in der Abfragelogik berücksichtigt werden.
    If _WinAPI_GetClassName($ID) <> 'Edit' Then
    ; Variante 1: über Class+Instance
    $ID = _WinAPI_GetDlgCtrlID(ControlGetHandle($gui, "", "[CLASS:ComboBox; INSTANCE:1]"))
    If $ID_lastFocus > $ID Then $ID = _WinAPI_GetDlgCtrlID(ControlGetHandle($gui, "", "[CLASS:ComboBox; INSTANCE:2]"))
    ; Variante 2: über Enumerations-Reihenfolge der ComboCtrls
    ;~ $ID = $a[$c1]
    ;~ If $ID_lastFocus > $ID Then $ID = $a[$c2]
    EndIf
    $index = _ArraySearch($a, $ID)
    If @error Then Return _WinAPI_CallNextHookEx($hHook, $nCode, $wParam, $lParam)
    If $index < UBound($a)-1 Then
    GUICtrlSetState($a[$index +1], $GUI_FOCUS)
    $ID_lastFocus = $a[$index +1]
    Else
    GUICtrlSetState($a[0], $GUI_FOCUS)
    $ID_lastFocus = $a[0]
    EndIf
    EndIf
    Return _WinAPI_CallNextHookEx($hHook, $nCode, $wParam, $lParam)
    EndFunc

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

    Func OnAutoItExit()
    _WinAPI_UnhookWindowsHookEx($hHook)
    DllCallbackFree($hStub_KeyProc)
    EndFunc

    [/autoit]
  • CSV_Objekt - UDF

    • BugFix
    • 30. Dezember 2014 um 10:05

    Natürlich läßt sich das mit den rein Array bezogenen Varianten genauso bearbeiten.
    Da ich in letzter Zeit mehr mit objektorientierten Sprachen arbeite, war dies eigentlich nur eine Spielerei. Ich persönlich mag Objektorientiertheit.
    Das eigentliche Problem ist, dass AutoIt mal überhaupt nicht für Objekte vorbereitet ist. Wenn man innerhalb von AutoItObject dann zwangsweise doch mit nativem AutoIt arbeiten muss, bleibt von der OOP oft nur Syntaxveränderung übrig. :huh:

  • CSV_Objekt - UDF

    • BugFix
    • 30. Dezember 2014 um 00:14

    Ich habe mich mal ein wenig mit dem AutoItObject beschäftigt und damit eine objektbasierte CSV-UDF erstellt.
    Aus den Funktionsbeschreibungen und dem Bsp. sind alle Hinweise zur Anwendung ersichtlich.

    CSV_Object.au3
    [autoit]

    ;-- TIME_STAMP 2014-12-29 23:20:03 v 0.1

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

    ; Requires the AutoItObject-UDF: http://www.autoitscript.com/forum/topic/11…df/#entry775262

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

    ; #CURRENT# ========================================================================================
    ; FUNCTION REGISTERED METHODE SHORT DESCRIPTION
    ; _CSVObject Creates an object from an csv file.
    ; _CSVObject_FirstLine .First Points to the first data line.
    ; _CSVObject_NextLine .Next Points to the next data line.
    ; _CSVObject_PrevLine .Previous Points to the previous data line.
    ; _CSVObject_LastLine .Last Points to the last data line.
    ; _CSVObject_SetField .SetField Sets value of one field in current data line.
    ; _CSVObject_GetDS .GetDS Gets all values from the current data line.
    ; _CSVObject_SetDS .SetDS Sets all values in the current data line.
    ; _CSVObject_FieldList .FieldList Returns a list of all field names.
    ; _CSVObject_PropertySet .PropertySet Sets one field in current data line (to use in loops).
    ; _CSVObject_FieldNamesSet .FieldNamesSet Sets new field names.
    ; _CSVObject_WriteToFile .WriteToFile Writes from object back to csv-file.
    ; ==================================================================================================

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

    #include-once
    #include "AutoitObject.au3"
    #include <Array.au3>
    #include <File.au3>

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

    Global $oError = ObjEvent("AutoIt.Error", "_ErrFunc")
    OnAutoItExitRegister ("_OnExit")

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

    _AutoItObject_StartUp()

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

    ;===================================================================================================
    ; Function Name....: _CSVObject
    ; Description......: Creates an object of a specified csv file.
    ; Parameters ......: $sFile Path to the csv file.
    ; ......optional...: $sFieldLine A string with field names. Default '' = 1st line includes the field names.
    ; .................: With 'num' will enumerated the fields, starting by 1.
    ; ......optional...: $sSeparator The field separator. Default is ';'.
    ; Return Value(s)..: Success The csv file object
    ; .................: Failure @error = 1 $sFile not exists.
    ; Author...........: BugFix
    ;===================================================================================================
    Func _CSVObject($sFile, $sFieldLine='', $sSeparator=';')
    If Not FileExists($sFile) Then Return SetError(1,0,0)
    Local $aLines
    _FileReadToArray($sFile, $aLines)
    If $sFieldLine <> '' Then
    _ArrayInsert($aLines, 1, $sFieldLine)
    $aLines[0] += 1
    EndIf
    Local $sSplit = ($sFieldLine = 'num' Or $sFieldLine = '') ? $aLines[1] : $sFieldLine
    Local $aFields = StringSplit($sSplit, $sSeparator)
    Local $aTmp[$aFields[0]+1] = [$aFields[0]] ; Array zum Speichern der Feldnamen
    Local $iMin = ($sFieldLine = 'num') ? 1 : 2

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

    Local $self = _AutoItObject_Create()
    _AutoItObject_AddMethod($self, "First", "_CSVObject_FirstLine") ; gehe zum: ersten DS
    _AutoItObject_AddMethod($self, "Next", "_CSVObject_NextLine") ; gehe zum: nächsten DS
    _AutoItObject_AddMethod($self, "Previous", "_CSVObject_PrevLine") ; gehe zum: vorigen DS
    _AutoItObject_AddMethod($self, "Last", "_CSVObject_LastLine") ; gehe zum: letzten DS
    _AutoItObject_AddMethod($self, "SetField", "_CSVObject_SetField") ; Ändert Wert eines Feldes im aktuellen DS
    _AutoItObject_AddMethod($self, "GetDS", "_CSVObject_GetDS") ; Gibt den aktuellen DS als 1D-WerteArray (Standard) od. 2D-Array ([Feldname,Wert]) zurück
    _AutoItObject_AddMethod($self, "SetDS", "_CSVObject_SetDS") ; setzt den gesamten DS neu, alle Werte werden in einem Separator-getrennten String übergeben
    _AutoItObject_AddMethod($self, "FieldList", "_CSVObject_FieldList") ; Gibt ein Array mit den Feldnamen zurück
    _AutoItObject_AddMethod($self, "PropertySet", "_CSVObject_PropertySet") ; zum dynamischen Neubefüllen der Properties
    _AutoItObject_AddMethod($self, "FieldNamesSet", "_CSVObject_FieldNamesSet") ; Feldnamen ändern oder erstmalig setzen
    _AutoItObject_AddMethod($self, "WriteToFile", "_CSVObject_WriteToFile") ; schreibt den Inhalt des Objektes in eine Datei
    _AutoItObject_AddMethod($self, "ShowDS", "__ShowDS") ; [intern] Aktualisiert Feldinhalte für den aktuellen DS im Objekt
    _AutoItObject_AddMethod($self, "Line2Array", "__LineToArray") ; [intern] Hilfsfunktion
    _AutoItObject_AddMethod($self, "Array2Line", "__ArrayToLine") ; [intern] Hilfsfunktion
    _AutoItObject_AddMethod($self, "FieldIndex", "__FieldIndex") ; [intern] Hilfsfunktion
    _AutoItObject_AddProperty($self, "FilePath", $ELSCOPE_PUBLIC, $sFile) ; Dateipfad von dem eingelesen wurde
    _AutoItObject_AddProperty($self, "ArrayLines", $ELSCOPE_PUBLIC, $aLines) ; Array mit allen Zeilen der Datei
    _AutoItObject_AddProperty($self, "Separator", $ELSCOPE_PUBLIC, $sSeparator) ; der verwendete Separator, Standard ist ';'
    _AutoItObject_AddProperty($self, "CurrentIndex", $ELSCOPE_PUBLIC, $iMin) ; Index des aktuellen DS (an Index '0' steht Anzahl)
    _AutoItObject_AddProperty($self, "MinIndex", $ELSCOPE_PRIVATE, $iMin) ; Index des ersten DS der Datei ('1' wenn kein Feldnamen-DS, sonst '2')
    _AutoItObject_AddProperty($self, "MaxIndex", $ELSCOPE_PRIVATE, $aLines[0]) ; Index des letzten DS der Datei
    _AutoItObject_AddProperty($self, "HasFieldNames", $ELSCOPE_PRIVATE, $iMin-1) ; '0' wenn keine Feldnamen vorhanden, sonst '1'
    ; Array der verwendeten Feldnamen als Property erstellen
    Local $aFirstDataLine = StringSplit($aLines[$iMin], $sSeparator)
    For $i = 1 To $aFields[0]
    If $sFieldLine = 'num' Then
    _AutoItObject_AddProperty($self, String($i), $ELSCOPE_PUBLIC, $aFirstDataLine[$i])
    $aTmp[$i] = String($i) ; Feldnummer als Feldname eintragen
    Else
    _AutoItObject_AddProperty($self, $aFields[$i], $ELSCOPE_PUBLIC, $aFirstDataLine[$i])
    $aTmp[$i] = $aFields[$i]
    EndIf
    Next
    _AutoItObject_AddProperty($self, "ArrayFields", $ELSCOPE_PRIVATE, $aTmp)

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

    Return $self
    EndFunc ;==>_CSVObject

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

    ;===================================================================================================
    ; Function Name....: _CSVObject_FirstLine
    ; Description......: Sets pointer to first data line. Sets current values to all fields.
    ; Parameter(s).....: $self The csv object.
    ; Return Value(s)..: -1 If current line is already the first, otherwise the current index.
    ; Author...........: BugFix
    ;===================================================================================================
    Func _CSVObject_FirstLine($self)
    With $self
    Local $iCurrent = .CurrentIndex
    Local $iFirst = .MinIndex
    If $iFirst = $iCurrent Then Return -1
    .CurrentIndex = $iFirst
    EndWith
    $self.ShowDS($self.ArrayLines[$self.CurrentIndex])
    Return $self.CurrentIndex
    EndFunc ;==>_CSVObject_FirstLine

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

    ;===================================================================================================
    ; Function Name....: _CSVObject_NextLine
    ; Description......: Sets pointer to next data line. Sets current values to all fields.
    ; Parameter(s).....: $self The csv object.
    ; Return Value(s)..: -1 If current line is already the last, otherwise the current index.
    ; Author...........: BugFix
    ;===================================================================================================
    Func _CSVObject_NextLine($self)
    With $self
    Local $iCurrent = .CurrentIndex
    Local $iLast = .MaxIndex
    If $iLast = $iCurrent Then Return -1
    .CurrentIndex = $iCurrent +1
    EndWith
    $self.ShowDS($self.ArrayLines[$self.CurrentIndex])
    Return $self.CurrentIndex
    EndFunc ;==>_CSVObject_NextLine

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

    ;===================================================================================================
    ; Function Name....: _CSVObject_PrevLine
    ; Description......: Sets pointer to previous data line. Sets current values to all fields.
    ; Parameter(s).....: $self The csv object.
    ; Return Value(s)..: -1 If current line is already the first, otherwise the current index.
    ; Author...........: BugFix
    ;===================================================================================================
    Func _CSVObject_PrevLine($self)
    With $self
    Local $iCurrent = .CurrentIndex
    Local $iFirst = .MinIndex
    If $iFirst = $iCurrent Then Return -1
    .CurrentIndex = $iCurrent -1
    EndWith
    $self.ShowDS($self.ArrayLines[$self.CurrentIndex])
    Return $self.CurrentIndex
    EndFunc ;==>_CSVObject_PrevLine

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

    ;===================================================================================================
    ; Function Name....: _CSVObject_LastLine
    ; Description......: Sets pointer to last data line. Sets current values to all fields.
    ; Parameter(s).....: $self The csv object.
    ; Return Value(s)..: -1 If current line is already the last, otherwise the current index.
    ; Author...........: BugFix
    ;===================================================================================================
    Func _CSVObject_LastLine($self)
    With $self
    Local $iCurrent = .CurrentIndex
    Local $iLast = .MaxIndex
    If $iLast = $iCurrent Then Return -1
    .CurrentIndex = $iLast
    EndWith
    $self.ShowDS($self.ArrayLines[$self.CurrentIndex])
    Return $self.CurrentIndex
    EndFunc ;==>_CSVObject_LastLine

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

    ;===================================================================================================
    ; Function Name....: _CSVObject_SetField
    ; Description......: Sets the value of one field in the current data set.
    ; Parameter(s).....: $self The csv object.
    ; .................: $sField The field name.
    ; .................: $value The new value.
    ; Return Value(s)..: Success 1
    ; .................: Failure @error - $sField not exists
    ; Author...........: BugFix
    ;===================================================================================================
    Func _CSVObject_SetField($self, $sField, $value)
    Local $aLines = $self.ArrayLines
    Local $aLine = $self.Line2Array($aLines[$self.CurrentIndex])
    Local $index = $self.FieldIndex($sField)
    If @error Then Return SetError(@error,0,0)
    $aLine[$index] = $value
    $aLines[$self.CurrentIndex] = $self.Array2Line($aLine)
    $self.ArrayLines = $aLines
    Return 1
    EndFunc ;==>_CSVObject_SetField

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

    ;===================================================================================================
    ; Function Name....: _CSVObject_GetDS
    ; Description......: Returns the current data set as 1D array of values or 2D array with [field name, value].
    ; Parameter(s).....: $self The csv object.
    ; .................: $ret2D Default '0' - Array of values, '1' - [field name, value]
    ; Return Value(s)..: Array with data
    ; Author...........: BugFix
    ;===================================================================================================
    Func _CSVObject_GetDS($self, $ret2D=0)
    Local $aLines = $self.ArrayLines
    Local $aLine = StringSplit($aLines[$self.CurrentIndex], $self.Separator)
    Local $aFields = $self.ArrayFields
    Local $aOut[$aFields[0]+1] = [$aFields[0]]
    If $ret2D = 1 Then
    ReDim $aOut[$aFields[0]+1][2]
    $aOut[0][0] = $aFields[0]
    EndIf
    For $i = 1 To $aFields[0]
    If $ret2D = 1 Then
    $aOut[$i][0] = $aFields[$i]
    $aOut[$i][1] = $aLine[$i]
    Else
    $aOut[$i] = $aLine[$i]
    EndIf
    Next
    Return $aOut
    EndFunc ;==>_CSVObject_GetDS

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

    ;===================================================================================================
    ; Function Name....: _CSVObject_SetDS
    ; Description......: Sets new values to the current data set.
    ; Parameter(s).....: $self The csv object.
    ; .................: $valString Separator delimited string with one value for each field.
    ; Return Value(s)..: 1
    ; Author...........: BugFix
    ;===================================================================================================
    Func _CSVObject_SetDS($self, $valString)
    Local $aLines = $self.ArrayLines
    Local $aFields = $self.ArrayFields
    Local $aLine[$aFields[0]+1] = [$aFields[0]]
    Local $aSet = StringSplit($valString, $self.Separator)
    For $i = 1 To $aFields[0]
    $aLine[$i] = $aSet[$i]
    Next
    $aLines[$self.CurrentIndex] = $self.Array2Line($aLine)
    $self.ArrayLines = $aLines
    Return 1
    EndFunc ;==>_CSVObject_SetDS

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

    ;===================================================================================================
    ; Function Name....: _CSVObject_FieldList
    ; Description......: Returns the current field list as array or string.
    ; Parameter(s).....: $self The csv object.
    ; .................: $retArr Default '1' - returns array with field names, '0' returns an separator delimited string.
    ; Return Value(s)..: The array or string with field names.
    ; Author...........: BugFix
    ;===================================================================================================
    Func _CSVObject_FieldList($self, $retArr=1)
    If $retArr = 1 Then Return $self.ArrayFields
    Local $sFields = ''
    For $i = 1 To $self.ArrayFields[0]
    $sFields &= $self.ArrayFields[$i] & $self.Separator
    Next
    Return StringTrimRight($sFields, 1)
    EndFunc ;==>_CSVObject_FieldList

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

    ;===================================================================================================
    ; Function Name....: _CSVObject_PropertySet
    ; Description......: Sets a new value to a property. To use i.e. in loops.
    ; Parameter(s).....: $self The csv object.
    ; .................: $Property The property to set.
    ; .................: $newVal The new value.
    ; Return Value(s)..: 1
    ; Author...........: BugFix
    ;===================================================================================================
    Func _CSVObject_PropertySet($self, $Property, $newVal)
    _AutoItObject_RemoveMember($self, $Property)
    _AutoItObject_AddProperty($self, $Property, $ELSCOPE_PUBLIC, $newVal)
    Return 1
    EndFunc ;==>_CSVObject_PropertySet

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

    ;===================================================================================================
    ; Function Name....: _CSVObject_FieldNamesSet
    ; Description......: Sets new field names.
    ; Parameter(s).....: $self The csv object.
    ; .................: $sFieldNames Separator delimited string with new field names.
    ; Return Value(s)..: 1
    ; Author...........: BugFix
    ;===================================================================================================
    Func _CSVObject_FieldNamesSet($self, $sFieldnames)
    Local $aTmpFields = StringSplit($sFieldnames, $self.Separator)
    Local $aCurrent = $self.GetDS(1)
    For $i = 1 To $aCurrent[0][0]
    _AutoItObject_AddProperty($self, $aTmpFields[$i], $ELSCOPE_PUBLIC, $aCurrent[$i][1])
    _AutoItObject_RemoveMember($self, $aCurrent[$i][0])
    Next
    Local $aLines = $self.ArrayLines
    If $self.HasFieldNames = 0 Then
    $aLines[0] += 1
    $self.HasFieldNames = 1
    $self.ArrayLines = $aLines
    $self.MinIndex = 2
    $self.MaxIndex += 1
    $self.CurrentIndex += 1
    _ArrayInsert($aLines, 1, $sFieldnames)
    Else
    $aLines[1] = $sFieldnames
    EndIf
    $self.ArrayLines = $aLines
    $self.ArrayFields = $aTmpFields
    Return 1
    EndFunc ;==>_CSVObject_FieldNamesSet

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

    ;===================================================================================================
    ; Function Name....: _CSVObject_WriteToFile
    ; Description......: Writes the csv object back to an file. If the file was without field names and
    ; .................: the field names was set by object - they will also written to file.
    ; .................: Exceptions are automatically generated field names in the 'num' mode.
    ; Parameter(s).....: $self The csv object.
    ; .................: $sFullPath Default '-1' - uses the path from reading, overwrites the old file.
    ; .................: $sLinebreak Default '@CRLF' - the line ending character.
    ; Return Value(s)..: 1
    ; Author...........: BugFix
    ;===================================================================================================
    Func _CSVObject_WriteToFile($self, $sFullPath=-1, $sLinebreak=@CRLF)
    If $sFullPath = -1 Or $sFullPath = Default Then $sFullPath = $self.FilePath
    If FileExists($sFullPath) Then FileDelete($sFullPath)
    Local $sWrite = ''
    For $i = $self.MinIndex-$self.HasFieldNames To $self.MaxIndex
    $sWrite &= $self.ArrayLines[$i] & $sLinebreak
    Next
    Return FileWrite($sFullPath, StringTrimRight($sWrite, StringLen($sLinebreak)))
    EndFunc ;==>_CSVObject_WriteToFile

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

    #region - internal use only

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

    Func __ShowDS($self, $sNewDataLine)
    Local $aLine = StringSplit($sNewDataLine, $self.Separator)
    For $i = 1 To $self.ArrayFields[0]
    $self.PropertySet($self.ArrayFields[$i], $aLine[$i])
    Next
    Return 1
    EndFunc ;==>__ShowDS

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

    Func __LineToArray($self, $Line)
    Return StringSplit($Line, $self.Separator)
    EndFunc ;==>__LineToArray

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

    Func __ArrayToLine($self, $Array)
    Local $line = ''
    For $i = 1 To UBound($Array) -1
    $line &= $Array[$i] & $self.Separator
    Next
    Return StringTrimRight($line, 1)
    EndFunc ;==>__ArrayToLine

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

    Func __FieldIndex($self, $Field)
    Local $index = -1
    For $i = 0 To $self.ArrayFields[0]
    If $self.ArrayFields[$i] = $Field Then
    $index = $i
    ExitLoop
    EndIf
    Next
    If $index < 0 Then Return SetError(1,0,0)
    Return $index
    EndFunc ;==>__FieldIndex

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

    Func _OnExit()
    _AutoItObject_Shutdown()
    EndFunc ;==>_OnExit

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

    Func _ErrFunc()
    ConsoleWrite("! COM Error ! Number: 0x" & Hex($oError.number, 8) & " ScriptLine: " & $oError.scriptline & " - " & $oError.windescription & @CRLF)
    Return
    EndFunc ;==>_ErrFunc

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

    #endregion

    [/autoit]
    Bsp.
    [autoit]

    ;-- TIME_STAMP 2014-12-30 00:05:57

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

    #include 'CSV_Object.au3'

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

    Global $file = "test.csv"
    Global $oCSV = _CSVObject($file)

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

    Global $aAll, $a1D, $a2D

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

    ; alle Daten anzeigen
    $aAll = $oCSV.ArrayLines
    _ArrayDisplay($aAll, 'Show All')

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

    ; Iteration
    Do
    $a2D = $oCSV.GetDS(1)
    _ArrayDisplay($a2D, 'Next - Index #' & $oCSV.CurrentIndex)
    Until $oCSV.Next = -1

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

    $oCSV.Previous
    $a1D = $oCSV.GetDS
    _ArrayDisplay($a1D, 'Previous - Index #' & $oCSV.CurrentIndex)

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

    $oCSV.First
    $a1D = $oCSV.GetDS
    _ArrayDisplay($a1D, 'First - Index #' & $oCSV.CurrentIndex)

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

    $oCSV.Last
    $a1D = $oCSV.GetDS
    _ArrayDisplay($a1D, 'Last - Index #' & $oCSV.CurrentIndex)

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

    ; Ausgabe Feldnamen
    ConsoleWrite($oCSV.FieldList(0) & @CRLF)

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

    ; Ändern eines Feldwertes NICHT über direkte Wertzuweisung an die Property, dann werden Daten im csv-Objekt nicht mit geändert!
    ; Ändern einzelner Wert im aktuellen DS (z.Zt. letzter)
    $oCSV.SetField('Charly', 'WERT_NEU')

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

    ; Ändern aller Werte im ersten DS
    $oCSV.First
    $oCSV.SetDS('A;B;C;D;E;F;G')

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

    ; Änderungen ansehen
    $aAll = $oCSV.ArrayLines
    _ArrayDisplay($aAll, 'Änderungen')

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

    ; Feldnamen ändern
    $oCSV.FieldNamesSet('Juliette;Kilo;Lima;Mike;November;Oscar;Papa')

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

    ; Änderungen ansehen
    $aAll = $oCSV.ArrayLines
    _ArrayDisplay($aAll, 'neue Feldnamen')

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

    ; geänderte Datei speichern
    $oCSV.WriteToFile

    [/autoit]
  • AutoIt-Object -- dynamische Wertezuweisung an Properties

    • BugFix
    • 29. Dezember 2014 um 10:49

    Ja Danke, habe mir jetzt eine Methode PropertySet erstellt.

    [autoit]

    Func _PropertySet($self, $Property, $newVal)
    _AutoItObject_RemoveMember($self, $Property)
    _AutoItObject_AddProperty($self, $Property, $ELSCOPE_PUBLIC, $newVal)
    EndFunc

    [/autoit]
  • AutoIt-Object -- dynamische Wertezuweisung an Properties

    • BugFix
    • 28. Dezember 2014 um 23:39

    Hi,
    hat schonmal jemand mit AutoIt-Object und dynamischen Properties gearbeitet?
    Ich erstelle ein Objekt mit unterschiedlicher Anzahl an Properties. Die Property-Namen werden beim Erstellen übergeben und auch im Objekt als Array hinterlegt.
    Wenn ich dann mit dem Objekt arbeite, möchte ich auch in einem Rutsch alle Werte der Properties ändern können. Also Abarbeiten in einer Schleife.
    Beim Auslesen kann man das mit Execute hinbiegen - aber wie kann ich das bei Wertzuweisungen erledigen?

    Bsp.-Skript

    Spoiler anzeigen
    [autoit]


    #include "AutoitObject.au3"
    #include <Array.au3>

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

    _AutoItObject_StartUp()

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

    ; Objekt mit Properties erstellen
    $o = _Obj('Alpha;Beta;Gamma;Delta')

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

    ; Property-Namen anzeigen
    $aProps = $o.ArrayProps
    _ArrayDisplay($aProps)

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

    ; Werte ausgeben (Wert = Index bei Erstellung)
    With $o
    ConsoleWrite(.Alpha & @CRLF)
    ConsoleWrite(.Beta & @CRLF)
    ConsoleWrite(.Gamma & @CRLF)
    ConsoleWrite(.Delta & @CRLF & @CRLF)
    EndWith

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

    ; Werte in Schleife ausgeben
    For $i = 1 To $aProps[0]
    ConsoleWrite(Execute('$o.' & $aProps[$i]) & @CRLF)
    Next

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

    ; ??? Werte in Schleife zuweisen ???
    Global $aNewVal[4] = [10,20,30,40]
    For $i = 1 To $aProps[0]
    ; wie kann ich dynamisch den Property-Namen verwenden?
    ; so gehts nicht:
    Execute('$o.' & $aProps[$i]) = $aNewVal[$i-1] ; ==>> error: Statement cannot be just an expression.
    Next

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

    _AutoItObject_Shutdown()

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

    Func _Obj($_sProps)
    Local $self = _AutoItObject_Create()
    Local $aProps = StringSplit($_sProps, ';')
    For $i = 1 To $aProps[0]
    _AutoItObject_AddProperty($self, $aProps[$i], $ELSCOPE_PUBLIC, $i)
    Next
    ; Array mit Property-Namen speichern in eigener Property
    _AutoItObject_AddProperty($self, 'ArrayProps', $ELSCOPE_PUBLIC, $aProps)
    Return $self
    EndFunc

    [/autoit]
  • PDF Dokumete per Netzwerk Senden

    • BugFix
    • 28. Dezember 2014 um 22:54
    Zitat von mcbaldrian

    $name = TCPNameToIP ("127.0.0.1")
    $Connection = TCPConnect($name, 4321)


    Wie soll der Client den Server erreichen, wenn du eine Verbindung mit dir selbst erstellst?
    Falls Server und Client auf derselben Machine sind - welchen Sinn hat dann das Netzwerk-Gedöns?

  • Doppelte Einträge aus *.ini löschen

    • BugFix
    • 28. Dezember 2014 um 22:12
    Zitat von oh-ha-2

    Mir wäre ja schon geholfen gewesen das eine Problem zu lösen.


    Also Raupis Vorschlag löst genau dein Problem.
    Der Eintrag aus Übernachtung wird gelöscht und in keine Übernachtung eingetragen.
    Anschließend setzt du den Radio-Button zur Korrektur.

  • Doppelte Einträge aus *.ini löschen

    • BugFix
    • 28. Dezember 2014 um 17:17

    Mal unabhängig von deinem Problem, deine Programmlogik ist wenig sinnvoll.
    Warum schreibst du verschiedene Sektionen für Übernachtung/keine Übernachtung ?
    Datum=1 ; Das ist Übernachtung
    Datum=0 ; Das ist dann keine Übernachtung
    So ist alles in einer Sektion und leicht zu handhaben.

    Noch sinnvoller wäre eigentlich, dafür SQLite zu verwenden. Hier laufen doch nach und nach einige Daten auf, da ist eine Datenbank die bessere Lösung.

  • Hex Farbwerte nach RGB umrechnen

    • BugFix
    • 27. Dezember 2014 um 13:54

    Bitte Thema auf Gelöst setzen.

  • File Manipulation mit Array und Regex: Nur numerische Zeilen in File löschen -HILFE-

    • BugFix
    • 26. Dezember 2014 um 22:06
    Zitat von R4z0r

    $text = @ScriptDir & "test_offline.log"


    Mach doch mal, was dir gesagt wird!! Gib nach dieser Zuweisung den Inhalt von $text in die Konsole aus. Dann wirst du sehen, dass das totaler Quark ist, weil etwas Wesentliches drin fehlt (die Hilfe sagt dir auch was).

  • PC Sicherung Komplett

    • BugFix
    • 23. Dezember 2014 um 20:41
    Zitat von Alina

    nur muss ich dazu ein komplettes Linux installieren?


    Das funktioniert auch mit einer Linux-Live CD (Live USB-Stick).
    Du musst dich nur vergewissern, welche Platte dann als hda und hdb gemounted ist. Nicht dass du versehentlich von der leeren einen Klon erstellst und deine Daten schrottest. :whistling:

  • Hardware Baukasten Tinkerforge

    • BugFix
    • 23. Dezember 2014 um 20:28

    ..und wenn es erforderlich sein sollte: Du kannst auch in AutoIt Callback-Funktionen ausführen. ;)

  • Hilfe mit Aufruf von dll Funktion(en)

    • BugFix
    • 22. Dezember 2014 um 19:55

    Joah, is denn hoid scho Woinachden... :rofl:

    Immer wieder gern.

  • Hilfe mit Aufruf von dll Funktion(en)

    • BugFix
    • 22. Dezember 2014 um 13:18

    Da sowohl NumberOfTRXunits als auch AvailableTRXunits von der Funktion befüllt werden, würde ich die dafür erforderlichen Strukturen erstellen und als Pointer übergeben. Mag sein, dass ein direktes Befüllen auch möglich ist, ich beginne zumindest immer mit der Pointer-Variante.

    [autoit]

    $NumberOfTRXunits = DllStructCreate("byte")
    $pNumberOfTRXunits = DllStructGetPtr($NumberOfTRXunits)

    [/autoit]


    "AvailableTRXunits" erwartet ein Integer-Array "TtrxUnits= Array[0..255] of Integer;". Das ist letztendlich nichts anderes als aneinandergereihter Speicherplatz.

    [autoit]

    $AvailableTRXunits= DllStructCreate("int[256]")
    $pAvailableTRXunits = DllStructGetPtr($AvailableTRXunits)

    [/autoit]


    Sollte die Übergabe des array in der Form nicht funktionieren, kann man auch probieren dieses als Bytearray zu übergeben:

    [autoit]

    $AvailableTRXunits= DllStructCreate("byte[" & 4*256 & "]") ; Integer hat 4 Byte
    $pAvailableTRXunits = DllStructGetPtr($AvailableTRXunits)

    [/autoit]


    Dein Aufruf würde also so aussehen:

    [autoit]

    $aReturn = DllCall("trxRemote.dll", "INT", "trxInitialize", "PTR", $pNumberOfTRXunits, "PTR", $pAvailableTRXunits)

    [/autoit]
  • The Perseus Programming Language

    • BugFix
    • 22. Dezember 2014 um 09:21
    Zitat von ShitDown

    Wäre jemand so nett und würde den Download evtl. hier zur Verfügung stellen?


    Na klar, kein Problem. Da Anhang hier nur bis 1MB erlaubt, habe ich mal auf FileStore.to hochgeladen.

  • Elementpositionen je nach Betriebssystem unterschiedlich

    • BugFix
    • 17. Dezember 2014 um 16:45

    Ich nehme mal an, das ist den Systemmaßen geschuldet. Punktgenaue Positionierung in einem Fenster wird auf jedem System etwas anders aussehen. Das ist übrigens ein großer Nachteil der pt-Positionierung. In anderen Systemen arbeitet man mit "schwimmender" Positionierung. Dort wird z.B. nur angegeben in welchem Bereich (horizontal/vertikal: Top, Center, Bottom) die Controls neben/unter-einander angeordnet werden sollen. Da sind die Ränder des Fensters dann völlig unerheblich, die Controls passen sich immer an.

  • Eigenen Script-Editor programmieren, dazu ein paar Fragen.....

    • BugFix
    • 17. Dezember 2014 um 16:32

    Du benötigst schon "SciTE4AutoIt", also nicht die small Version.
    In SciTE öffnest du mit "Strg+1" die Konfiguration. Dort findest du u.a. den Abbrev Manager. Damit kannst du ganze Scriptblöcke oder auch nur einzelne Befehle einfügen (und standardmäßig funktioniert das mit Leertaste nach dem Abbrev-Kürzel).
    Um Autovervollständigung für die Konstanten von Includes zu erhalten, musst du selbst ein wenig basteln. Schau dir in der SciTE Installation die verwendeten Tools an. Autocomplete ist das, was du brauchst. SciTE wird mit Lua - Skripten gesteuert. Ist aber recht simpel. Du findest auch hier ein Unterforum 'Lua', da sind viele Hinweise zur Individualisierung von SciTE zu finden.
    Probier selber mal, wie weit du kommst. Wenn du hängen bleibst, melde dich. Dann helfe ich dir gern weiter.

  • Eigenen Script-Editor programmieren, dazu ein paar Fragen.....

    • BugFix
    • 17. Dezember 2014 um 15:15
    Zitat


    Was mich an SciTe-Editor stört ist das sogenannte Autovervollständigen, man gibt einen Befehl ein aber wenn man die Leertaste drück wird der ausgewählte Befehl nicht vervollständigt sonder muß immer erst die Enter/Return/Eingabe-Taste drücken.

    Dann wie gesagt, wenn man per Include weitere Sachen einbindet z.B. Konstanten kann man diese nicht auf die gleiche weise eingeben wie man es bei den Befehlen möglich ist, man muss leider dann die komplette Konstanten-Namen kennen.


    Dann solltest du mal deine Installation überprüfen. All das geht auch mit SciTE.

  • Eigenen Script-Editor programmieren, dazu ein paar Fragen.....

    • BugFix
    • 17. Dezember 2014 um 10:42
    Zitat von Samson71

    Ziel ist es, das die Befehle nicht mehr eingetippt werden müssen sondern man kann sich die Befehle aus einer Liste auswählen.


    Aus einer Liste wählen ist definitiv langsamer, als mit Autovervollständigung durch Abbrevs zu arbeiten. ;)
    Lerne erst mal alle Möglichkeiten des SciTE-Editors auszuschöpfen. Wie im vorigen Post bereits gesagt gibt es auch noch ISN-Studio, weiterhin findest du hier im Forum noch einen Thread der sich mit SublimeText als Editor für AutoIt befasst.

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™