mit ini arbeiten hilfe bei IniReadSection

  • Ich arbeite öfter mit Ini datein.
    Zb um INfos zu hinterlegen.

    Nun habe ich dort zb

    [Abteilungen]
    Abteilung1=110
    Abteilung2=220


    Nun kann ich das auslesen und in Variablen speichern.
    So weit So gut das ist ohne probleme auch in der Ausgabe Möglich.

    Nun wollte ich jedoch zur Auswahl der Variable ein Dropdown einbaun.
    Welches beim starten des Programmes immer die ini datei durchsucht.
    Und alle Abteilungen im DropDown angibt.
    Wenn ich dies dann auswähle will ihc natürlich wie vorher den wert übergeben ins Formular.

    Hat da jemand ne idee für mich?

    Gruß

    2 Mal editiert, zuletzt von DummDumm (14. Oktober 2009 um 17:20)

  • Probier es mal in etwa so:

    [autoit]

    #include <GUIConstantsEx.au3>
    #include <ComboConstants.au3>
    ;--
    GUICreate("")
    ;--> Hier gehts um die Wurst
    $DropDownListe = GUICtrlCreateCombo("", 100, 100, 100, 30, $CBS_DROPDOWNLIST)
    $Abteilungsnummer = 1
    While IniRead("Abteilung.ini","Abteilungen","Abteilung"&$Abteilungsnummer,"") <> ""
    GUICtrlSetData( $DropDownListe, "Abteilung "&$Abteilungsnummer,"" )
    $Abteilungsnummer = $Abteilungsnummer + 1
    WEnd

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

    GUISetState()
    ;--
    While 1
    $msg = GUIGetMsg()
    Switch $msg
    Case $GUI_EVENT_ClOSE
    Exit
    EndSwitch
    WEnd

    [/autoit]

    Nicht perfekt aber sollte seinen Zweck erfüllen

    Erklärung:

    Am anfang erstellt er die Dropdownliste. Diese ist zunächst leer. Dann beginnt er eine Schleife
    Wenn das Auslesen von "Abteilung"&$Abteilungsnummer (Was beim ersten Durchlauf "Abteilung1" entspricht) KEINEN leeren String ausgibt, dann trägt er "Abteilung 1" in die Dropdownliste ein.
    Danach erhöht er die Variable $Abteilungsnummer um 1. Beim nächsten Schleifendurchlauf macht er also das gleiche wie grade, nur mit "Abteilung2". Wenn dies wieder keinen leeren String ergibt, geht das gleiche SPiel mit Abteilung3 von vorne los. Ansonsten hört er auf einzutragen.
    (While IniRead("Abteilung.ini","Abteilungen","Abteilung"&$Abteilungsnummer,"") <> "")

  • okay wahr ev mein fehler
    die Abteilungen bekommen natürlich namen und werden nicht durchnummeriert.


    also ich sag mal nen Fallbeislpiel:

    [Abteilung]
    Aufträge=110
    Technisch=220


    Später fügt dann einer zb hinzu
    Beschwerde=330

    dann soll das tool das beim neu starten automatisch mit hinzufügen ins Drop Down

  • Hmm das macht das ganze ein bisschen komplizierter.
    Ich hab mir hier was überlegt - da ich selbst noch anfägner bin gibts es mit sicherheit bessere Lösungen

    Deine Abteilung.ini sieht dann so aus:

    Spoiler anzeigen


    [AbteilName]
    Abteilung1=Aufträge
    Abteilung2=Technisch

    [Abteilungen]
    Aufträge=110
    Technisch=220

    Und dein Script so:

    Spoiler anzeigen
    [autoit]

    #include <GUIConstantsEx.au3>
    #include <ComboConstants.au3>
    ;--
    GUICreate("")
    ;--> Hier gehts um die Wurst
    $DropDownListe = GUICtrlCreateCombo("", 100, 100, 100, 30, $CBS_DROPDOWNLIST)
    $Abteilungsnummer = 1
    While IniRead("Abteilung.ini","AbteilName","Abteilung"&$Abteilungsnummer,"") <> ""
    $AbteilungsName = IniRead("Abteilung.ini","AbteilName","Abteilung"&$Abteilungsnummer,"")
    GUICtrlSetData( $DropDownListe, $AbteilungsName,"" )
    $Abteilungsnummer = $Abteilungsnummer + 1
    WEnd

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

    GUISetState()
    ;--
    While 1
    $msg = GUIGetMsg()
    Switch $msg
    Case $GUI_EVENT_ClOSE
    Exit
    EndSwitch
    WEnd

    [/autoit]

    Jetzt muss aber bei jedem eintrag der Name UND der wert eingetragen werden. Also 2 Werte.
    Gruß SEuBo

  • ja das ne idee da hast du recht.
    Aber halt auch Tippfehler vorprogrammiert :)
    Mal sehen besser wie garnicht da hast du recht.
    Aber ev hat auch jemand noch ne andere idee

    Also ich habe gesehen ich kann ja zb mit IniReadSection sollte es gehen.
    aber weiß leider nicht wie ich dies mit einem Drop down verbinden könnte.

    Einmal editiert, zuletzt von DummDumm (14. Oktober 2009 um 16:56)

  • Wegen der Tippfehler - Lass es doch einfach hiermit eintragen:

    Spoiler anzeigen
    [autoit]

    #include <GUIConstantsEx.au3>
    #include <ComboConstants.au3>
    #include <GUIComboBox.au3>
    GUICreate("Eintragen...",160,130)
    GUISetFont(12)
    $DropDownListe = GUICtrlCreateCombo("", 20, 20, 120, 35)
    $Abteilungsnummer = 1
    While IniRead("Abteilung.ini","AbteilName","Abteilung"&$Abteilungsnummer,"") <> ""
    $AbteilungsName = IniRead("Abteilung.ini","AbteilName","Abteilung"&$Abteilungsnummer,"")
    GUICtrlSetData( $DropDownListe, $AbteilungsName,"" )
    $Abteilungsnummer = $Abteilungsnummer + 1
    WEnd
    If IniRead("Abteilung.ini","AbteilName","Abteilung1","") <> "" Then
    _GUICtrlComboBox_SetCurSel($DropDownListe, 0)
    EndIf
    $Input = GUICtrlCreateInput("",20,50,120,25)
    $Speichern = GUICtrlCreateButton("Eintragen..", 20,80,120,25)

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

    GUISetState()
    ;--
    Func Speichern()
    $Abteilungsnummer = 0
    DO
    $Abteilungsnummer = $Abteilungsnummer + 1
    If IniRead("Abteilung.ini","AbteilName","Abteilung"&$Abteilungsnummer,"") = "" Then ExitLoop
    Until IniRead("Abteilung.ini","AbteilName","Abteilung"&$Abteilungsnummer,"") = GUICtrlRead($DropDownListe)

    IniWrite("Abteilung.ini","AbteilName","Abteilung"&$Abteilungsnummer,GUICtrlRead($DropDownListe))

    IniWrite("Abteilung.ini","Abteilungen",GUICtrlRead($DropDownListe),GUICtrlRead($Input))
    MsgBox(0,"","Speichern Erfolgreich",1)
    ShellExecute(@ScriptName)
    Exit
    EndFunc
    While 1
    $msg = GUIGetMsg()
    Switch $msg
    Case $GUI_EVENT_ClOSE
    Exit
    Case $Speichern
    Speichern()
    EndSwitch
    WEnd

    [/autoit]

    Habs nur auf die schnelle gemacht ist also weder schick, noch kann ich für 100% funktionalität garantieren...

    -> Damit es auch funktioniert muss es vorher compiliert werden (!)

  • habe es selber hin bekomme noch

    [autoit]

    $var = IniReadSection("abteilung.ini", "Abteilung")
    For $i = 1 To $var[0][0]
    GUICtrlSetData(-1, $var[$i][0], "Eintrag3")
    Next
    $Button59 = GUICtrlCreateButton("Senden", 70, 90, 57, 25, $WS_GROUP)

    [/autoit]