Problem mit Ini Einträgen

  • Hallo,

    Ich versuche eine Gui zu erstellen wo man ganz bequem die Radiosender verändern kann. Aber leider funkt das nicht ganz reibungslos und es kommen öfters Fehler. Wie hier:
    [Blockierte Grafik: http://download.lima-city.de/deepred/Bilder/761089534.png]

    aber manchmal funkt es und manchmal leider nicht.
    Kann mir pls jemand helfen.

  • also wenn ichs so schreibe:
    $read_24 = IniRead(@ScriptDir & "\Sender.ini", "index", $sendername, "")
    funktionierts

  • ok, dann sag bitte nochmal genau, wann der fehler auftritt.
    ich bekomms nicht hin, dass ich nen fehler bekomme ;)

  • das problem ist auf jedenfall, wenn du die Internetadresse änderst.
    wenn du das tust, dann wird der inieintrag vom server gelöscht.
    desweiteren solltest du nicht mehrere sendernamen mit dem namen "1" haben, da es sonst mit dem iniread nichtmehr so ganz funktioniert.

    habe nicht genau drauf geschaut aber das mit dem iniwrite bei der internetadresse solltest du dir nochmal anschauen.

    • Offizieller Beitrag

    Dein Fehler liegt in den zeilen 67,68. Das muß so heißen :

    [autoit]

    $sendername = _GUICtrlListView_GetItemText($hWnd, $indx[0], 0)
    $sendername2 = _GUICtrlListView_GetItemText($hWnd, $indx[0], 1)

    [/autoit]
    • Offizieller Beitrag

    Also, hab mal en bischen getestet.

    1. Solltest du verhindern das der Sendername gleich ist. Jeder Sendername ist ein INIKEY. Wen du also mehrere gleiche Namen hast werden die als 1 Key abgespeichert.

    2. Wie schon erwähnt sollte in Zeile 67,68 folgendes stehen.

    [autoit]

    $sendername = _GUICtrlListView_GetItemText($hWnd, $indx[0], 0)
    $sendername2 = _GUICtrlListView_GetItemText($hWnd, $indx[0], 1)

    [/autoit]

    3. du hast einen fehler in Zeile 84 das sollte drinstehen:

    [autoit]

    $read_23 = IniRead(@ScriptDir & "\Sender.ini", "index", $sendername, "ERROR")

    [/autoit]

    du rufst mit deiner Zeile

    [autoit]

    $read_23 = IniRead(@ScriptDir & "\Sender.ini", "index", $sendername2, "ERROR")

    [/autoit]

    Den Indexschlüssel der Senderbeschreibung und nicht des Sendernamens auf.

    Zeile 85 ist auch falsch

    [autoit]

    IniDelete(@ScriptDir & "\Sender.ini", "Index", $sendername2)

    [/autoit]

    demit versuchst du den Key Senderbeschreibung aus der Selektion Index zu löschen. Den gibt´s aber nicht .

    • Offizieller Beitrag

    Schmeiß auch noch zeile 86 raus .

    [autoit]

    IniWrite(@ScriptDir & "\Sender.ini", "Index", $newText, $read_23)

    [/autoit]


    die wird nicht gebraucht und ist falsch da du ja nicht den Sendername änderst sondern nur die URL .
    So würde in der Selektion INDEX ein Key mit dem Namen der URL erstellt mit den Werten Sendeurlnummer,Sendeplatznummer

    • Offizieller Beitrag

    So , jetzt mal das komplette abgeänderte Script . Probier mal das und sag was es macht oder nicht und bei was für ner Eingabe der Fehler kommt .

    Spoiler anzeigen
    [autoit]

    #cs ----------------------------------------------------------------------------

    AutoIt Version: 3.2.13.12 (beta)
    Author: myName

    Script Function:
    Template AutoIt script.

    #ce ----------------------------------------------------------------------------

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

    ; Script Start - Add your code below here

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

    #include <ButtonConstants.au3>
    #include <GUIConstantsEx.au3>
    #include <ListViewConstants.au3>
    #include <WindowsConstants.au3>
    #include <GuiListView.au3>

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

    $Form1 = GUICreate("Sender Verwalten", 563, 384, 232, 236)
    GUISetBkColor(0x708FDF)
    $ListView1 = GUICtrlCreateListView("Name des Senders:|Internetadresse:", 0, 0, 458, 382)
    $Button1 = GUICtrlCreateButton("Neu", 472, 80, 75, 25, 0)
    $Button2 = GUICtrlCreateButton("Löschen", 472, 160, 75, 25, 0)
    $Input1 = GUICtrlCreateInput("Suchen...", 461, 8, 97, 21)

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

    _GUICtrlListView_SetColumnWidth($ListView1, 0, 120)
    _GUICtrlListView_SetColumnWidth($ListView1, 1, 317)

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

    $readsections = IniReadSection(@ScriptDir & "\sender.ini", "Sendername")
    $readsections2 = IniReadSection(@ScriptDir & "\sender.ini", "Senderurl")
    For $varforone = 1 To $readsections[0][0]


    GUICtrlCreateListViewItem($readsections[$varforone][1] & "|" & $readsections2[$varforone][1], $ListView1)
    Next

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

    _GUICtrlListView_RegisterSortCallBack($ListView1)

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

    GUISetState(@SW_SHOW)

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

    Global $old

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

    While 1
    $nMsg = GUIGetMsg()
    Switch $nMsg
    Case $GUI_EVENT_CLOSE
    Exit

    Case $Input1
    $iI = _GUICtrlListView_FindInText($ListView1, GUICtrlRead($Input1))
    _GUICtrlListView_SetItemSelected($ListView1, $iI)

    Case $ListView1 ;sortieren
    _GUICtrlListView_SortItems($ListView1, GUICtrlGetState($ListView1))

    Case $GUI_EVENT_SECONDARYUP
    $hWnd = ControlGetHandle('', '', $ListView1)
    $indx = _GUICtrlListView_SubItemHitTest($hWnd)
    $newText = InputBox('Wert ändern', "Hier können Sie Die Sender bearbeiten.", _GUICtrlListView_GetItemText($hWnd, $indx[0], $indx[1]))
    $sendername = _GUICtrlListView_GetItemText($hWnd, $indx[0], 0)
    $Senderbeschreibung = _GUICtrlListView_GetItemText($hWnd, $indx[0], 1)

    If $indx[1] = 0 Then
    If Not $newText = "" Then
    $read_24 = IniRead(@ScriptDir & "\Sender.ini", "index", $sendername, "ERROR")
    $stringsplit4 = StringSplit($read_24, ",")
    IniWrite(@ScriptDir & "\Sender.ini", "Sendername", $stringsplit4[2], $newText)
    IniDelete(@ScriptDir & "\Sender.ini", "Index", $sendername)
    IniWrite(@ScriptDir & "\Sender.ini", "Index", $newText, $read_24)
    If $newText <> '' Then _GUICtrlListView_SetItemText($hWnd, $indx[0], $newText, 0)
    EndIf
    Else
    If Not $newText = "" Then
    $read_23 = IniRead(@ScriptDir & "\Sender.ini", "index", $sendername, "ERROR")
    $stringsplit3 = StringSplit($read_23, ",")
    IniWrite(@ScriptDir & "\Sender.ini", "Senderurl", $stringsplit3[1], $newText)
    If $newText <> '' Then _GUICtrlListView_SetItemText($hWnd, $indx[0], $newText, 1)
    EndIf
    EndIf

    EndSwitch


    $aInfo = GUIGetCursorInfo($Form1)

    If $aInfo[4] = $Input1 Then
    If $aInfo[4] <> $old Then
    $old = $aInfo[4]
    GUICtrlSetData($Input1, "")
    EndIf
    Else
    If $aInfo[4] <> $old Then
    $old = $aInfo[4]
    GUICtrlSetData($Input1, "Suchen...")
    EndIf
    EndIf
    WEnd

    [/autoit]

    Benutze dafür aber deine Ursprungsini .

    Edit: Hab gerade nix anderes zu tun, deshalb habe ich noch eine Fehlerabfrage eingebaut .

    Spoiler anzeigen
    [autoit]

    #cs ----------------------------------------------------------------------------

    AutoIt Version: 3.2.13.12 (beta)
    Author: myName

    Script Function:
    Template AutoIt script.

    #ce ----------------------------------------------------------------------------

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

    ; Script Start - Add your code below here

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

    #include <ButtonConstants.au3>
    #include <GUIConstantsEx.au3>
    #include <ListViewConstants.au3>
    #include <WindowsConstants.au3>
    #include <GuiListView.au3>

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

    $Form1 = GUICreate("Sender Verwalten", 563, 384, 232, 236)
    GUISetBkColor(0x708FDF)
    $ListView1 = GUICtrlCreateListView("Name des Senders:|Internetadresse:", 0, 0, 458, 382)
    $Button1 = GUICtrlCreateButton("Neu", 472, 80, 75, 25, 0)
    $Button2 = GUICtrlCreateButton("Löschen", 472, 160, 75, 25, 0)
    $Input1 = GUICtrlCreateInput("Suchen...", 461, 8, 97, 21)

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

    _GUICtrlListView_SetColumnWidth($ListView1, 0, 120)
    _GUICtrlListView_SetColumnWidth($ListView1, 1, 317)

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

    $readsections = IniReadSection(@ScriptDir & "\sender.ini", "Sendername")
    $readsections2 = IniReadSection(@ScriptDir & "\sender.ini", "Senderurl")
    For $varforone = 1 To $readsections[0][0]


    GUICtrlCreateListViewItem($readsections[$varforone][1] & "|" & $readsections2[$varforone][1], $ListView1)
    Next

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

    _GUICtrlListView_RegisterSortCallBack($ListView1)

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

    GUISetState(@SW_SHOW)

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

    Global $old

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

    While 1
    $nMsg = GUIGetMsg()
    Switch $nMsg
    Case $GUI_EVENT_CLOSE
    Exit

    Case $Input1
    $iI = _GUICtrlListView_FindInText($ListView1, GUICtrlRead($Input1))
    _GUICtrlListView_SetItemSelected($ListView1, $iI)

    Case $ListView1 ;sortieren
    _GUICtrlListView_SortItems($ListView1, GUICtrlGetState($ListView1))

    Case $GUI_EVENT_SECONDARYUP
    $hWnd = ControlGetHandle('', '', $ListView1)
    $indx = _GUICtrlListView_SubItemHitTest($hWnd)
    $newText = InputBox('Wert ändern', "Hier können Sie Die Sender bearbeiten.", _GUICtrlListView_GetItemText($hWnd, $indx[0], $indx[1]))
    $sendername = _GUICtrlListView_GetItemText($hWnd, $indx[0], 0)
    $Senderbeschreibung = _GUICtrlListView_GetItemText($hWnd, $indx[0], 1)
    if $indx[1] = 0 and Sendernameabfrage($newText,$sendername) = true then
    msgbox(0,"Fehler","Sendername schon vergeben")
    ContinueCase
    endif

    If $indx[1] = 0 Then
    If Not $newText = "" Then
    $read_24 = IniRead(@ScriptDir & "\Sender.ini", "index", $sendername, "ERROR")
    $stringsplit4 = StringSplit($read_24, ",")
    IniWrite(@ScriptDir & "\Sender.ini", "Sendername", $stringsplit4[2], $newText)
    IniDelete(@ScriptDir & "\Sender.ini", "Index", $sendername)
    IniWrite(@ScriptDir & "\Sender.ini", "Index", $newText, $read_24)
    If $newText <> '' Then _GUICtrlListView_SetItemText($hWnd, $indx[0], $newText, 0)
    EndIf
    Else
    If Not $newText = "" Then
    $read_23 = IniRead(@ScriptDir & "\Sender.ini", "index", $sendername, "ERROR")
    $stringsplit3 = StringSplit($read_23, ",")
    IniWrite(@ScriptDir & "\Sender.ini", "Senderurl", $stringsplit3[1], $newText)
    If $newText <> '' Then _GUICtrlListView_SetItemText($hWnd, $indx[0], $newText, 1)
    EndIf
    EndIf

    EndSwitch


    $aInfo = GUIGetCursorInfo($Form1)

    If $aInfo[4] = $Input1 Then
    If $aInfo[4] <> $old Then
    $old = $aInfo[4]
    GUICtrlSetData($Input1, "")
    EndIf
    Else
    If $aInfo[4] <> $old Then
    $old = $aInfo[4]
    GUICtrlSetData($Input1, "Suchen...")
    EndIf
    EndIf
    WEnd

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

    Func Sendernameabfrage ($NeuName,$AltName )
    $readselections3 = IniReadSection(@ScriptDir & "\sender.ini", "Sendername "); Alles Sendername aus INI auslesen
    For $i = 1 to $readselections3[0][0]
    if $readselections3[$i][1] = $NeuName and $readselections3[$i][1] <> $AltName Then Return True; Ist neuer Name schon vorhanden und neur Name nicht alter Name dann Return Wahr
    next
    EndFunc

    [/autoit]