Aus ini Listview item erstellen..

  • Hallo,

    ich nerve wieder ;(

    Brauche mal wieder inen tipp

    habe folgende ini
    [Backup]
    Quelle1=C:\xxxx1
    Ziel1=C:\xxx1
    Quelle2=C:\xxxx2
    Ziel2=C:\xxx2
    Quelle3=C:\xxxx3
    Ziel3=C:\xxx3
    Quelle4=C:\xxxx4
    Ziel4=C:\xxx4
    [Wochentag]
    tage=0

    Möchte gerne folgende listview erzeugen.
    C:\xxxx1|C:\xxx1
    C:\xxxx2|C:\xxx2
    C:\xxxx3|C:\xxx3
    C:\xxxx4|C:\xxx4


    Es sollte variabel sein da ich ja nicht immer die gleiche ini habe wie mache ich das am besten?

    Danke
    SubZero

    lg SubZero ;)
    ==========================================================================

    "Der Computer ist die logische Weiterentwicklung des Menschen: Intelligenz ohne Moral."

    Einmal editiert, zuletzt von subzero007 (24. September 2009 um 16:43)

  • Relativ simpel und funktioniert. Ich musste nur dein "|" gegen ein normales großes i austauschen weil ein "|" in einem Listview genau wie in einer Combo Zeilenumbruch bedeutet !
    Ist aber optisch trotzdem noch schick ;)

    Spoiler anzeigen
    [autoit]

    #include <GUIConstantsEx.au3>
    #include <ListBoxConstants.au3>
    #include <WindowsConstants.au3>

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

    $source = "Quelle"
    $dest = "Ziel"

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

    $section1 = "Backup"
    ;$section2 = "wochentage"

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

    $Ini = "test.ini"

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

    ;create window
    $Example = GUICreate("#Example", 625, 445, 193, 125)
    $ListItem = GUICtrlCreateList("", 168, 96, 289, 240, $WS_BORDER)
    GUISetState(@SW_SHOW)

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

    $IrS = IniReadSection($Ini, $section1)

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

    $count = $IrS[0][0] / 2
    $ctn = 1

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

    For $a = 1 To $count
    $entry = $IrS[$ctn][1]
    $ctn += 1
    $entry &= " I "
    $entry &= $IrS[$ctn][1]
    $ctn += 1
    GUICtrlSetData($ListItem, $entry)
    Next

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

    ;pause to see the end
    While True
    Sleep(500000)
    WEnd

    [/autoit]

    Getestet mit deiner Ini

  • Hallo subzero007,

    hier noch eine andere Version (nämlich mit ListView und nicht ListBox):

    Spoiler anzeigen
    [autoit]

    #include <ListviewConstants.au3>
    #include <GUIConstantsEx.au3>
    #include <WindowsConstants.au3>
    ;#include <SliderConstants.au3>
    #Include <GuiListView.au3>
    #Include <Array.au3>
    #Include <File.au3>

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

    Opt("GUIOnEventMode", 1)
    Opt("MustDeclareVars",1)

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

    Global $hGUI = GUICreate("LV from Ini", 1024, 550, Default, Default, $WS_SIZEBOX, $WS_EX_ACCEPTFILES)
    GUISetOnEvent($GUI_EVENT_CLOSE, "_GUIEvents")
    GUISetOnEvent($GUI_EVENT_MINIMIZE, "_GUIEvents")
    GUISetOnEvent($GUI_EVENT_RESTORE, "_GUIEvents")
    ;GUISetOnEvent($GUI_EVENT_PRIMARYDOWN, "_leftClicked")
    ;GUISetOnEvent($GUI_EVENT_PRIMARYUP, "_leftReleased")
    Local $pic=GUICtrlCreatePic("C:\WINDOWS\Help\Tours\htmlTour\safe_easy_easier.jpg",10,10);, @DesktopWidth/2, @DesktopHeight/2)
    GUICtrlSetResizing(-1, $GUI_DOCKBORDERS) ;Abstand zu allen 4 Seiten bleibt fix
    Global $hListview = GUICtrlCreateListView("Quelle|Ziel", 10, 10, 1004, 500)
    GUICtrlSetResizing(-1, $GUI_DOCKBORDERS) ;Abstand zu allen 4 Seiten bleibt fix
    _GUICtrlListView_SetExtendedListViewStyle($hListView, BitOR($LVS_EX_GRIDLINES, $LVS_EX_FULLROWSELECT))
    _GUICtrlListView_SetColumnWidth($hListView, 0, 502)
    _GUICtrlListView_SetColumnWidth($hListView, 1, 502)
    IF FileExists(@ScriptDir&"\Backup.ini") Then
    Local $aData = IniReadSection(@ScriptDir&"\Backup.ini","Backup")
    _ArrayDisplay($aData)
    For $i = 1 To UBound($aData) - 1 Step 2
    if StringReplace($aData[$i][0],"Quelle","") = StringReplace($aData[$i+1][0],"Ziel","") Then GUICtrlCreateListViewItem($aData[$i][1] & "|" & $aData[$i+1][1],$hListView)
    Next
    Else
    MsgBox(64,"Fehler","Ini-Datei fehlt",30)
    EndIf

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

    ;Local $deletebutton = GuiCtrlCreateButton("&Delete List",54,252,60,28)
    ;GUICtrlSetResizing(-1, $GUI_DOCKLEFT + $GUI_DOCKSIZE + $GUI_DOCKBOTTOM)
    ;Abstand Links und unten bleibt fix die Größe (Breite und Höhe) ebenso
    ;Local $insertbutton = GuiCtrlCreateButton("&Insert",10,252,40,28)
    ;GUICtrlSetResizing(-1, $GUI_DOCKLEFT + $GUI_DOCKSIZE + $GUI_DOCKBOTTOM)
    ;Abstand Links und unten bleibt fix die Größe (Breite und Höhe) ebenso
    GUISetState(@SW_SHOW)

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

    While True
    Sleep(10)
    WEnd

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

    Func _GUIEvents()
    Select
    Case @GUI_CtrlId = $GUI_EVENT_CLOSE
    Exit
    ;Case @GUI_CtrlId = $GUI_EVENT_MINIMIZE
    ;Case @GUI_CtrlId = $GUI_EVENT_RESTORE
    EndSelect
    EndFunc ;==> _GUIEvents()

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

    mfg (Auto)Bert

  • Oder man baut die .ini etwas um

    Code
    [Quelle-Ziele] 
    C:\xxxx1=C:\xxx1
    Spoiler anzeigen
    [autoit]


    IF FileExists(@ScriptDir&"\Backup.ini") Then
    Local $aData = IniReadSection(@ScriptDir&"\Backup.ini","Backup")
    _ArrayDisplay($aData)
    For $i = 1 To UBound($aData) - 1
    GUICtrlCreateListViewItem($aData[$i][0] & "|" & $aData[$i][1],$hListView)
    Next
    Else
    MsgBox(64,"Fehler","Ini-Datei fehlt",30)
    EndIf

    [/autoit]
  • So habe es so gemacht wie Nuts es mir Vorgeschlagen hat stehe jetzt aber vor einem neuen problem.

    Hier meine funktion die die ini erstellt:

    Spoiler anzeigen
    [autoit]


    Func _iniwrite()
    ;FileDelete($ini)
    Local $checked = 0
    For $i = 0 To 6
    If BitAND(GUICtrlRead($arCheckBox[$i]), $GUI_CHECKED) Then
    $checked = BitOR($checked, 2 ^ $i)
    EndIf

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

    Next
    For $i = 0 To _GUICtrlListView_GetItemCount($hListView) - 1;hier zählst du die einträge
    $var1 = _GUICtrlListView_GetItemText($hListView, $i, 0)
    $var2 = _GUICtrlListView_GetItemText($hListView, $i, 1)
    ;IniWrite('save.ini', 'Backup', 'Quelle'&$i, $var1)
    ;IniWrite('save.ini', 'Backup', 'Ziel'&$i, $var2)

    IniWrite('save.ini', 'Quelle-Ziele', $var1&$i, $var2&$i)


    Next
    ; Next
    IniWrite('save.ini', 'Wochentag', 'tage', $checked)
    Msgbox(0,"", $time)
    IniWrite('save.ini', 'Startzeit', 'Uhr', GUICtrlRead($time))

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

    EndFunc

    [/autoit]


    Und so erstelle ich die Listvieweinträge:

    [autoit]

    If FileExists(@ScriptDir & '\save.ini') Then
    $ini = IniRead(@ScriptDir & '\save.ini', "Wochentag", "tage", 0)
    For $i = 6 To 0 Step -1
    If BitAND($ini, 2 ^ $i) Then
    GUICtrlSetState($arCheckBox[$i], $GUI_CHECKED)
    EndIf
    Next
    Local $aData = IniReadSection(@ScriptDir&"\save.ini","Quelle-Ziele")
    _ArrayDisplay($aData)
    For $i = 1 To UBound($aData) - 1
    GUICtrlCreateListViewItem($aData[$i][0] & "|" & $aData[$i][1],$hListView)
    Next
    EndIf

    [/autoit]


    So sieht meine ini aus:

    [Quelle-Ziele]
    F:\0=Systemsteuerung0
    C:\1=::{20D04FE0-3AEA-1069-A2D8-08002B30309D}\::{416651E4-9C3C-11D9-8BDE-F66BAD1E3F3A}1
    C:\0=C:\temp0
    C:\WINDOWS1=F:\1

    da ich eine zahl hinter dem Pfad mitschreibe damit er mir nicht den eintrag immer wieder ersetzt,
    stehe ich vor dem Problem das er wenn er mir den eintrag erstellet die zahl mit gibt kann mir da jemand einen tipp geben ...

    Danke

    SubZero

    lg SubZero ;)
    ==========================================================================

    "Der Computer ist die logische Weiterentwicklung des Menschen: Intelligenz ohne Moral."

  • Irgendwie Verstehe ich das aber nicht??
    Wie kann ich den dann _GUICtrlListView_GetItemText übergeben ?
    Was ist dann an der func _iniwrite() falsch ?

    [autoit]

    Func _iniwrite()
    ;FileDelete($ini)
    Local $checked = 0
    For $i = 0 To 6
    If BitAND(GUICtrlRead($arCheckBox[$i]), $GUI_CHECKED) Then
    $checked = BitOR($checked, 2 ^ $i)
    EndIf

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

    Next
    For $i = 0 To _GUICtrlListView_GetItemCount($hListView) - 1;hier zählst du die einträge
    $var1 = _GUICtrlListView_GetItemText($hListView, $i, 0)
    $var2 = _GUICtrlListView_GetItemText($hListView, $i, 1)
    ;IniWrite('save.ini', 'Backup', 'Quelle'&$i, $var1)
    ;IniWrite('save.ini', 'Backup', 'Ziel'&$i, $var2)

    IniWrite('save.ini', 'Quelle-Ziele', $var1&$i, $var2&$i)


    Next
    ; Next
    IniWrite('save.ini', 'Wochentag', 'tage', $checked)
    Msgbox(0,"", $time)
    IniWrite('save.ini', 'Startzeit', 'Uhr', GUICtrlRead($time))

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

    EndFunc

    [/autoit]

    lg SubZero ;)
    ==========================================================================

    "Der Computer ist die logische Weiterentwicklung des Menschen: Intelligenz ohne Moral."