Texteld(er) und evtl. andere Elemente auf Änderungen überwachen

  • Hallo, ich habe mal wieder eine Frage:

    Das Problem betrifft die Buttons: "Speichern", "Übernehmen" und "Abbrechen". Ich möchte nach dem Drücken des "Übernehmen"-Buttons den "Abbrechen"-Button ausgrauen, und bei Veränderungen in Textfeldern (oder anderen Elementen) wieder aktivieren. "Speichern" schließt das ganze Dialogfeld, daher ist nur der "Übernehmen"-Button das Problem. Klar könnte ich ihn auch weglassen, oder mir das Ausgrauen sparen - es interessiert mich nur einfach, ob es bzw. wie es gehen könnte.

    Meine Versuche bisher:

    [autoit]


    While 1
    $nMsg = GUIGetMsg(1)
    Select
    Case $nMsg[0] = $Textfeld_1 Or $nMsg[0] = $Textfeld_2
    GUICtrlSetState($cancel, $GUI_ENABLE)
    EndSelect
    WEnd

    [/autoit]

    Nun weren die Änderungen im Textfeld zwar abgefangen, aber erst wenn der Cursor das Feld wieder verläßt (über Tab oder Mausklick).

    Gibt es denn eine Möglichkeit alle Tastendrücke (und evtl. auch DragnDrops) abzufangen, um das "Problem" zu lösen?

    Gruß
    trainer

    Einmal editiert, zuletzt von ip_trainer (28. August 2009 um 14:17)

    • Offizieller Beitrag

    Beim drücken des Übernehmen Buttons, solltest du den Inhalt der Inputs in eine Variable speichern. Baue eine Abfrage innerhalb deiner Hauptschleife ein und Prüfe ob sich der Inhalt der Input´s geändert hat.


    Edit : Wenn du dein Script postest, kann man da was machen.

  • Alternativ könnte man auch über WM_Command abfragen ob sich beim Input was verändert.

    Bsp.

    Spoiler anzeigen
    [autoit]


    #include <GuiListBox.au3>
    #include <WindowsConstants.au3>
    #include <File.au3>

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

    Local $Ordner = 'C:\Programme'
    Local $TempFile = _TempFile()
    Global $aOrdner
    HotKeySet("{ENTER}", "_Open_Ordner")

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

    RunWait(@ComSpec & " /c " & 'dir "'&$Ordner&'" /ad /b > "'&$TempFile&'"', "", @SW_HIDE)
    _FileReadToArray($TempFile, $aOrdner)
    FileDelete($TempFile)

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

    Opt('GUIOnEventMode', 1)

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

    $gui = GUICreate('Schnelle Ordnerauswahl by funkey', 400, 600, -1, -1)
    GUISetOnEvent(-3, '_Ende')
    GUIRegisterMsg($WM_COMMAND, "WM_COMMAND")

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

    Global $Input = GUICtrlCreateInput('', 10, 10, 380, 20)
    Global $List = GUICtrlCreateList('', 10, 40, 380, 560)
    Global $hList = GUICtrlGetHandle(-1)

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

    For $i = 1 To $aOrdner[0]
    GUICtrlSetData(-1, $aOrdner[$i])
    Next

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

    GUISetState()

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

    While 1
    Sleep(100000)
    WEnd

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

    Func _Check_Eingabe($iwParam)
    switch $iwParam
    case 0x03000003
    _GUICtrlListBox_SetCurSel($hList, _GUICtrlListBox_FindString($hList, GUICtrlRead($Input)))
    EndSwitch
    EndFunc

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

    Func _Open_Ordner()
    If GUICtrlRead($List) <> "" Then ShellExecute($Ordner & '\' & GUICtrlRead($List))
    EndFunc

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

    Func _Ende()
    Exit
    EndFunc

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

    Func WM_COMMAND($hWnd, $iMsg, $iwParam, $ilParam)
    _Check_Eingabe($iwParam)
    Local $hWndFrom, $iIDFrom, $iCode, $hWndListBox
    If Not IsHWnd($List) Then $hWndListBox = GUICtrlGetHandle($List)
    $hWndFrom = $ilParam
    $iIDFrom = BitAND($iwParam, 0xFFFF) ; Low Word
    $iCode = BitShift($iwParam, 16) ; Hi Word
    Switch $hWndFrom
    Case $List, $hWndListBox
    Switch $iCode
    Case $LBN_DBLCLK
    _Open_Ordner()
    EndSwitch
    EndSwitch
    Return $GUI_RUNDEFMSG
    EndFunc ;==>WM_COMMAND (Bugfix - http://www.autoit.de)

    [/autoit]
  • Ok, danke schon mal für die schnellen Antworten!

    Raupi :

    [...] und Prüfe ob sich der Inhalt der Input´s geändert hat.

    Das ist ja genau das Problem, wie überprüfe ich das?
    Viel mehr Code ist es momentan noch nicht, am Anfang werden halt noch die GUI-Elemente erzeugt, das war's dann aber auch schon :) :

    [autoit]


    $save = GUICtrlCreateButton("Speichern", 368, 40, 75, 25, 0)
    $apply = GUICtrlCreateButton("Übernehmen", 368, 72, 75, 25, 0)
    $cancel = GUICtrlCreateButton("Abbrechen", 368, 120, 75, 25, 0)
    $Group2 = GUICtrlCreateGroup("Standard MSN und Port", 32, 32, 305, 89)
    $MSN_1 = GUICtrlCreateInput("", 88, 64, 89, 21)

    [/autoit]

    nuts:

    Vielen Dank, das würde wohl klappen, nur leider kann ich es nicht auf ein Textfeld ummünzen, soweit steige ich leider noch nicht durch. Vielleicht kannst du es noch ein bißchen konkreter machen, das wäre super!

    Gruß
    trainer

  • Verstehe ich nicht ganz, im Beispiel wird doch auf jede Änderung im Textfeld reagiert?

    Hast du mal ein lauffähiges Skript? Dann bastel ichs rein, sonst ists schwer vorstellbar was du eigentlich haben willst.

  • Super, danke!

    Spoiler anzeigen
    [autoit]


    #include <GUIConstantsEx.au3>
    #include <String.au3>

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

    ;Passwort-Zeichen definieren
    $ES_PASSWORD = 0x0020

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

    $Form1_1 = GUICreate("MoonyDialer Konfiguration", 484, 426, 323, 147)
    $Group1 = GUICtrlCreateGroup("Fritzbox-Einstellungen", 16, 8, 449, 401)
    $save = GUICtrlCreateButton("Speichern", 368, 40, 75, 25, 0)
    $apply = GUICtrlCreateButton("Übernehmen", 368, 72, 75, 25, 0)
    $cancel = GUICtrlCreateButton("Abbrechen", 368, 120, 75, 25, 0)
    $Group2 = GUICtrlCreateGroup("Standard MSN und Port", 32, 32, 305, 89)
    $MSN_1 = GUICtrlCreateInput("", 88, 64, 89, 21)
    $Label_MSN_1 = GUICtrlCreateLabel("MSN 1", 48, 64, 37, 17)
    GUICtrlSetResizing(-1, $GUI_DOCKRIGHT)
    $Label_Port_1 = GUICtrlCreateLabel("Zug. Portnr.", 197, 63, 60, 17)
    $Port_1 = GUICtrlCreateInput("", 261, 63, 65, 21)
    $Label1 = GUICtrlCreateLabel("... werden verwendet, falls keine Zuordnung möglich ist", 53, 95, 264, 17)
    GUICtrlCreateGroup("", -99, -99, 1, 1)
    $Group3 = GUICtrlCreateGroup("Weitere MSNs und Ports", 32, 136, 305, 137)
    $MSN_2 = GUICtrlCreateInput("", 85, 167, 89, 21)
    $Port_2 = GUICtrlCreateInput("", 261, 167, 65, 21)
    $MSN_3 = GUICtrlCreateInput("", 85, 199, 89, 21)
    $Port_3 = GUICtrlCreateInput("", 261, 199, 65, 21)
    $MSN_4 = GUICtrlCreateInput("", 85, 231, 89, 21)
    $Port_4 = GUICtrlCreateInput("", 261, 231, 65, 21)
    $Label_Port_4 = GUICtrlCreateLabel("Zug. Portnr.", 197, 231, 60, 17)
    $Label_Port_3 = GUICtrlCreateLabel("Zug. Portnr.", 197, 199, 60, 17)
    $Label_Port_2 = GUICtrlCreateLabel("Zug. Portnr.", 197, 167, 60, 17)
    $Label_MSN_2 = GUICtrlCreateLabel("MSN 2", 45, 167, 37, 17)
    GUICtrlSetResizing(-1, $GUI_DOCKRIGHT)
    $Label_MSN_3 = GUICtrlCreateLabel("MSN 3", 45, 199, 37, 17)
    GUICtrlSetResizing(-1, $GUI_DOCKRIGHT)
    $Label_MSN_4 = GUICtrlCreateLabel("MSN 4", 45, 231, 37, 17)
    GUICtrlSetResizing(-1, $GUI_DOCKRIGHT)
    GUICtrlCreateGroup("", -99, -99, 1, 1)
    $Group4 = GUICtrlCreateGroup("Passwort und IP-Adresse", 32, 288, 305, 105)
    $Passwort = GUICtrlCreateInput("", 109, 319, 217, 21, $ES_PASSWORD)
    $IP = GUICtrlCreateInput("", 109, 351, 217, 21)
    $Label_IP_Adresse = GUICtrlCreateLabel("IP-Adresse", 45, 351, 55, 17)
    $Label_Passwort = GUICtrlCreateLabel("Passwort", 45, 319, 47, 17)
    GUICtrlCreateGroup("", -99, -99, 1, 1)
    $Label_Hilfe = GUICtrlCreateLabel("Hilfe", 408, 368, 31, 20)
    GUICtrlSetFont(-1, 10, 400, 0, "MS Sans Serif")
    GUICtrlSetColor(-1, 0x0000FF)
    GUICtrlCreateGroup("", -99, -99, 1, 1)
    GUISetState(@SW_SHOW)

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

    ;INI-Datei auslesen
    $MSN_Port_Settings = IniReadSection ("moony_dialer_settings.ini", "MSN_Port_Settings")
    $FritzBox_Settings = IniReadSection ("moony_dialer_settings.ini", "FritzBox_Settings")
    If @error Then
    MsgBox(4096, "", "Fehler! Die ini-Datei ist nicht vorhanden oder fehlerhaft und wird neu erstellt.")

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

    ;Alte ini löschen
    FileRecycle ("moony_dialer_settings.ini")

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

    ;Neue ini erzeugen
    IniWrite("moony_dialer_settings.ini", "MSN_Port_Settings", "MSN_1", "")
    IniWrite("moony_dialer_settings.ini", "MSN_Port_Settings", "Port_1", "")
    IniWrite("moony_dialer_settings.ini", "MSN_Port_Settings", "MSN_2", "")
    IniWrite("moony_dialer_settings.ini", "MSN_Port_Settings", "Port_2", "")
    IniWrite("moony_dialer_settings.ini", "MSN_Port_Settings", "MSN_3", "")
    IniWrite("moony_dialer_settings.ini", "MSN_Port_Settings", "Port_3", "")
    IniWrite("moony_dialer_settings.ini", "MSN_Port_Settings", "MSN_4", "")
    IniWrite("moony_dialer_settings.ini", "MSN_Port_Settings", "Port_4", "")
    IniWrite("moony_dialer_settings.ini", "FritzBox_Settings", "Passwort", "")
    IniWrite("moony_dialer_settings.ini", "FritzBox_Settings", "IP_Adresse", "")

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

    ;...und wieder einlesen
    $MSN_Port_Settings = IniReadSection ("moony_dialer_settings.ini", "MSN_Port_Settings")
    $FritzBox_Settings = IniReadSection ("moony_dialer_settings.ini", "FritzBox_Settings")
    EndIf

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

    ;Werte in die Felder eintragen
    GUICtrlSetData($MSN_1, $MSN_Port_Settings[1][1])
    GUICtrlSetData($Port_1, $MSN_Port_Settings[2][1])
    GUICtrlSetData($MSN_2, $MSN_Port_Settings[3][1])
    GUICtrlSetData($Port_2, $MSN_Port_Settings[4][1])
    GUICtrlSetData($MSN_3, $MSN_Port_Settings[5][1])
    GUICtrlSetData($Port_3, $MSN_Port_Settings[6][1])
    GUICtrlSetData($MSN_4, $MSN_Port_Settings[7][1])
    GUICtrlSetData($Port_4, $MSN_Port_Settings[8][1])
    GUICtrlSetData($Passwort, _StringEncrypt(0, $FritzBox_Settings[1][1], "ETWAS INDIVIDUELLES",2))
    GUICtrlSetData($IP, $FritzBox_Settings[2][1])

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

    ;Die Funktionen _collect_data und _save_to_ini werden sowohl beim Speichern als auch beim Übernehmen verwendet, daher als Funktion
    Func _collectData()
    $MSN_Port_Settings[1][1] = GUICtrlRead($MSN_1)
    $MSN_Port_Settings[2][1] = GUICtrlRead($Port_1)
    $MSN_Port_Settings[3][1] = GUICtrlRead($MSN_2)
    $MSN_Port_Settings[4][1] = GUICtrlRead($Port_2)
    $MSN_Port_Settings[5][1] = GUICtrlRead($MSN_3)
    $MSN_Port_Settings[6][1] = GUICtrlRead($Port_3)
    $MSN_Port_Settings[7][1] = GUICtrlRead($MSN_4)
    $MSN_Port_Settings[8][1] = GUICtrlRead($Port_4)

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

    $FritzBox_Settings[1][1] = _StringEncrypt(1, GUICtrlRead($Passwort), "ETWAS INDIVIDUELLES",2)
    $FritzBox_Settings[2][1] = GUICtrlRead($IP)
    EndFunc

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

    Func _save_to_ini()
    IniWriteSection("moony_dialer_settings.ini", "MSN_Port_Settings", $MSN_Port_Settings)
    IniWriteSection("moony_dialer_settings.ini", "FritzBox_Settings", $FritzBox_Settings)
    EndFunc

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

    ;Meldungen der GUI abfangen
    While 1
    $nMsg = GUIGetMsg(1)
    ;... und auswerten:
    Select

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

    ; SAVE: Daten speichern und Fenster schließen
    Case $nMsg[0] = $save
    _collectData() ;Daten aus GUI auslesen
    _save_to_ini() ;Daten wieder in die .ini-Datei schreiben
    ExitLoop

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

    ; APPLY: Daten speichern, sonst nichts
    Case $nMsg[0] = $apply
    _collectData() ;Daten aus GUI auslesen
    _save_to_ini() ;Daten wieder in die .ini-Datei schreiben
    GUICtrlSetState($cancel, $GUI_DISABLE) ;Cancel-Button disablen

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

    ; CANCEL: Fenster schließen ohne zu speichern
    Case $nMsg[0] = $cancel
    ExitLoop

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

    ; Im Hilfefall...
    Case $nMsg[0] = $Label_Hilfe
    run("hh.exe moony_dialer_help.chm","")

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

    ;Bei Veränderungen in den Textfeldern den Cancel-Button wieder enabeln
    Case $nMsg[0] = $MSN_1 Or $nMsg[0] = $MSN_2 Or $nMsg[0] = $MSN_3 Or $nMsg[0] = $MSN_4 Or $nMsg[0] = $Port_1 Or $nMsg[0] = $Port_2 Or $nMsg[0] = $Port_3 Or $nMsg[0] = $Port_4
    GUICtrlSetState($cancel, $GUI_ENABLE)

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

    ; CLOSE-BUTTON: Rotes Kreuz schließt Fenster ohne zu speichern
    Case $nMsg[0] = $GUI_EVENT_CLOSE
    ExitLoop
    EndSelect
    WEnd

    [/autoit]

    3 Mal editiert, zuletzt von ip_trainer (28. August 2009 um 14:07)

    • Offizieller Beitrag

    Hier mal ein Beispiel wie du die Inputs prüfen kannst:

    [autoit]

    #include <WindowsConstants.au3>
    #include <GUIConstantsEx.au3>
    #Region ### START Koda GUI section ### Form=
    Global $Ergebnis1, $Ergebnis2, $State = True
    $Form1 = GUICreate("Form1", 625, 445, 192, 124)
    $Input1 = GUICtrlCreateInput("Beispielswert", 72, 32, 305, 21)
    $Input2 = GUICtrlCreateInput("Beispielswert2", 72, 72, 305, 21)
    $Button1 = GUICtrlCreateButton("Abbrechen", 56, 240, 75, 25, $WS_GROUP)
    $Button2 = GUICtrlCreateButton("Übernehmen", 176, 240, 75, 25, $WS_GROUP)
    $Button3 = GUICtrlCreateButton("Speichern", 312, 240, 75, 25, $WS_GROUP)
    GUISetState(@SW_SHOW)
    #EndRegion ### END Koda GUI section ###

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

    While 1
    $nMsg = GUIGetMsg()
    Switch $nMsg
    Case $GUI_EVENT_CLOSE
    Exit
    Case $Button2
    GUICtrlSetState($Button1, $GUI_DISABLE)
    MsgBox(0, "Info", "Daten wurden übernommen")
    $Ergebnis1 = GUICtrlRead($Input1)
    $Ergebnis2 = GUICtrlRead($Input2)
    $State = False
    EndSwitch
    If GUICtrlRead($Input1) <> $Ergebnis1 Or GUICtrlRead($Input2) <> $Ergebnis2 Then
    If $State = False Then
    GUICtrlSetState($Button1, $GUI_ENABLE)
    $State = Not $State
    EndIf
    EndIf
    WEnd

    [/autoit]

    Edit: Sehe gerade das du deine Code gepostet hast, leider zu spät.
    Kannst ja mal schaun ob du mit meinem Beispiel klar kommst und es auf dein Script übertragen kannst. Hab leider keine Zeit, muß weg.

  • Wahnsinn, ihr seid einach spitze.

    Sowas habe ich bisher noch in keinem Forum erlebt. So schnelle und freundliche Antworten auf offensichtlich (für die Antworter) recht einfach Fragen, ohne blöde Kommentare!

    :thumbup: Bleibt so, bitte!

    Gruß
    trainer

    • Offizieller Beitrag

    Wenn du nicht klarkommst, schick mit eine PN. Bin aber erst heute Abend wieder da.

  • Eine Varinate mti $WM_Command.

    Übernehmen graut den Cancel Buttons aus und Speichert den "Text" vom Input MSN_1.
    Eine Veränderung in MSN_1 aktiviert den Cancel Button wieder.
    Ist nur ein Beispiel, wenns Fragen beim Umbau gibt kannste dich ja nochmal melden.

    Spoiler anzeigen
    [autoit]


    #include <GUIConstantsEx.au3>
    #include <String.au3>
    #include <WindowsConstants.au3>
    ;Passwort-Zeichen definieren
    $ES_PASSWORD = 0x0020

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

    Global $text

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

    $Form1_1 = GUICreate("MoonyDialer Konfiguration", 484, 426, 323, 147)
    $Group1 = GUICtrlCreateGroup("Fritzbox-Einstellungen", 16, 8, 449, 401)
    $save = GUICtrlCreateButton("Speichern", 368, 40, 75, 25, 0)
    $apply = GUICtrlCreateButton("Übernehmen", 368, 72, 75, 25, 0)
    $cancel = GUICtrlCreateButton("Abbrechen", 368, 120, 75, 25, 0)
    $Group2 = GUICtrlCreateGroup("Standard MSN und Port", 32, 32, 305, 89)
    $MSN_1 = GUICtrlCreateInput("", 88, 64, 89, 21)
    $Label_MSN_1 = GUICtrlCreateLabel("MSN 1", 48, 64, 37, 17)
    GUICtrlSetResizing(-1, $GUI_DOCKRIGHT)
    $Label_Port_1 = GUICtrlCreateLabel("Zug. Portnr.", 197, 63, 60, 17)
    $Port_1 = GUICtrlCreateInput("", 261, 63, 65, 21)
    $Label1 = GUICtrlCreateLabel("... werden verwendet, falls keine Zuordnung möglich ist", 53, 95, 264, 17)
    GUICtrlCreateGroup("", -99, -99, 1, 1)
    $Group3 = GUICtrlCreateGroup("Weitere MSNs und Ports", 32, 136, 305, 137)
    $MSN_2 = GUICtrlCreateInput("", 85, 167, 89, 21)
    $Port_2 = GUICtrlCreateInput("", 261, 167, 65, 21)
    $MSN_3 = GUICtrlCreateInput("", 85, 199, 89, 21)
    $Port_3 = GUICtrlCreateInput("", 261, 199, 65, 21)
    $MSN_4 = GUICtrlCreateInput("", 85, 231, 89, 21)
    $Port_4 = GUICtrlCreateInput("", 261, 231, 65, 21)
    $Label_Port_4 = GUICtrlCreateLabel("Zug. Portnr.", 197, 231, 60, 17)
    $Label_Port_3 = GUICtrlCreateLabel("Zug. Portnr.", 197, 199, 60, 17)
    $Label_Port_2 = GUICtrlCreateLabel("Zug. Portnr.", 197, 167, 60, 17)
    $Label_MSN_2 = GUICtrlCreateLabel("MSN 2", 45, 167, 37, 17)
    GUICtrlSetResizing(-1, $GUI_DOCKRIGHT)
    $Label_MSN_3 = GUICtrlCreateLabel("MSN 3", 45, 199, 37, 17)
    GUICtrlSetResizing(-1, $GUI_DOCKRIGHT)
    $Label_MSN_4 = GUICtrlCreateLabel("MSN 4", 45, 231, 37, 17)
    GUICtrlSetResizing(-1, $GUI_DOCKRIGHT)
    GUICtrlCreateGroup("", -99, -99, 1, 1)
    $Group4 = GUICtrlCreateGroup("Passwort und IP-Adresse", 32, 288, 305, 105)
    $Passwort = GUICtrlCreateInput("", 109, 319, 217, 21, $ES_PASSWORD)
    $IP = GUICtrlCreateInput("", 109, 351, 217, 21)
    $Label_IP_Adresse = GUICtrlCreateLabel("IP-Adresse", 45, 351, 55, 17)
    $Label_Passwort = GUICtrlCreateLabel("Passwort", 45, 319, 47, 17)
    GUICtrlCreateGroup("", -99, -99, 1, 1)
    $Label_Hilfe = GUICtrlCreateLabel("Hilfe", 408, 368, 31, 20)
    GUICtrlSetFont(-1, 10, 400, 0, "MS Sans Serif")
    GUICtrlSetColor(-1, 0x0000FF)
    GUICtrlCreateGroup("", -99, -99, 1, 1)
    GUISetState(@SW_SHOW)

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

    ;INI-Datei auslesen
    $MSN_Port_Settings = IniReadSection("moony_dialer_settings.ini", "MSN_Port_Settings")
    $FritzBox_Settings = IniReadSection("moony_dialer_settings.ini", "FritzBox_Settings")
    If @error Then
    MsgBox(4096, "", "Fehler! Die ini-Datei ist nicht vorhanden oder fehlerhaft und wird neu erstellt.")

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

    ;Alte ini löschen
    FileRecycle("moony_dialer_settings.ini")

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

    ;Neue ini erzeugen
    IniWrite("moony_dialer_settings.ini", "MSN_Port_Settings", "MSN_1", "")
    IniWrite("moony_dialer_settings.ini", "MSN_Port_Settings", "Port_1", "")
    IniWrite("moony_dialer_settings.ini", "MSN_Port_Settings", "MSN_2", "")
    IniWrite("moony_dialer_settings.ini", "MSN_Port_Settings", "Port_2", "")
    IniWrite("moony_dialer_settings.ini", "MSN_Port_Settings", "MSN_3", "")
    IniWrite("moony_dialer_settings.ini", "MSN_Port_Settings", "Port_3", "")
    IniWrite("moony_dialer_settings.ini", "MSN_Port_Settings", "MSN_4", "")
    IniWrite("moony_dialer_settings.ini", "MSN_Port_Settings", "Port_4", "")
    IniWrite("moony_dialer_settings.ini", "FritzBox_Settings", "Passwort", "")
    IniWrite("moony_dialer_settings.ini", "FritzBox_Settings", "IP_Adresse", "")
    ;...und wieder einlesen
    $MSN_Port_Settings = IniReadSection("moony_dialer_settings.ini", "MSN_Port_Settings")
    $FritzBox_Settings = IniReadSection("moony_dialer_settings.ini", "FritzBox_Settings")
    EndIf
    ;Werte in die Felder eintragen
    GUICtrlSetData($MSN_1, $MSN_Port_Settings[1][1])
    GUICtrlSetData($Port_1, $MSN_Port_Settings[2][1])
    GUICtrlSetData($MSN_2, $MSN_Port_Settings[3][1])
    GUICtrlSetData($Port_2, $MSN_Port_Settings[4][1])
    GUICtrlSetData($MSN_3, $MSN_Port_Settings[5][1])
    GUICtrlSetData($Port_3, $MSN_Port_Settings[6][1])
    GUICtrlSetData($MSN_4, $MSN_Port_Settings[7][1])
    GUICtrlSetData($Port_4, $MSN_Port_Settings[8][1])
    GUICtrlSetData($Passwort, _StringEncrypt(0, $FritzBox_Settings[1][1], "ETWAS INDIVIDUELLES", 2))
    GUICtrlSetData($IP, $FritzBox_Settings[2][1])
    ;Die Funktionen _collect_data und _save_to_ini werden sowohl beim Speichern als auch beim Übernehmen verwendet, daher als Funktion
    Func _collectData()
    $MSN_Port_Settings[1][1] = GUICtrlRead($MSN_1)
    $MSN_Port_Settings[2][1] = GUICtrlRead($Port_1)
    $MSN_Port_Settings[3][1] = GUICtrlRead($MSN_2)
    $MSN_Port_Settings[4][1] = GUICtrlRead($Port_2)
    $MSN_Port_Settings[5][1] = GUICtrlRead($MSN_3)
    $MSN_Port_Settings[6][1] = GUICtrlRead($Port_3)
    $MSN_Port_Settings[7][1] = GUICtrlRead($MSN_4)
    $MSN_Port_Settings[8][1] = GUICtrlRead($Port_4)

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

    $FritzBox_Settings[1][1] = _StringEncrypt(1, GUICtrlRead($Passwort), "ETWAS INDIVIDUELLES", 2)
    $FritzBox_Settings[2][1] = GUICtrlRead($IP)
    EndFunc ;==>_collectData

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

    Func _save_to_ini()
    IniWriteSection("moony_dialer_settings.ini", "MSN_Port_Settings", $MSN_Port_Settings)
    IniWriteSection("moony_dialer_settings.ini", "FritzBox_Settings", $FritzBox_Settings)
    EndFunc ;==>_save_to_ini

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

    GUIRegisterMsg($WM_COMMAND, "WM_COMMAND")

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

    ;Meldungen der GUI abfangen
    While 1
    $nMsg = GUIGetMsg(1)
    ;... und auswerten:
    Select

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

    ; SAVE: Daten speichern und Fenster schließen
    Case $nMsg[0] = $save
    _collectData() ;Daten aus GUI auslesen
    _save_to_ini() ;Daten wieder in die .ini-Datei schreiben
    ExitLoop

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

    ; APPLY: Daten speichern, sonst nichts
    Case $nMsg[0] = $apply ;der Übernehmen button -> Cancle Button wird ausgegraut und Änderungen im ersten Input (MSN_1) aufgezeichnet
    GUICtrlSetState($cancel, @SW_DISABLE)
    $text = GUICtrlRead($MSN_1)
    ;_collectData() ;Daten aus GUI auslesen
    ;M_save_to_ini() ;Daten wieder in die .ini-Datei schreiben
    GUICtrlSetState($cancel, $GUI_DISABLE) ;Cancel-Button disablen

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

    ; CANCEL: Fenster schließen ohne zu speichern
    Case $nMsg[0] = $cancel
    ExitLoop

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

    ; Im Hilfefall...
    Case $nMsg[0] = $Label_Hilfe
    Run("hh.exe moony_dialer_help.chm", "")

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

    ;Bei Veränderungen in den Textfeldern den Cancel-Button wieder enabeln
    Case $nMsg[0] = $MSN_1 Or $nMsg[0] = $MSN_2 Or $nMsg[0] = $MSN_3 Or $nMsg[0] = $MSN_4 Or $nMsg[0] = $Port_1 Or $nMsg[0] = $Port_2 Or $nMsg[0] = $Port_3 Or $nMsg[0] = $Port_4
    GUICtrlSetState($cancel, $GUI_ENABLE)

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

    ; CLOSE-BUTTON: Rotes Kreuz schließt Fenster ohne zu speichern
    Case $nMsg[0] = $GUI_EVENT_CLOSE
    ExitLoop
    EndSelect
    WEnd

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

    Func WM_COMMAND($hWnd, $iMsg, $iwParam, $ilParam)
    _Check_Eingabe($iwParam)
    Local $hWndFrom, $iIDFrom, $iCode, $hWndListBox
    If Not IsHWnd($MSN_1) Then $hWndListBox = GUICtrlGetHandle($MSN_1)
    $hWndFrom = $ilParam
    $iIDFrom = BitAND($iwParam, 0xFFFF) ; Low Word
    $iCode = BitShift($iwParam, 16) ; Hi Word

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

    Return $GUI_RUNDEFMSG
    EndFunc ;==>WM_COMMAND

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

    Func _Check_Eingabe($iwParam)
    Switch $iwParam
    Case 0x03000008
    If $text <> GUICtrlRead($MSN_1) and $text <> "" Then
    GUICtrlSetState($cancel, @SW_ENABLE)
    MsgBox(1, "", "MSN_1 geändert")
    $text = "" ; Speichervaribale zurücksetzen
    EndIf
    EndSwitch

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

    EndFunc ;==>_Check_Eingabe

    [/autoit]