Mehrzeiliger Text in einem INI-Key speichern

  • Hallo an alle,

    bin bei der Entwicklung eines Notizzettel-tools an ein Problem gestosen! hier erst mal mein bisheriges script:

    [autoit]


    #Include <WindowsConstants.au3>
    #Include <GuiConstantsEx.au3>
    #Include <File.au3>
    #Include <EditConstants.au3>
    #NoTrayIcon
    Opt("TrayMenuMode", 1)
    Opt("GUIResizeMode", 0)
    If Not FileExists(@ScriptDir & "\data.ini") Then
    _FileCreate(@ScriptDir & "\data.ini")
    $sectionSystem="AnzahlNotizen=0" & @LF & "AnzahlErinnerungen=0" & @LF & "DesktopWidth=" & @DesktopWidth & @LF & "DesktopHeight=" & @DesktopHeight
    IniWriteSection("data.ini", "SYSTEM", $sectionSystem)
    Else
    __rebuildNotes()
    EndIf
    $new=TrayCreateMenu("Neu")
    $newNote=TrayCreateItem("Notiz", $new)
    $newReminder=TrayCreateItem("Erinnerung", $new)
    TrayCreateItem("")
    $deleteAllItems=TrayCreateItem("Alle Einträge löschen")
    TrayCreateItem("")
    $exitTray=TrayCreateItem("Beenden")
    TraySetState()
    While True
    __checkDesktopSize(@DesktopWidth, @DesktopHeight)
    $msg=TrayGetMsg()
    Select
    Case $msg=0
    ContinueLoop
    Case $msg=$exitTray
    If IniRead(@ScriptDir & "\data.ini", "SYSTEM", "AnzahlNotizen", "")>0 Then
    For $i=0 To IniRead(@ScriptDir & "\data.ini", "SYSTEM", "AnzahlNotizen", "")-1
    $text=ControlGetText("Notiz " & $i, "", "Edit1")
    $pos=WinGetPos("Notiz " & $i)
    $sectionGUI="PosX=" & $pos[0] & @LF & "PosY=" & $pos[1] & @LF & "Width=" & $pos[2] & @LF & "Heigth=" & $pos[3] & @LF & "Text=" & $text
    IniWriteSection(@ScriptDir & "\data.ini", $i, $sectionGUI)
    Next
    EndIf
    ExitLoop
    Case $msg=$newNote
    __createNewNote()
    EndSelect
    WEnd
    Exit
    Func __createNewNote()
    GUICreate("Notiz " & IniRead(@ScriptDir & "\data.ini", "SYSTEM", "AnzahlNotizen", ""), 200, 200, -1, -1, $WS_SIZEBOX, $WS_EX_TOOLWINDOW)
    GUICtrlCreateEdit("", 0, 0, 198, 198, BitOR($ES_MULTILINE, $ES_WANTRETURN))
    GUISetState()
    IniWrite(@ScriptDir & "\data.ini", "SYSTEM", "AnzahlNotizen", IniRead(@ScriptDir & "\data.ini", "SYSTEM", "AnzahlNotizen", "")+1)
    EndFunc
    Func __rebuildNotes()
    For $i=0 To IniRead(@ScriptDir & "\data.ini", "SYSTEM", "AnzahlNotizen", "")-1
    GUICreate("Notiz " & $i, IniRead(@ScriptDir & "\data.ini", $i, "Width", ""), IniRead(@ScriptDir & "\data.ini", $i, "Heigth", ""), IniRead(@ScriptDir & "\data.ini", $i, "PosX", ""), IniRead(@ScriptDir & "\data.ini", $i, "PosY", ""), $WS_SIZEBOX, $WS_EX_TOOLWINDOW)
    GUICtrlCreateEdit(IniRead(@ScriptDir & "\data.ini", $i, "Text", ""), 0, 0, IniRead(@ScriptDir & "\data.ini", $i, "Width", "")-2, IniRead(@ScriptDir & "\data.ini", $i, "Heigth", "")-2, BitOR($ES_MULTILINE, $ES_WANTRETURN))
    GUISetState()
    Next
    EndFunc
    Func __checkDesktopSize($dWidth, $dHeight)
    If $dWidth<>IniRead(@ScriptDir & "\data.ini", "SYSTEM", "DesktopWidth", "") Or $dHeight<>IniRead(@ScriptDir & "\data.ini", "SYSTEM", "DesktopHeight", "") Then
    ; Fenster an neue Desktopgröße anpassen
    EndIf
    EndFunc

    [/autoit]

    zum testen könnt ihr einfach über das tray menü eine neue notiz anlegen und das edit mit mehrzeiligem text füllen... wenn ihr jetzt das programm schließt, werden alle notizen in der ini abgespeichert (also position der fenster usw und halt eben auch der text des edit feldes MEHRZEILIG!!!!!)

    beim lesen des keys in der

    [autoit]

    __rebuildNotes()

    [/autoit]

    funktion wird dann eben auch nur die entsprechende zeile aus der ini gelesen und nicht alle zeilen...

    wie kann ich es jetzt bewerkstellen, dass der key richtig gespeichert und richtig ausgelesen wird?!?!?

    danke schonmal für eure hilfe

    Einmal editiert, zuletzt von oliverh (30. Januar 2009 um 14:28)

  • hmm ja, so würde es auf jeden fall gehen, aber find das halt nicht so schön :(

    weiß sonst noch jemand nen rat?

  • jeeeeah super! dankeschön...

    da hätt ich auch selber drauf kommen können X(

    hier noch mein verbesserter code:

    [autoit]


    #Include <WindowsConstants.au3>
    #Include <GuiConstantsEx.au3>
    #Include <File.au3>
    #Include <EditConstants.au3>
    #NoTrayIcon
    Opt("TrayMenuMode", 1)
    Opt("GUIResizeMode", 0)
    If Not FileExists(@ScriptDir & "\data.ini") Then
    _FileCreate(@ScriptDir & "\data.ini")
    $sectionSystem="AnzahlNotizen=0" & @LF & "AnzahlErinnerungen=0" & @LF & "DesktopWidth=" & @DesktopWidth & @LF & "DesktopHeight=" & @DesktopHeight
    IniWriteSection("data.ini", "SYSTEM", $sectionSystem)
    Else
    __rebuildNotes()
    EndIf
    $new=TrayCreateMenu("Neu")
    $newNote=TrayCreateItem("Notiz", $new)
    $newReminder=TrayCreateItem("Erinnerung", $new)
    TrayCreateItem("")
    $deleteAllItems=TrayCreateItem("Alle Einträge löschen")
    TrayCreateItem("")
    $exitTray=TrayCreateItem("Beenden")
    TraySetState()
    While True
    __checkDesktopSize(@DesktopWidth, @DesktopHeight)
    $msg=TrayGetMsg()
    Select
    Case $msg=0
    ContinueLoop
    Case $msg=$exitTray
    If IniRead(@ScriptDir & "\data.ini", "SYSTEM", "AnzahlNotizen", "")>0 Then
    For $i=0 To IniRead(@ScriptDir & "\data.ini", "SYSTEM", "AnzahlNotizen", "")-1
    $textBeforeReplace=ControlGetText("Notiz " & $i, "", "Edit1")
    $text=StringReplace($textBeforeReplace, @CRLF, Chr(160))
    $pos=WinGetPos("Notiz " & $i)
    $sectionGUI="PosX=" & $pos[0] & @LF & "PosY=" & $pos[1] & @LF & "Width=" & $pos[2] & @LF & "Heigth=" & $pos[3] & @LF & "Text=" & $text
    IniWriteSection(@ScriptDir & "\data.ini", $i, $sectionGUI)
    Next
    EndIf
    ExitLoop
    Case $msg=$newNote
    __createNewNote()
    EndSelect
    WEnd
    Exit
    Func __createNewNote()
    GUICreate("Notiz " & IniRead(@ScriptDir & "\data.ini", "SYSTEM", "AnzahlNotizen", ""), 200, 200, -1, -1, $WS_SIZEBOX, $WS_EX_TOOLWINDOW)
    GUICtrlCreateEdit("", 0, 0, 198, 198, BitOR($ES_MULTILINE, $ES_WANTRETURN))
    GUISetState()
    IniWrite(@ScriptDir & "\data.ini", "SYSTEM", "AnzahlNotizen", IniRead(@ScriptDir & "\data.ini", "SYSTEM", "AnzahlNotizen", "")+1)
    EndFunc
    Func __rebuildNotes()
    For $i=0 To IniRead(@ScriptDir & "\data.ini", "SYSTEM", "AnzahlNotizen", "")-1
    GUICreate("Notiz " & $i, IniRead(@ScriptDir & "\data.ini", $i, "Width", ""), IniRead(@ScriptDir & "\data.ini", $i, "Heigth", ""), IniRead(@ScriptDir & "\data.ini", $i, "PosX", ""), IniRead(@ScriptDir & "\data.ini", $i, "PosY", ""), $WS_SIZEBOX, $WS_EX_TOOLWINDOW)
    GUICtrlCreateEdit(StringReplace(IniRead(@ScriptDir & "\data.ini", $i, "Text", ""), Chr(160), @CRLF), 0, 0, IniRead(@ScriptDir & "\data.ini", $i, "Width", "")-2, IniRead(@ScriptDir & "\data.ini", $i, "Heigth", "")-2, BitOR($ES_MULTILINE, $ES_WANTRETURN))
    GUISetState()
    Next
    EndFunc
    Func __checkDesktopSize($dWidth, $dHeight)
    If $dWidth<>IniRead(@ScriptDir & "\data.ini", "SYSTEM", "DesktopWidth", "") Or $dHeight<>IniRead(@ScriptDir & "\data.ini", "SYSTEM", "DesktopHeight", "") Then
    ; Fenster an neue Desktopgröße anpassen
    EndIf
    EndFunc

    [/autoit]