listviewitem mag nicht

  • Also meine Schleife läuft durch nur mein listview item zeigt nur manche strings an


    Einmal editiert, zuletzt von Neuton23 (20. August 2010 um 13:11)

  • Hallo neuton,

    herzlich willkommen im Forum und viel Spass an AutoIt.

    Hier kannst du dir die Hilfe herunterladen.
    Hier gibt es ein AutoIt-Tutorial: http://wiki.autoit.de/wiki/index.php/TutorialSehr hilfreich ist auch das Buch von peethebee

    Du verwendest doch gar keine ListView-Control (und daher auch keine ListViewItems) sondern eine List-Control.

    ich habe dein Skript mal etwas angepasst:

    Spoiler anzeigen
    [autoit]

    ; *** Start added by AutoIt3Wrapper ***
    #include <ListBoxConstants.au3>
    #include <WindowsConstants.au3>
    ; *** End added by AutoIt3Wrapper ***
    #Region ;**** Directives created by AutoIt3Wrapper_GUI ****
    #AutoIt3Wrapper_Add_Constants=n
    #EndRegion ;**** Directives created by AutoIt3Wrapper_GUI ****
    #include <GUIConstantsEx.au3>
    #include <Array.au3>
    #include <File.au3>

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

    Opt("GUIOnEventMode", 1)
    GUICreate("Das ist meine erste Gui", 600, 600)

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

    $Button1 = GUICtrlCreateButton("lol", 30, 30)
    GUICtrlSetOnEvent($Button1, "_msg")
    $Exit = GUICtrlCreateButton("Ende", 60, 30)
    GUICtrlSetOnEvent($Exit, "close")
    GUISetOnEvent($GUI_EVENT_CLOSE, "close")
    ;GUISetOnEvent($GUI_EVENT_MINIMIZE, "minimize")
    $input = GUICtrlCreateInput("", 120, 30)
    $msg = GUIGetMsg()
    $array = WinList()
    $list = GUICtrlCreateList("", 250, 60, 100, 300,BitOr($LBS_NOTIFY, $WS_VSCROLL, $WS_BORDER) )
    ;<==== da ansonsten die Einträge sortiert werden da im default zusätzlich noch $LBS_SORT gesetzt

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

    GUISetState(@SW_SHOW)

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

    #region datei
    $file = @ScriptDir & "\Hallo.txt"
    MsgBox(0, "", _FileCountLines($file))
    $text = _Dateilesen($file)
    _ArrayDisplay($text)
    #endregion

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

    For $i = 0 To UBound($text) - 1 ;Step + 1 nicht nötig da Standard
    ;<========== Arrays beginnen bei 0
    ; MsgBox(0, "", $text[$i])
    GUICtrlSetData($list,$text[$i] & @CR)
    Next
    While 1
    Sleep(20)
    WEnd

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

    Func _Dateilesen($path)
    Local $dateien[1] = ["0"]
    Local $icheck = 0
    For $j = 1 To _FileCountLines($file) Step +1

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

    If $icheck = 0 Then
    $dateien[0] = FileReadLine($path, $j)
    $icheck = 1
    Else
    _ArrayAdd($dateien, FileReadLine($path, $j))
    EndIf
    Next
    Return $dateien
    EndFunc ;==>_Dateilesen

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

    Func IsVisible($handle)
    If BitAND(WinGetState($handle), 2) Then
    Return 1
    Else
    Return 0
    EndIf
    EndFunc ;==>IsVisible

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

    Func _msg()
    MsgBox(0, "haha", "Funktioniert")
    EndFunc ;==>_msg

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

    Func close()
    Exit
    EndFunc ;==>close

    [/autoit]

    die beiden wichtigen Stellen sind mit ;<===== gekennzeichnet

    mfg (Auto)Bert

    • Offizieller Beitrag

    Wilkommen im Forum.


    Bei deinem ListView handelt es sich um eine ListBox. Heißt zwar ähnlich aber die beiden Controls sind so unteschiedlich wie Tag und Nacht.

    Ich denke dein Anzeigeproblem liegt daran, das in der Textdatei Leerzeilen enthalten sind.
    Wenn du mit GUICtrlSetData einer List ein Leerstring übergibst, wird die LIste gelöscht.
    Wie deine Textdatei aussieht kann man nur raten, ich hab es mal mit deinem Script selbst getestet.

    Spoiler anzeigen
    [autoit]

    #include <GUIConstantsEx.au3>
    #include <Array.au3>
    #include <File.au3>

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

    $file = @ScriptFullPath; zum testen das Script selbst benutzen

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

    MsgBox(0,"", _FileCountLines($file))
    $text = _Dateilesen($file)
    _ArrayDisplay($text)

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

    Opt("GUIOnEventMode", 1)
    GuiCreate("Das ist meine erste Gui", 600, 600)

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

    $Button1 = GUICtrlCreateButton("lol", 30, 30)
    GUICtrlSetOnEvent($Button1, "_msg")
    $Exit = GUICtrlCreateButton("Ende", 60, 30)
    GUICtrlSetOnEvent($Exit, "close")
    GUISetOnEvent($GUI_EVENT_CLOSE, "close")
    ;~ GUISetOnEvent($GUI_EVENT_MINIMIZE, "minimize")
    $input = GUICtrlCreateInput("", 120, 30)
    $msg = GUIGetMsg()
    $array = WinList()
    $list = GUICtrlCreateList("", 250, 60, 100, 300)
    GUISetState(@SW_SHOW)
    For $i=1 to Ubound($text) -1 Step +1
    If $text[$i] <> "" Then
    GUICtrlSetData($list, $text[$i])
    eNDIF
    Next

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

    While 1
    sleep(20)
    WEnd

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

    Func _Dateilesen($path)
    Local $dateien[1]= ["0"]
    Local $icheck = 0
    For $j = 1 to _FileCountLines($file) Step +1

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

    If $icheck = 0 Then
    $dateien[0] = FileReadLine($path, $j)
    $icheck = 1
    Else
    _ArrayAdd($dateien, FileReadLine($path, $j))
    EndIf
    Next
    Return $dateien
    EndFunc

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

    Func IsVisible($handle)
    If BitAND(WinGetState($handle), 2) Then
    Return 1
    Else
    Return 0
    EndIf
    EndFunc

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

    Func _msg()
    MsgBox(0, "haha", "Funktioniert")
    EndFunc

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

    Func close()
    Exit
    EndFunc

    [/autoit]

    Edit: Autobert war schneller.

    autoBert, das Array hat im 0. Element die Anzahl der Zeilen also die Schleife bei 1 beginnen lassen.Zeile 37 ;)

  • Danke für die schnellen und guten Antworten

    Sry das ich so Formlos dahingeschrieben hab aber war gestern schon etwas spät und ein bisschen angefressen weil die schleife eig durchging nur die anzeige nichts machte XD.

    Bin leider nicht so fit mit autoit hab erst vor ner woche angefangen mich reinzulesen es ist bisschen mühsam sich von java wieder wegzubewegen also entschuldigt die kleinen leichtsinnsfehler

    Die Syntax ist mir wie gesagt noch nicht ganz geläufig aber ich arbeite daran


    Danke schonmal lg Thomas

  • so nun habe ich den Code mal umgeändert was ich eigentlich brauche ist diese Box auf der Seite mit Ordnerpfaden und Datei die will ich dann gerne mit einer checkbox auswählen um sie dann wiederum einem Array übergeben kann das mir dann zeilen aus der datei überschreibt

    Wo ich nun die hilfe brauch ist die Checkbox und die liste bei mir siehts bisher so aus


    Spoiler anzeigen
    [autoit][/autoit] [autoit][/autoit] [autoit]

    ; Script Start - Add your code below here
    #include <ListBoxConstants.au3>
    #include <WindowsConstants.au3>
    #include <GUIConstantsEx.au3>
    #include <File.au3>
    #include <Array.au3>
    $check = 0
    $array_lines = _Dateilesen(@ScriptDir & "\Hallo.txt")
    ;Global $Dateiformat = "Hallo.txt|"
    Opt("GuiOnEventMode", 1)
    GUICreate("Suche ersetzen", 600, 600)
    GUISetState()

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

    $ID_fileend = GUICtrlCreateInput("", 60, 30, 100, 20)
    $ID_Ok = GUICtrlCreateButton("Ok", 160, 30, 30, 20)
    $list = GUICtrlCreateList("", 250, 30, 200, 300, BitOr($LBS_NOTIFY, $WS_VSCROLL, $WS_BORDER))
    $clear = GUICtrlCreateButton("Clear", 290, 500, 40, 30)
    ;$checkbox_button = GUICtrlCreateButton("", 275, 500)

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

    ;GUICtrlSetOnEvent($ID_Path,
    ;GUICtrlSetOnEvent($checkbox_button, "_Display")
    GUICtrlSetOnEvent($ID_Ok, "_Dateityp")
    GUISetOnEvent($GUI_EVENT_CLOSE, "close")
    GuiSetOnEvent($GUI_EVENT_MINIMIZE, "minimize")
    GUICtrlSetOnEvent($clear, "_clear")

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

    While 1
    Sleep(20)
    WEnd
    Func _clear()
    GUICtrlSetData($ID_fileend, "")
    GUICtrlsetData($list,"")

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

    If $check = 0 Then
    msgBox(0,"", "Sie haben noch keine Suche gestartet")
    Else
    For $x = 0 to UBound($checkbox)-1
    Guictrldelete($checkbox[$x])
    Next
    EndIf
    $lines = 0
    $icheck = 0
    $array = 0
    $check = 0
    EndFunc

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

    Func _Dateilesen($path)
    $lines = _FileCountLines($path)
    Local $icheck = 0
    Local $array[1] = ["0"]
    For $j = 0 to $lines
    If $icheck = 0 Then
    $array[0] = FileReadLine($path, $j)
    $icheck = 1
    Else
    _ArrayAdd($array, FileReadLine($path, $j))
    EndIf
    Next
    Return $array
    EndFunc

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

    Func _Dateityp()
    Global $check = 1
    $fileend = GUICtrlRead($ID_fileend) & "|"
    $Ort = @ScriptDir
    $datei = _ordner_rekursiv($Ort, 1, True, False, $fileend)
    Global $checkbox[Ubound($datei)]
    For $i = 1 To UBound($datei) - 1
    GUICtrlSetData($list, $datei[$i][0] & $datei[$i][1])
    $checkbox[$i] = GUICtrlCreateCheckbox("", 235, 25+($i*14),10,10)

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

    Next
    EndFunc

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

    Func close()
    Exit
    EndFunc
    Func _ordner_rekursiv($udf_quellordner, $udf_Ordner_Dateien = 1, $udf_unterordner = True, $udf_spalte_datum = False, $udf_dateityp = "", $udf_auslassen = "")
    Local $verzeichnisse_alle[1] ;Array für die Ordner
    Local $array_alles[1000000][3] ;Array für die Ordner und Dateien
    Local $szDrive, $szDir, $szFName, $szExt
    If Not IsArray($udf_quellordner) Then
    $udf_quellordner_tmp = $udf_quellordner
    Dim $udf_quellordner[2]
    $udf_quellordner[1] = $udf_quellordner_tmp
    EndIf
    For $i = 1 To UBound($udf_quellordner) - 1
    If Not FileExists($udf_quellordner[$i]) Or Not StringInStr($udf_quellordner[$i], ":") Then
    SetError(1)
    Return 0
    EndIf
    If StringRight($udf_quellordner[$i], 1) <> "\" Then $udf_quellordner[$i] &= "\"
    $udf_quellordner_einzeln = $udf_quellordner[$i]
    If $udf_unterordner = True Then ;mit Unterordner
    _ordner_rekursiv_mit_unterordner($udf_quellordner_einzeln, $verzeichnisse_alle)
    _ArrayAdd($verzeichnisse_alle, $udf_quellordner_einzeln)
    Else ;ohne Unterordner
    $verzeichnisse_alle = $udf_quellordner
    EndIf
    Next
    If IsArray($verzeichnisse_alle) Then $verzeichnisse_alle[0] = UBound($verzeichnisse_alle) - 1 ;In die erste Zeile die Anzahl der Dateien schreiben

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

    If $udf_Ordner_Dateien = 1 Then ;Dateien auflisten
    $zaehler_fortlaufend = 0
    If Not IsArray($verzeichnisse_alle) Then
    $verzeichnisse_alle_tmp = $verzeichnisse_alle
    Dim $verzeichnisse_alle[2]
    $verzeichnisse_alle[1] = $verzeichnisse_alle_tmp
    EndIf
    For $u = 1 To UBound($verzeichnisse_alle) - 1
    $array_alle_dateien = _FileListToArray($verzeichnisse_alle[$u], "*", 1)
    For $k = 1 To UBound($array_alle_dateien) - 1
    $kriterien_ok = 0
    If $udf_dateityp = "*" Then ;Dateityp nicht angegeben oder alle Dateien

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

    $kriterien_ok = 1
    ElseIf StringInStr($udf_dateityp, "|") Then ;Dateitypen angegeben
    $dateityp_split = StringSplit($udf_dateityp, "|")
    $udf_dateiendung_array = _PathSplit($array_alle_dateien[$k], $szDrive, $szDir, $szFName, $szExt)
    $udf_dateiendung = $udf_dateiendung_array[4]
    $udf_dateiname = $udf_dateiendung_array[3]
    For $i = 1 To UBound($dateityp_split) - 1
    If $dateityp_split[$i] = $udf_dateiname & $udf_dateiendung Or $dateityp_split[$i] = $udf_dateiendung Then
    ;MsgBox(0,"", $udf_dateiname & $udf_dateiendung)
    $kriterien_ok = 1
    ExitLoop
    EndIf
    Next
    EndIf
    If $udf_auslassen <> "" Then ;Wörter in dem Pfad und Datei auslassen
    $auslassen_split = StringSplit($udf_auslassen, "|")
    For $i = 1 To UBound($auslassen_split) - 1
    If StringInStr($array_alle_dateien[$k], $auslassen_split[$i]) Or StringInStr($verzeichnisse_alle[$u], $auslassen_split[$i]) Then
    $kriterien_ok = 0
    ExitLoop
    EndIf
    Next
    EndIf
    ;Papierkorb und System Volume Information wird nicht mitkopiert
    If StringInStr($array_alle_dateien[$k], 'RECYCLER') Or StringInStr($verzeichnisse_alle[$u], 'RECYCLER') _
    Or StringInStr($array_alle_dateien[$k], 'RECYCLED') Or StringInStr($verzeichnisse_alle[$u], 'RECYCLED') _
    Or StringInStr($array_alle_dateien[$k], 'System Volume Information') Or StringInStr($verzeichnisse_alle[$u], 'System Volume Information') _
    Or StringInStr($array_alle_dateien[$k], '$RECYCLE.BIN') Or StringInStr($verzeichnisse_alle[$u], '$RECYCLE.BIN') Then
    $kriterien_ok = 0
    ExitLoop
    EndIf
    ;wenn der Dateityp passt und die Datei bzw. der Ordner nicht ausgelassen werden soll
    If $kriterien_ok = 1 Then
    $zaehler_fortlaufend += 1
    $array_alles[$zaehler_fortlaufend][0] = $verzeichnisse_alle[$u]
    $array_alles[$zaehler_fortlaufend][1] = $array_alle_dateien[$k]
    If $udf_spalte_datum = True Then
    $time2 = FileGetTime($verzeichnisse_alle[$u] & "\" & $array_alle_dateien[$k], 0) ;"Datum geändert" auslesen
    $array_alles[$zaehler_fortlaufend][2] = $time2[0] & $time2[1] & $time2[2] & $time2[3] & $time2[4] & $time2[5]
    EndIf
    EndIf
    Next
    Next
    Else ;Ordner auflisten
    For $i = 1 To UBound($verzeichnisse_alle) - 1
    $array_alles[$i][0] = $verzeichnisse_alle[$i]
    $zaehler_fortlaufend = UBound($verzeichnisse_alle) - 1
    Next
    EndIf
    ;Leere Zeilen am Ende löschen
    ReDim $array_alles[$zaehler_fortlaufend + 1][3]
    ;In die erste Zeile die Anzahl der Dateien schreiben
    If IsArray($array_alles) Then $array_alles[0][0] = UBound($array_alles) - 1
    $verzeichnisse_alle = 0
    Return $array_alles
    EndFunc ;==>_ordner_rekursiv

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

    ;**************************************
    ; Unterordner durchsuchen *
    ;**************************************
    Func _ordner_rekursiv_mit_unterordner($udf_quellordner, ByRef $verzeichnisse_alle)
    $verzeichnisse = _FileListToArray($udf_quellordner, "*", 2)
    For $i = 1 To UBound($verzeichnisse) - 1
    $verzeichnisse[$i] = $udf_quellordner & $verzeichnisse[$i] & "\"
    _ArrayAdd($verzeichnisse_alle, $verzeichnisse[$i])
    _ordner_rekursiv_mit_unterordner($verzeichnisse[$i], $verzeichnisse_alle)
    Next
    EndFunc ;==>_ordner_rekursiv_mit_unterordner

    [/autoit]

    3 Mal editiert, zuletzt von Neuton23 (18. August 2010 um 15:43)

    • Offizieller Beitrag

    Soweit ich feststellen kann funktioniert deine Rekursive Dateisuche nicht. Ich bekomme nur 1 Datei angezeigt.

    Zu deiner Checkbox:
    Ich denke die Listbox ist für deine Zwecke die falsche Entscheidung. Für deine Anwendung wäre ein TreeView besser geeignet.
    Schau mal im Scripte Forum, da hat Oscar einige Beispiele zu Treeviews erstellt. Davon kannst du bestimmt was passendes für dich finden.
    Der Verwaltungsaufwand mit zusätzlichen Checkboxen ist meines erachtens höher, als wenn du gleich mit einem Treeview arbeitest.

    Edit: Ein Listview würde sich eventuell auch anbieten, wenn du die Dateianzeige nicht in einer Baumstruktur benötigst. Auch bein ListView kannst du direkt mit Checkboxen arbeiten.
    Schau dir mal in der Hilfe die Beispiele der UDF Funktionen an, alles was mit _GuiCtrlListView_ anfängt.

  • also es funktioniert jetzt wunderbar mit einer listview ich bedanke mich für die guten Antworten

    mfg Thomas