GUICtrlCreateList aktualisieren?

  • Hi, ich habe ein Problem. In meinem Script kann man in eine Ini neue Einträge eintragen, die dann in einer GUICtrlCreateList angezeigt werden sollen. Aber immoment muss man das Script erst neustarten.
    Ich habe schon einige Threads hier im Forum gefunden, bin aber nicht schlau daraus geworden bzw. habe keine passende Lösung gefunden.

    Hier der Teil des Scripts um den es geht:

    Spoiler anzeigen
    [autoit]

    #include <GUIConstants.au3>
    #include <GUIListBox.au3>

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

    HotKeySet("{F6}", "_openfox")
    HotKeySet("{F7}", "button")
    HotKeySet("{F8}", "_foreground")

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

    Dim $addwrote

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

    $Section = IniReadSection("links.ini", "1A")
    For $i = 1 To UBound($Section)-1
    $addwrote &= "|" & $Section[$i][1]
    Next

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

    Global $firepfad

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

    $firelist = IniRead("links.ini", "Settings", "Firefoxpfad", "Vollständiger Firefox Pfad")

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

    Opt("RunErrorsFatal", 0)
    Opt("GUIOnEventMode", 1)
    Opt("WinTitleMatchMode", 2)
    $Form1_1 = GUICreate("Speed-It", 313, 452, 193, 125)
    $Group1 = GUICtrlCreateGroup("Speed-It - Firefox quickstarter ", 8, 64, 300, 385, -1, $WS_EX_TRANSPARENT)
    $Label1 = GUICtrlCreateLabel("Hotkeys:", 16, 88, 54, 17)
    GUICtrlSetFont(-1, 8, 800, 4, "MS Sans Serif")
    $Label2 = GUICtrlCreateLabel("F6 - Firefox starten. F7 - Go-Button F8 - Speed-It in Vordergrund", 16, 102, 150, 60)
    $Button1 = GUICtrlCreateButton("Go! ->", 144, 176, 65, 25, 0)
    GUICtrlSetFont(-1, 10, 800, 0, "MS Sans Serif")
    GUICtrlSetCursor (-1, 0)
    $addy = GUICtrlCreateList("", 16, 176, 121, 240,$WS_BORDER+$WS_VSCROLL)
    GUICtrlSetData(-1, $addwrote)
    $Label3 = GUICtrlCreateLabel("© Nico Ell, Speed-It | v.0.5.5", 142, 431, 161, 17)
    GUICtrlSetColor(-1, 0x85878C)
    GUICtrlSetTip(-1, "© Nico Ell, Speed-It")
    $Group2 = GUICtrlCreateGroup("Einstellungen", 144, 208, 153, 217)
    GUICtrlSetFont(-1, 8, 800, 0, "MS Sans Serif")
    $tabopen = GUICtrlCreateCheckbox("Link in neuem Tab öffnen", 152, 232, 137, 17)
    $firepfad = GUICtrlCreateInput($firepfad&$firelist, 152, 256, 137, 21)
    $Button3 = GUICtrlCreateButton("Pfad speichern", 152, 280, 137, 17, 0)
    GUICtrlCreateGroup("", -99, -99, 1, 1)
    $Button2 = GUICtrlCreateButton("Neuer Link", 224, 176, 65, 25, 0)
    GUICtrlSetFont(-1, 8, 400, 0, "MS Sans Serif")
    GUICtrlCreateGroup("", -99, -99, 1, 1)
    GUICtrlSetCursor (-1, 3)
    $Pic1 = GUICtrlCreatePic("images\head.gif", 0, 0, 305, 60, BitOR($SS_NOTIFY,$WS_GROUP,$WS_CLIPSIBLINGS))
    GUICtrlSetCursor (-1, 7)
    GUICtrlSetOnEvent($Button1, "button")
    GUICtrlSetOnEvent($Button2, "button2")
    GUICtrlSetOnEvent($Button3, "button3")
    GUISetOnEvent($GUI_EVENT_CLOSE, "CLOSEClicked")
    GUISetState(@SW_SHOW)

    [/autoit]

    LG Nico

    • Offizieller Beitrag

    Erstelle eine Funktion zum Befüllen der ListBox.
    Diese rufst du zum ersten mal nach Erstellen der GUI auf (also wenn die ListBox existiert).
    In der Funktion:
    - alle Einträge der ListBox löschen ( _GUICtrlListBox_ResetContent($hWnd) )
    - INI-Einträge auslesen und mit _GUICtrlListBox_AddString($hWnd, $sText) in die ListBox schreiben

    Diese Funktion rufst du dann immer auf, wenn sich Einträge verändern.
    Wichtig:
    Du benötigst das Handle der ListBox. Also entweder gleich mit _GUICtrlListBox_Create() erzeugen (gibt das Handle zurück), oder:
    $IDList = GUICtrlCreateList()
    $hList = GUICtrlGetHandle($IDList)

  • Ich hab es so gemacht (vorher hatte ich Guictrlsetdata genutzt), aber trotzdem wird nichts lesbares angezeigt (siehe Bild)
    Die wichtigen Ausschnitte:

    Spoiler anzeigen
    [autoit]

    $Termineliste = GUICtrlCreateList("", 8, 224, 417, 150)_GUICtrlListBox_ResetContent($Termineliste)
    While $i <> 5
    $Iniread = IniRead(@ScriptDir&"/MonthCal.ini", $Jahr&"|"&$mon, $initag, "")
    If $Iniread <> "" Then
    _GUICtrlListBox_AddString($Termineliste, $Iniread)
    $i += 1
    EndIf
    $initag += 1
    If $initag > 31 Then
    $initag = 1
    $mon += 1
    If $mon >12 Then
    $mon = 1
    $Jahr += 1
    EndIf
    EndIf
    WEnd

    [/autoit]


    Die Ini besteht und sieht gerade zum testen so aus:
    [2009|12]
    1=test
    5=34
    24=Endlich Weinachten
    31=Sylvester :)
    [2010|1]
    1=Erster neuer Jahrestag
    29=17h Azrt!!!
    15=15 wo gehts hin?
    30=Wenn ich angezeigt werde ist hier was faul...

    Ich hoffe es weiß jemand Rat :)

  • Ich kann das leider nicht reproduzieren. Habe mir ein Lauffähiges Beispiel daraus gebastelt, und er zeigt alles richtig an (zumindest alle einträge aus der Ini ;)) Siehe Screenshot

    //Edit: Musstest du diesen Uralten Thread echt wieder ausgraben?! :D

  • Aha, der Fehler ist hier:

    [autoit]

    GUICtrlSetFont(-1, 20, 400, 0, "MT Extra")

    [/autoit]


    Kann es sein, dass er das nicht mit der Schriftart hinbekommt? Naja letztendlich brauche ich eh nur die Größe^^
    Aber danke schonmal für deine Antwort, und ja musste ich :D
    Viele Grüße Aquaplant