Listbox in .txt Datei speichern / automatisches scrollen einer textbox

  • Hiho der Titel sagt ja schon alles :D

    [autoit]


    $gui = GUICreate("test", 800, 100,0 ,801)
    GUISetState(@SW_SHOW)
    Global $listbox = GUICtrlCreateList("", 400, 0, 400, 100)
    _GUICtrlListBox_InsertString($listbox,"Welcome to "& $title,-1)
    GUICtrlSetStyle($listbox,$LBS_NOSEL)

    [/autoit]

    ich will das alle Inhalte, am besten gleich wenn sie hinzugefügt werden, in einer .txt gespeichert werden (so eine art logbuch ;)) desweiteren wird die Listbox mit Inhalt gefüllt. Nun soll die Box immer die neusten Einträge anzeigen,somit automatisch scrollen :/ verstanden ?^^

    greetz muppel

    • Offizieller Beitrag

    Schau dir das mal an, ob du es gebrauchen kannst .

    Spoiler anzeigen
    [autoit]

    #include <GUIConstantsEx.au3>
    #include <ListBoxConstants.au3>
    #include <WindowsConstants.au3>
    #include <GuiListBox.au3>
    Global $Count, $oldCount = 0

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

    #Region ### START Koda GUI section ### Form=
    $Form1 = GUICreate("Form1", 633, 447, 193, 125)
    $List1 = GUICtrlCreateList("", 80, 32, 369, 300)
    _GUICtrlListBox_InsertString($List1, "Die ist ein Test ", -1)
    GUICtrlSetStyle($List1, $LBS_NOSEL)
    GUISetState(@SW_SHOW)
    $Button1 = GUICtrlCreateButton("Random Einträge Hinzufügen", 10, 400, 150, 17)
    #EndRegion ### END Koda GUI section ###

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

    While 1
    $nMsg = GUIGetMsg()
    Switch $nMsg
    Case $GUI_EVENT_CLOSE
    Exit
    Case $Button1
    $iRand = Random(1, 10, 1)
    For $i = 1 To $iRand
    _GUICtrlListBox_InsertString($List1, "Random String Nr. " & $i, -1)
    Next
    EndSwitch
    $Count = _GUICtrlListBox_GetCount($List1) - 1
    If $Count <> $oldCount Then
    _GUICtrlListBox_SetCurSel($List1, _GUICtrlListBox_GetCount($List1) - 1)
    $oldCount = $Count
    _FileWrite()
    EndIf
    WEnd
    Func _FileWrite()
    $File = FileOpen(@ScriptDir & "\Test.log", 2)
    For $i = 0 To _GUICtrlListBox_GetCount($List1) - 1
    FileWriteLine($File, _GUICtrlListBox_GetText($List1, $i))
    ;~ msgbox (0,"",_GUICtrlListBox_GetText($List1, $i))
    Next
    FileClose($File)
    EndFunc ;==>_FileWrite

    [/autoit]
  • [autoit]

    While 1
    $Count = _GUICtrlListBox_GetCount($List1) - 1
    If $Count <> $oldCount Then
    _GUICtrlListBox_SetCurSel($List1, _GUICtrlListBox_GetCount($List1) - 1)
    $oldCount = $Count
    _FileWrite()
    EndIf
    WEnd

    [/autoit]


    wenn ich diesen code ausführe, wird doch aber der restliche vorgang angehalten oder ?

    • Offizieller Beitrag

    Versteh jetzt nicht warum du die Bearbeitung deines Listviews in eine eigene While wend Schleife packen willst. Lass sie doch in der Hauptschleife . So wie du gepostet hast , macht dein Scipt gar nichts mehr wenn es sich in der Schleife befindet .

    Edit: Hab die mal das Listing kommentiert , weiß ja gar nicht ob du es verstehst .

    Spoiler anzeigen
    [autoit]

    #include <GUIConstantsEx.au3>
    #include <ListBoxConstants.au3>
    #include <WindowsConstants.au3>
    #include <GuiListBox.au3>
    Global $Count, $oldCount = 0

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

    #Region ### START Koda GUI section ### Form=
    $Form1 = GUICreate("Form1", 633, 447, 193, 125)
    $List1 = GUICtrlCreateList("", 80, 32, 369, 300)
    _GUICtrlListBox_InsertString($List1, "Die ist ein Test ", -1)
    GUICtrlSetStyle($List1, $LBS_NOSEL)
    GUISetState(@SW_SHOW)
    $Button1 = GUICtrlCreateButton("Random Einträge Hinzufügen", 10, 400, 150, 17)
    #EndRegion ### END Koda GUI section ###

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

    While 1 ; Begin Hauptschleife
    $nMsg = GUIGetMsg();Messageabfrage Anfang
    Switch $nMsg
    Case $GUI_EVENT_CLOSE
    Exit
    Case $Button1
    $iRand = Random(1, 10, 1)
    For $i = 1 To $iRand
    _GUICtrlListBox_InsertString($List1, "Random String Nr. " & $i, -1)
    Next
    EndSwitch;Messageabfrge Ende

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

    $Count = _GUICtrlListBox_GetCount($List1) - 1;Begin der Listauswertung
    If $Count <> $oldCount Then ; hat sich die Anzahl der List Einträge geändert dann
    _GUICtrlListBox_SetCurSel($List1, _GUICtrlListBox_GetCount($List1) - 1)
    $oldCount = $Count
    _FileWrite()
    EndIf ;Ende Listauswertung
    WEnd ; Ende Hauptschleife

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

    Func _FileWrite() ; Log Datei Schreiben
    $File = FileOpen(@ScriptDir & "\Test.log", 2)
    For $i = 0 To _GUICtrlListBox_GetCount($List1) - 1
    FileWriteLine($File, _GUICtrlListBox_GetText($List1, $i))
    Next
    FileClose($File)
    EndFunc ;==>_FileWrite

    [/autoit]
  • Ich versteh die schon, nur bei meinem Script wir immer wischendurch etwas mit

    [autoit]

    _GUICtrlListBox_InsertString($listbox,"Status:Checking",-1)

    [/autoit]


    in die Listbox eingetragen. Somit gibt es auch kein gui mehr, welches sich in der hauptschleife befinden kann :/

  • Nach unten Scroolen ist ganz leicht!

    Spoiler anzeigen
    [autoit]

    #include <ButtonConstants.au3>
    #include <EditConstants.au3>
    #include <GUIConstantsEx.au3>
    #include <WindowsConstants.au3>
    #include <GuiEdit.au3>

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

    #Region ### START Koda GUI section ### Form=
    $Form2 = GUICreate("Form2", 193, 155, 303, 219)
    $Edit1 = GUICtrlCreateEdit("", 3, 3, 185, 100, BitOR($ES_AUTOVSCROLL,$ES_AUTOHSCROLL,$ES_READONLY,$ES_WANTRETURN,$WS_HSCROLL,$WS_VSCROLL))
    GUICtrlSetData(-1, "Edit1")
    $Input1 = GUICtrlCreateInput("Input1", 3, 105, 184, 21)
    $Button1 = GUICtrlCreateButton("Schreiben", 54, 127, 75, 25, 0)
    GUISetState(@SW_SHOW)
    #EndRegion ### END Koda GUI section ###

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

    While 1
    $nMsg = GUIGetMsg()
    Switch $nMsg
    Case $GUI_EVENT_CLOSE
    Exit
    Case $Button1
    $Read = GUICtrlRead ($Input1)
    $Read2 = GUICtrlRead ($Edit1)
    GUICtrlSetData ($Edit1,$Read2 & @CRLF & $Read)
    GUICtrlSetData ($Input1,"")
    _Scroll($Edit1)
    EndSwitch
    WEnd
    Func _Scroll ($Felt)
    $Lines = _GUICtrlEdit_GetLineCount($Felt)
    _GUICtrlEdit_LineScroll($Felt, 0, $Lines)
    EndFunc

    [/autoit]

    mfg. Jam00

    • Offizieller Beitrag

    Ich versteh die schon, nur bei meinem Script wir immer wischendurch etwas mit

    [autoit]

    _GUICtrlListBox_InsertString($listbox,"Status:Checking",-1)

    [/autoit]


    in die Listbox eingetragen. Somit gibt es auch kein gui mehr, welches sich in der hauptschleife befinden kann :/

    Auch wenn du in einer Function in die Lestbox schreibst , bist du immer noch in deiner Hauptschleife. Sobald also die Funktion beendet ist , dann wird automatisch die Listbox wieder upgedatet .

    Schau dir mal das Beispiel an , da wird die bearbeitung der Listbox alle 100 ms durchgeführt .

    Spoiler anzeigen
    [autoit]

    #include <GUIConstantsEx.au3>
    #include <ListBoxConstants.au3>
    #include <WindowsConstants.au3>
    #include <GuiListBox.au3>
    Global $Count, $oldCount = 0

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

    #Region ### START Koda GUI section ### Form=
    $Form1 = GUICreate("Form1", 633, 447, 193, 125)
    $List1 = GUICtrlCreateList("", 80, 32, 369, 300)
    _GUICtrlListBox_InsertString($List1, "Die ist ein Test ", -1)
    GUICtrlSetStyle($List1, $LBS_NOSEL)
    GUISetState(@SW_SHOW)
    $Button1 = GUICtrlCreateButton("Random Einträge Hinzufügen", 10, 400, 150, 17)
    #EndRegion ### END Koda GUI section ###
    AdlibEnable("Update",100)
    While 1 ; Begin Hauptschleife
    $nMsg = GUIGetMsg();Messageabfrage Anfang
    Switch $nMsg
    Case $GUI_EVENT_CLOSE
    Exit
    Case $Button1
    $iRand = Random(1, 10, 1)
    For $i = 1 To $iRand
    _GUICtrlListBox_InsertString($List1, "Random String Nr. " & $i, -1)
    Next
    EndSwitch;Messageabfrge Ende
    WEnd ; Ende Hauptschleife

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

    Func _FileWrite() ; Log Datei Schreiben
    $File = FileOpen(@ScriptDir & "\Test.log", 2)
    For $i = 0 To _GUICtrlListBox_GetCount($List1) - 1
    FileWriteLine($File, _GUICtrlListBox_GetText($List1, $i))
    Next
    FileClose($File)
    EndFunc ;==>_FileWrite

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

    Func Update()
    $Count = _GUICtrlListBox_GetCount($List1) - 1;Begin der Listauswertung
    If $Count <> $oldCount Then ; hat sich die Anzahl der List Einträge geändert dann
    _GUICtrlListBox_SetCurSel($List1, _GUICtrlListBox_GetCount($List1) - 1)
    $oldCount = $Count
    _FileWrite()
    EndIf ;Ende Listauswertung
    EndFunc

    [/autoit]
  • JO sauber habs nu hinbekommen :D Nun habe ich ein anderes Problem ^^ Ich have eine .cfg in der folgendes steht:

    Code
    cfg1=1
    cfg2=1
    cfg3=10
    cfg4=10000
    cfg5=0
    cfg6=1


    nun möchte ich die werte auslesen:

    [autoit]


    for $i = 0 to 5
    $cfgLoadArray[$i] = FileRead(@ScriptDir & "\cfg.ini", $i)
    msgbox(0,"",$cfgLoadArray[$i])

    [/autoit]


    doch so werden nur die ersten buchstaben aus der ersten Zeile in das Array gespeichert :/

  • [autoit]

    for $i = 1 to 6
    $cfgLoadArray[$i] = FileReadLine(@ScriptDir & "\cfg.ini", $i)
    msgbox(0,"",$cfgLoadArray[$i])

    [/autoit]
  • ja das ändert leider nichts daran, das nur die ersten 6 buchstaben ausgelesen werden ^^

    edit: ah sry sehs grad :D probiers mal aus ty

  • [autoit]


    #include <array.au3>
    $file = FileOpen("foo.cfg")
    $ret = FileRead($file)
    $array = StringRegExp($file, '(\w+)', 3)
    _ArrayDisplay($array)

    [/autoit]


    $array[0] = Key
    $array[1] = Value

    ungetestet

  • ja das ändert leider nichts daran, das nur die ersten 6 buchstaben ausgelesen werden ^^

    edit: ah sry sehs grad :D probiers mal aus ty


    Erst testen dann meckern


    Macht nämlich genau das was es soll:

    [autoit]

    dim $cfgLoadArray[5]
    for $i = 1 to 6
    $cfgLoadArray[$i] = FileReadLine(@ScriptDir & "\cfg.ini", $i)
    msgbox(0,"",$cfgLoadArray[$i])
    Next

    [/autoit]


    Edith:

    Zitat

    edit: ah sry sehs grad :D probiers mal aus ty

    OK

    • Offizieller Beitrag

    @muppel850 warum nimmst du eigentlich nicht gleich eine "richtige" INI Datei . Oder bessere Frage : Was willst du mit den ausgelesenen Werten machen ? Control´s in deiner GUI initialisieren ?

  • ich möchte die ausgelesenen werte also config werte benutzen, damit man nich bei jedem Programstart alles neu konfigurieren muss... ^^ Nun müsste ich noch das cfg1=1 nur in 1 umwandeln, also alles bis zur zahl nach dem gleich weg ..

    • Offizieller Beitrag

    Wenn du eine richtige INI Datei stat einer normalen Textdatei nimmst kannst du die einzelnen Keys direkt auslesen und mußt nicht erst umwandeln . Dafür sind INI datein doch da .
    Edit: Oscar war mal wieder schneller :D

  • [autoit]

    dim $cfgLoadArray[5]
    dim $cfgLoadArray2[5]
    for $i = 1 to 6
    $cfgLoadArray[$i] = FileReadLine(@ScriptDir & "\cfg.ini", $i)
    msgbox(0,"",$cfgLoadArray[$i])
    $cfgLoadArray2[$i] = StringTrimLeft ( $cfgLoadArray[$i], 5 )
    Next

    [/autoit]
  • Ich habe nun in $cfgLoadArray[] 5 werte wie folgt:

    [autoit]


    for $i = 0 to 5
    $cfgLoadArray[$i] = IniRead(@ScriptDir & "\cfg.ini","CFG",$cfgArrayLabel[$i],"NULL")
    _GUICtrlEdit_InsertText($statusliste,@CRLF& "Config: < "& $cfgArrayLabel[$i] &": "& $cfgLoadArray[$i] &" >",-1)

    [/autoit]

    wie bekomme ich die nun am schnellsten auf 5 variablen $cfg1-5 aufgeteilt ?

    • Offizieller Beitrag

    Ich verstehe jetzt nicht was du machen willst. Du hast doch schon den Inhalt in deinem Array $cfgLoadArray wieso willst du jetzt 5 Variablen $cfg1-5 benutzen ?