Filehistory in Combobox! Aber wie?

  • Hi,

    ich bin im moment etwas Ideenlos. Mein momentanes Projekt ist schon recht komplex, deshalb fehlt mir die zündende Idee.

    Also im Grunde geht es darum, das mein Script CSV-Dateien einliest, mit den Werten ein bisschen rumrechnet und das Ergebniss dann in einem Diagramm darstellt. Natürlich kann man die Ergebnisse auch noch in eine neue CSV schreiben. Soweit funktioniert auch alles schon. Also der Kern steht. Jetzt arbeite ich etwas am Komfort. Ich möchte die 5-10 zuletzt geöffneten Dateien in einer Combobox als Verlauf anzeigen. Die Dateipfade speicher ich sowie einige andere Informationen und Einstellungen in einer .ini. Dabei soll immer wenn ein neuer Dateipfad hinzukommt, der älteste gelöscht werden und alle anderen um einen aufrücken.

    Freu mich schon auf eure Ideen.

    Danke
    Gruß Daniel

    Einmal editiert, zuletzt von danielsan85 (17. Dezember 2010 um 15:44)

  • Dann mach doch einfach in der Section 15 Keys (Pfad 1,Pfad2, etc) und immer wenn ein neuer dazu kommt:
    Pfad 15 = Pfad 14
    Pfad 14 = Pfad 13
    Pfad 13 = Pfad 12
    ...
    Pfad 2 = Pfad 1
    Pfad 1 -> neuer Pfad
    damit überschreibst du automatische den 15. (ältester) und dein neuester steht oben.
    Aber in der Reihenfolge, wenn du bei "Pfad 1" anfangen würdest und den zuerst an "Pfad 2" schreibst geht alles verloren und du hast überall den selben stehen.

    Dann musst du das ganze nurnoch in richtiger Reihenfolge in deine Combo - Box einlesen.

    Falls es noch unklar ist mach ich dir gerne ein kurzes Beispiel

  • Danke Milla.

    Ich habe das jetzt so gelöst:

    [autoit]

    Func Filehistory()
    For $i = 1 to 10
    $Filehistory[$i] = iniread($ini , "Dateiverlauf", $i,"Not Found")
    Next
    if $FilePath <> $Filehistory[1] And $FilePath <> $Filehistory[2] And $FilePath <> $Filehistory[3] And $FilePath <> $Filehistory[4] And $FilePath <> $Filehistory[5] And $FilePath <> $Filehistory[6] And $FilePath <> $Filehistory[7] And $FilePath <> $Filehistory[8] And $FilePath <> $Filehistory[9] And $FilePath <> $Filehistory[10] Then
    For $i = 9 to 1
    $Filehistory[$i+1] = $Filehistory[$i]
    Next
    $Filehistory[1] = $FilePath

    For $i = 1 to 10
    IniWrite($ini , "Dateiverlauf", $i, $Filehistory[$i])
    GUICtrlSetData($Combo1, IniRead($ini,"Dateiverlauf", $i, "Not Found"), 1)
    Next

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

    EndIf

    [/autoit]

    Die Ini sieht so aus:

    Wie kriege ich es hin, das in der Combobox als automiatische auswahl die Position 1 also in diesem Fall 1.csv ausgewählt ist? Bei mir steht immer ...

    Kann man die If abfrage noch optimieren? Irgendwie finde ich das so sehr unsauber.

    Danke
    Gruß Daniel

  • Naja die Zeile ist so ellen lang dann kann man das schlecht lesen.

    Ich habs jetzt so gemacht:

    [autoit]

    Func Filehistory()
    For $i = 1 to 10
    $Filehistory[$i] = iniread($ini , "Dateiverlauf", $i,"Not Found")
    Next

    For $j = 1 to 10
    if $FilePath <> $Filehistory[$j] Then

    For $i = 9 to 1
    $Filehistory[$i+1] = $Filehistory[$i]
    Next

    $Filehistory[1] = $FilePath

    For $i = 1 to 10
    IniWrite($ini , "Dateiverlauf", $i, $Filehistory[$i])
    GUICtrlSetData($Combo1, IniRead($ini,"Dateiverlauf", $i, "Not Found"), 1)
    Next

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

    EndIf
    Next
    EndFunc

    [/autoit]

    Finde ich persönlich schöner. (Hab aber noch nen kleinen Bug drin)

    Aber dein Post hat mich erst auf die Idee gebracht. Danke ;)

    Allerdings hab ich immernoch das Problem:

    Zitat

    Wie kriege ich es hin, das in der Combobox als automiatische auswahl die Position 1 also in diesem Fall 1.csv ausgewählt ist? Bei mir steht immer ...

    Gruß Daniel

  • So hier mal ein Bsp:

    Spoiler anzeigen
    [autoit]

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

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

    Opt("GuiOnEventMode", 1)

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

    Global $mainWin, $inputPath, $btnFileDialog, $comboPaths

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

    $mainWin = GUICreate("Pfad - Historisierung", 430, 100)
    GUISetOnEvent($GUI_EVENT_CLOSE, "_Exit")

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

    $inputPath = GUICtrlCreateInput("", 10, 10, 370, 20)

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

    $btnFileDialog = GUICtrlCreateButton("...", 385, 10, 20, 20)
    GUICtrlSetOnEvent(-1, "_fileDialog")

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

    $comboPaths = GUICtrlCreateCombo("", 10, 50, 370, 15, 3)
    GUISetState()

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

    _init()

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

    Func _init()
    If Not FileExists(@ScriptDir & "\paths.ini") Then
    _FileCreate(@ScriptDir & "\paths.ini")
    EndIf
    _mainLoop()
    EndFunc ;==>_init

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

    Func _mainLoop()
    While 1
    Sleep(100)
    WEnd
    EndFunc ;==>_mainLoop

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

    Func _fileDialog()
    Local $path
    $path = FileOpenDialog("Datei auswählen", @ScriptDir, "Alles (*.*)")
    GUICtrlSetData($inputPath, $path)

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

    _savePathToIni($path)
    EndFunc ;==>_fileDialog

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

    Func _savePathToIni($path)
    For $i = 15 To 2 Step -1
    IniWrite(@ScriptDir & "\paths.ini", "Pfade", "Pfad " & $i, IniRead(@ScriptDir & "\paths.ini", "Pfade", "Pfad " & $i - 1, ""))
    Next
    IniWrite(@ScriptDir & "\paths.ini", "Pfade", "Pfad 1", $path)
    _setComboData()
    EndFunc ;==>_savePathToIni

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

    Func _setComboData()
    _GUICtrlComboBox_ResetContent($comboPaths)
    For $i = 1 To 15 Step 1
    If IniRead(@ScriptDir & "\paths.ini", "Pfade", "Pfad " & $i, "") <> "" Then
    _GUICtrlComboBox_AddString($comboPaths, IniRead(@ScriptDir & "\paths.ini", "Pfade", "Pfad " & $i, ""))
    EndIf
    Next
    _GUICtrlComboBox_SetCurSel($comboPaths, 0)
    EndFunc ;==>_setComboData

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

    Func _Exit()
    Exit
    EndFunc ;==>_Exit

    [/autoit]


    Steht zwar in der ini die 15 Oben aber des wäre ja nur Schönheitskorrektur falls es andersrum sein soll

  • OK Danke!

    Das...

    [autoit]

    _GUICtrlComboBox_SetCurSel($comboPaths, 0)

    [/autoit]


    hat dann auch meine letzte Frage beantwortet.

    Danke
    Gruß Daniel