Iniread Problem

  • Guten Morgen zusammen,

    hab mal wieder ein dickes ini Problem.
    Zuerst erkläre ich mal...

    also:

    Ich habe eine ini.

    Spoiler anzeigen


    [Link]
    1=Hunde
    2=Katzen
    3=Tiere

    [Func]
    1=_hunde()
    2=_katzen()
    3=_Tiere()


    Die Links in der ini möchte ich mit dem Hotkey Spacetaste durchblättern. (endlos) 1,2,3--1,2,3--
    Die Gui sollte den Eintrag zeigen!(Label)
    Wenn z.B. Tiere gezeigt wird, sollte man mit Return die Funktion _Tiere starten.

    Habe mal alles auskommentiert...

    Mein Code

    Spoiler anzeigen
    [autoit]


    #include <GUIConstantsEx.au3>
    #include <StaticConstants.au3>
    #include <WindowsConstants.au3>
    #include <array.au3>
    $Form1 = GUICreate("Form1", 499, 300, 198, 147)
    $Auswahl = GUICtrlCreateLabel("Auswahl", 104, 24, 272, 41, $SS_CENTER)
    GUICtrlSetFont(-1, 24, 800, 0, "Arial")
    GUISetState(@SW_SHOW)
    WinSetOnTop("Form1", "", 1)

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

    HotKeySet("{Space}", "_inireader"); mein Hotkey Spacetaste

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

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

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

    EndSwitch
    WEnd

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

    Func _IniReader(); wird mit SpaceTaste gestartet
    Local $i
    $var = IniRead("Funk.ini", "Link", $i, "NichtGefunden"); Meine Ini mit Funktionen
    MsgBox(0, "", "Ini wird gelesen", 1)

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

    If @error Then
    MsgBox(4096, "", "Keine Ini vorhanden")
    Else

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

    For $i = 1 To UBound($var); hier sollte das Label beim drücken v. Space geändert werden!

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

    MsgBox(4096, "Ergebnis", $var[$i])
    GUICtrlSetData($Auswahl, $var[$i])
    ;...wenn Return gedrückt wird, startet INIRead [Func] $i...
    Next
    EndIf
    EndFunc ;==>_IniReader

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

    Func _Hunde()
    MsgBox(4096, "", "Das Hundeprogramm wird gestartet")
    EndFunc ;==>_Hunde

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

    Func _Katzen()
    MsgBox(4096, "", "Das Katzenprogramm wird gestartet")
    EndFunc ;==>_Katzen

    [/autoit]

    Ich dachte so:
    Wird die z.B. die Link Nr. 8 in der INI mit RETURN gestartet,
    dann wird die Func Nr. 8 gestartet.

    Komme da einfach nicht weiter.

    Liebe Grüße
    :( Ilse

    3 Mal editiert, zuletzt von Ilse (24. Mai 2012 um 12:04)

  • Zum aufrufen kannst du Call() nehmen. Aber entferne in der Ini noch die Klammern.

    Achja und IniRead gibt einen String zurück, kein Array.

  • Guten Morgen m-Obi,

    ...nicht gefunden $i.
    Wenn ich da 1 nehme klappt das.
    aber irgendwie stimmt mein Loop schon nicht!
    Wenn ich die SpaceTaste drückte sollte sich das Label jedesmal ändern!
    Da komme ich schon nicht hin!

    Und wie mache ich das mit dem Return?
    Ich meine ein Enter egal f. welchen Ini Eintrag den das Label zeigt.

    Huh...stehe noch etwas auf dem Schlauch...

    :( Liebe Grüße
    Ilse

    Mit Call bin ich gerade am probieren

  • Probier mal das, habs noch nicht getestet:

    Spoiler anzeigen
    [autoit]

    #include <GUIConstantsEx.au3>
    #include <StaticConstants.au3>
    #include <WindowsConstants.au3>
    #include <Array.au3>

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

    Global $iFunc

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

    $Form1 = GUICreate("Form1", 499, 300, 198, 147)
    $Auswahl = GUICtrlCreateLabel("Auswahl", 104, 24, 272, 41, $SS_CENTER)
    GUICtrlSetFont(-1, 24, 800, 0, "Arial")
    GUISetState(@SW_SHOW)

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

    WinSetOnTop("Form1", "", 1)

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

    HotKeySet("{Space}", "_UpdateLabel"); mein Hotkey Spacetaste
    HotKeySet("{Enter}", "_RunFunc"); mein Hotkey Spacetaste

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

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

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

    EndSwitch
    WEnd

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

    Func _UpdateLabel(); wird mit SpaceTaste gestartet
    $iFunc += 1
    $sFunc = IniRead("Funk.ini", "Link", $iFunc, "NichtGefunden"); Meine Ini mit Funktionen
    GUICtrlSetData($Auswahl, $sFunc)
    EndFunc ;==>_UpdateLabel

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

    Func _RunFunc()
    If $iFunc <> 0 Then
    Call(IniRead("Funk.ini", "Func", $iFunc)
    EndIf
    EndFunc

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

    Func _Hunde()
    MsgBox(4096, "", "Das Hundeprogramm wird gestartet")
    EndFunc ;==>_Hunde

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

    Func _Katzen()
    MsgBox(4096, "", "Das Katzenprogramm wird gestartet")
    EndFunc ;==>_Katzen

    [/autoit]
  • Kleine Änderung:

    [autoit]

    Func _UpdateLabel(); wird mit SpaceTaste gestartet
    $iFunc += 1
    $sFunc = IniRead("Funk.ini", "Link", $iFunc, ""); Meine Ini mit Funktionen
    If $sFunc = "" Then
    $iFunc = 1
    $sFunc = IniRead("Funk.ini", "Link", $iFunc, "")
    EndIf
    GUICtrlSetData($Auswahl, $sFunc)
    EndFunc ;==>_UpdateLabel

    [/autoit]

    Einmal editiert, zuletzt von m-obi (24. Mai 2012 um 09:37)

  • Hallo m-Obi,

    habe leider noch ein kleines Problem mit der Return-Taste!

    Wenn das Script aktiv ist, kann ich leider keine Return-Taste
    mehr nutzen.
    Die bräuchte ich leider unbedingt.

    WinActive hat leider nicht geklappt

    [autoit]


    If WinActive($Form1) then
    HotKeySet("{Enter}", "_RunFunc")
    Else
    HotKeySet("{Enter}"); Hotkey ausschalten!
    endif

    [/autoit]

    Hoffe du hast noch eine Idee?

    Grüße
    Ilse

    2 Mal editiert, zuletzt von Ilse (24. Mai 2012 um 10:15)

  • So? Für Space auch gleich.

    Spoiler anzeigen
    [autoit]

    #include <GUIConstantsEx.au3>
    #include <StaticConstants.au3>
    #include <WindowsConstants.au3>
    #include <Array.au3>

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

    Global $iFunc

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

    $hGui = GUICreate("Form1", 499, 300, 198, 147)
    $cDummy1 = GUICtrlCreateDummy()
    $cDummy2 = GUICtrlCreateDummy()
    $Auswahl = GUICtrlCreateLabel("Auswahl", 104, 24, 272, 41, $SS_CENTER)
    GUICtrlSetFont(-1, 24, 800, 0, "Arial")
    GUISetState(@SW_SHOW)

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

    Global $aAccelKeys[2][2] = [["{Space}", $cDummy1], ["{Enter}", $cDummy2]]
    GUISetAccelerators($aAccelKeys, $hGui)

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

    WinSetOnTop("Form1", "", 1)

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

    While 1
    $nMsg = GUIGetMsg()
    Switch $nMsg
    Case $GUI_EVENT_CLOSE
    Exit
    Case $cDummy1
    $iFunc += 1
    $sFunc = IniRead("Funk.ini", "Link", $iFunc, ""); Meine Ini mit Funktionen
    If $sFunc = "" Then
    $iFunc = 1
    $sFunc = IniRead("Funk.ini", "Link", $iFunc, "")
    EndIf
    GUICtrlSetData($Auswahl, $sFunc)
    Case $cDummy2
    If $iFunc <> 0 Then
    Call(IniRead("Funk.ini", "Func", $iFunc, ""))
    EndIf
    EndSwitch
    WEnd

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

    Func _Hunde()
    MsgBox(4096, "", "Das Hundeprogramm wird gestartet")
    EndFunc ;==>_Hunde

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

    Func _Katzen()
    MsgBox(4096, "", "Das Katzenprogramm wird gestartet")
    EndFunc ;==>_Katzen

    [/autoit]