flackernde GUI

  • Moin,

    Kurze Frage: erstelle ein ListView mit 30 Einträgen in einer For...Next Schleife. Das Problem ist, dass die GUI flackert ohne Ende. Weis einer, wie man das abstellt. Hab jetzt schon einiges probiert, krieg´s aber nicht hin.

    THX

  • script!!!!
    wie soll dir jetz einer helfen? der einzige der das könnte wäre uri geller^^

  • Wozu eine For Schleife?

    _GUICtrlListView_AddArray

    Wenns kein Array ist schreib die Variablen in ein Array und pack es dann ins Listview :)
    Bei mir flackert es auch nicht (Habe ein Programm mit ~150 Einträgen)

    21 is only half the truth.

  • Script sind etwas mehr als 10000 Sätze. Zusammen mit den benötigten Dateien, komme ich auf etwas über 173MB. Sry, aber das macht meine Leitung nicht mit. Bin aufm Land :(

    Hab aber jetzt mal was zusammen gebastelt. Wichtig ist der Hintergrund in TabSheet1, wie ich bis jetzt festgestellt habe.

    Spoiler anzeigen
    [autoit]

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

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

    Global $pic_dir = "C:\Bilder\"

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

    $MainForm_1 = GUICreate("db", 1001, 701, (@DesktopWidth - 1001) / 2, ((@DesktopHeight - 701) / 2) - 30)
    $Tab1 = GUICtrlCreateTab(0, 0, 1001, 701)
    $TabSheet1 = GUICtrlCreateTabItem("TabSheet1")
    $background1 = GUICtrlCreatePic($pic_dir & "blau.jpg", 8, 30, 985, 665);, $WS_CLIPSIBLINGS)
    GUICtrlSetState(-1, $GUI_DISABLE)
    $Button1 = GUICtrlCreateButton("neu erstellen", 406, 313, 181, 23)
    $TabSheet2 = GUICtrlCreateTabItem("TabSheet2")
    GUICtrlSetState(-1,$GUI_SHOW)
    $ListView1 = GUICtrlCreateListView("Nr. | Pflanzjahr | Name | Blütezeit | Standort | Boden", 8, 37, 977, 633)
    GUICtrlSendMsg(-1, $LVM_SETCOLUMNWIDTH, 0, 50)
    GUICtrlSendMsg(-1, $LVM_SETCOLUMNWIDTH, 1, 50)
    GUICtrlSendMsg(-1, $LVM_SETCOLUMNWIDTH, 2, 50)
    GUICtrlSendMsg(-1, $LVM_SETCOLUMNWIDTH, 3, 50)
    GUICtrlSendMsg(-1, $LVM_SETCOLUMNWIDTH, 4, 50)
    GUICtrlSendMsg(-1, $LVM_SETCOLUMNWIDTH, 5, 50)
    GUICtrlCreateTabItem("")

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

    listview()
    GUISetState(@SW_SHOW)

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

    While 1
    $nMsg = GUIGetMsg()
    Switch $nMsg
    Case $GUI_EVENT_CLOSE
    Exit
    Case $Button1
    listview()
    EndSwitch
    WEnd

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

    Func listview()
    $nr = 30
    _GUICtrlListView_DeleteAllItems($ListView1)
    For $i = 1 To $nr
    GUICtrlCreateListViewItem($i & "|" & "|" & $i & "|" & $i & "|" & $i & "|" & $i, $ListView1)
    GUICtrlSetBkColor(-1, 0x15ADFF)
    Next
    EndFunc ;==>listview

    [/autoit]

    Sleep auch schon probiert, bringt nix

  • Hallo MrB,

    ändere die func listview so ab:

    [autoit]

    Func listview()
    $nr = 30
    _GUICtrlListView_DeleteAllItems($ListView1)
    _GUICtrlListView_BeginUpdate($ListView1)
    For $i = 1 To $nr
    GUICtrlCreateListViewItem($i & "|" & "|" & $i & "|" & $i & "|" & $i & "|" & $i, $ListView1)
    GUICtrlSetBkColor(-1, 0x15ADFF)
    Next
    _GUICtrlListView_EndUpdate($ListView1)
    EndFunc ;==>listview

    [/autoit]

    mfg (Auto)Bert

  • Hab´s jetzt mal so gelöst, das ich die Gui wärend der Aktualisierung ausblenden. Dann flackersts nur einmal :-).

    Falls jemand noch eine andere Idee hat, immer her damit.

  • Wozu eine For Schleife?

    _GUICtrlListView_AddArray

    Wenns kein Array ist schreib die Variablen in ein Array und pack es dann ins Listview :)
    Bei mir flackert es auch nicht (Habe ein Programm mit ~150 Einträgen)

    So ist es ...

    Spoiler anzeigen
    [autoit]

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

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

    Global $pic_dir = "C:\Bilder\"

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

    $MainForm_1 = GUICreate("db", 1001, 701, (@DesktopWidth - 1001) / 2, ((@DesktopHeight - 701) / 2) - 30)
    $Tab1 = GUICtrlCreateTab(0, 0, 1001, 701)
    $TabSheet1 = GUICtrlCreateTabItem("TabSheet1")
    $background1 = GUICtrlCreatePic($pic_dir & "blau.jpg", 8, 30, 985, 665);, $WS_CLIPSIBLINGS)
    GUICtrlSetState(-1, $GUI_DISABLE)
    $Button1 = GUICtrlCreateButton("neu erstellen", 406, 313, 181, 23)
    $TabSheet2 = GUICtrlCreateTabItem("TabSheet2")
    GUICtrlSetState(-1,$GUI_SHOW)
    $ListView1 = GUICtrlCreateListView("Nr. | Pflanzjahr | Name | Blütezeit | Standort | Boden", 8, 37, 977, 633)
    GUICtrlSendMsg(-1, $LVM_SETCOLUMNWIDTH, 0, 50)
    GUICtrlSendMsg(-1, $LVM_SETCOLUMNWIDTH, 1, 50)
    GUICtrlSendMsg(-1, $LVM_SETCOLUMNWIDTH, 2, 50)
    GUICtrlSendMsg(-1, $LVM_SETCOLUMNWIDTH, 3, 50)
    GUICtrlSendMsg(-1, $LVM_SETCOLUMNWIDTH, 4, 50)
    GUICtrlSendMsg(-1, $LVM_SETCOLUMNWIDTH, 5, 50)
    GUICtrlCreateTabItem("")

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

    listviewNew()
    GUISetState(@SW_SHOW)

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

    While 1
    Switch GUIGetMsg()
    Case $GUI_EVENT_CLOSE
    Exit
    Case $Button1
    listview()
    EndSwitch
    WEnd

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

    Func listviewNew ($nr = 30)

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

    Local $arItems [$nr][6]

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

    _GUICtrlListView_DeleteAllItems($ListView1)
    For $i = 0 To UBound ($arItems) -1
    For $ii = 0 To 5
    $arItems[$i][$ii] = $i
    Next
    Next

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

    _GUICtrlListView_AddArray ($ListView1, $arItems)

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

    EndFunc

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


    Gruß
    Greenhorn