Problem mit Vista oder mit ListView allgemein ?

    • Offizieller Beitrag

    Hallo.

    Habe das ein Problem mit dem Gui-Style $WS_EX_COMPOSITED , das ist kein Standard Syle habe ich so von Oscar.

    So, nun meine Anliegen :

    Kann bitte mal jemand das folgende Script testen? Wird das ListView bei euch korrekt Angezeigt ? Habe im Augenblick nur Vista und da wird das ListView garnicht , oder nur nach ewiger Warterei ausgeführt.Wie ist das unter WindowsXP?

    Spoiler anzeigen
    [autoit]

    #include <GuiImageList.au3>
    #include <GuiListView.au3>
    #include <GUIConstantsEx.au3>
    #include <WindowsConstants.au3>
    #AutoIt3Wrapper_au3check_parameters=-d -w 1 -w 2 -w 3 -w 4 -w 5 -w 6
    Global Const $WS_EX_COMPOSITED = 0x2000000
    Opt('MustDeclareVars', 1)

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

    $Debug_LV = False ; Check ClassName being passed to ListView functions, set to True and use a handle to another control to see it work

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

    _Main()

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

    Func _Main()
    Local $hImage, $hListView

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

    ; Create GUI
    GUICreate("ListView Add Item", 400, 300,-1,-1,BitOR($GUI_SS_DEFAULT_GUI, $WS_MAXIMIZEBOX, $WS_SIZEBOX), $WS_EX_COMPOSITED)
    $hListView = GUICtrlCreateListView("", 2, 2, 394, 268)
    _GUICtrlListView_SetUnicodeFormat($hListView, False)
    GUISetState()

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

    ; Load images
    $hImage = _GUIImageList_Create()
    _GUIImageList_Add($hImage, _GUICtrlListView_CreateSolidBitMap($hListView, 0xFF0000, 16, 16))
    _GUIImageList_Add($hImage, _GUICtrlListView_CreateSolidBitMap($hListView, 0x00FF00, 16, 16))
    _GUIImageList_Add($hImage, _GUICtrlListView_CreateSolidBitMap($hListView, 0x0000FF, 16, 16))
    _GUICtrlListView_SetImageList($hListView, $hImage, 1)

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

    ; Add columns
    _GUICtrlListView_InsertColumn($hListView, 0, "Column 1", 100)
    _GUICtrlListView_InsertColumn($hListView, 1, "Column 2", 100)
    _GUICtrlListView_InsertColumn($hListView, 2, "Column 3", 100)

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

    ; Add items
    _GUICtrlListView_AddItem($hListView, "Row 1: Col 1", 0)
    _GUICtrlListView_AddItem($hListView, "Row 2: Col 1", 1)
    _GUICtrlListView_AddItem($hListView, "Row 3: Col 1", 2)

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

    ; Loop until user exits
    Do
    Until GUIGetMsg() = $GUI_EVENT_CLOSE
    GUIDelete()
    EndFunc ;==>_Main

    [/autoit]
  • Hi,
    habe Win XP.
    Bei mir wird es auch nicht angezeigt, wobei das Skript auch noch arbeitet.
    Also genau das gleiche wie bei dir ;)

    • Offizieller Beitrag

    Habe dazu folgendes gefunden:

    Zitat

    WS_EX_COMPOSITED wird zwar zum Teil zur
    Behebung des Child-Control Flackerns (in UserControls)
    benutzt, aber führt in einigen Fällen 100% CPU Last.


    Und dieses noch:

    Zitat

    Wo XP mit dem Style WS_EX_COMPOSITED automatisch double buffering fürs ganze Fenster macht, da hat Vista sowas wie eine eigebaute Automatik, die den Style überschreibt und fragmichnichtwas stattdessen verwendet
    Angeblich soll das ein Flackern verhindern, nur bei mir flackert es trotzdem heftig

    • Offizieller Beitrag

    BugFix das komische daran ist, mit allen anderen Gui Elementen ausser GuiCtrlListView funzt es. Gibt es sonst irgendeinen möglichkeit das Flackern der Gui beim resizing zu verhindern/anzuschwächen ? Wäre für jeden Tipp dankbar. Das Geflackere nerv ziemlich .

    Edit: Habe da was im Englichen Forum gefunden , und das Beispiel angepaßt:

    Spoiler anzeigen
    [autoit]

    #include <GuiImageList.au3>
    #include <GuiListView.au3>
    #include <GUIConstantsEx.au3>
    #include <WindowsConstants.au3>
    #AutoIt3Wrapper_au3check_parameters=-d -w 1 -w 2 -w 3 -w 4 -w 5 -w 6
    Global Const $WS_EX_COMPOSITED = 0x2000000
    Const $WM_ENTERSIZEMOVE = 0x231
    Const $WM_EXITSIZEMOVE = 0x232
    Global $Style,$hGui
    Opt('MustDeclareVars', 1)

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

    GUIRegisterMsg($WM_ENTERSIZEMOVE,"startmove")
    GUIRegisterMsg($WM_EXITSIZEMOVE,"endmove")

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

    $Debug_LV = False ; Check ClassName being passed to ListView functions, set to True and use a handle to another control to see it work

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

    _Main()

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

    Func _Main()
    Local $hImage, $hListView

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

    ; Create GUI
    $hGUI = GUICreate("ListView Add Item", 400, 300,-1,-1,BitOR($WS_MINIMIZEBOX, $WS_MAXIMIZEBOX,$WS_CAPTION, $WS_POPUP, $WS_SIZEBOX, $WS_EX_COMPOSITED))
    $hListView = GUICtrlCreateListView("", 2, 2, 394, 268)
    _GUICtrlListView_SetUnicodeFormat($hListView, False)
    GUISetState()

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

    ; Load images
    $hImage = _GUIImageList_Create()
    _GUIImageList_Add($hImage, _GUICtrlListView_CreateSolidBitMap($hListView, 0xFF0000, 16, 16))
    _GUIImageList_Add($hImage, _GUICtrlListView_CreateSolidBitMap($hListView, 0x00FF00, 16, 16))
    _GUIImageList_Add($hImage, _GUICtrlListView_CreateSolidBitMap($hListView, 0x0000FF, 16, 16))
    _GUICtrlListView_SetImageList($hListView, $hImage, 1)

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

    ; Add columns
    _GUICtrlListView_InsertColumn($hListView, 0, "Column 1", 100)
    _GUICtrlListView_InsertColumn($hListView, 1, "Column 2", 100)
    _GUICtrlListView_InsertColumn($hListView, 2, "Column 3", 100)

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

    ; Add items
    _GUICtrlListView_AddItem($hListView, "Row 1: Col 1", 0)
    _GUICtrlListView_AddItem($hListView, "Row 2: Col 1", 1)
    _GUICtrlListView_AddItem($hListView, "Row 3: Col 1", 2)

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

    ; Loop until user exits
    Do
    Until GUIGetMsg() = $GUI_EVENT_CLOSE
    GUIDelete()
    EndFunc ;==>_Main

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

    Func startmove()
    ConsoleWrite("Enter sm" & @CRLF)
    $style = GUIGetStyle($hGUI)
    GUISetStyle($style[0],BitOr($style[1],$WS_EX_COMPOSITED),$hGui)
    EndFunc
    Func endmove()
    ConsoleWrite("exit sm" & @CRLF)
    GUISetStyle($style[0],$style[1],$hGUI)
    EndFunc

    [/autoit]


    Damit klappt $WS_EX_COMPOSITED auch mit LIstviews. Er Inhalt des Listviews wird zwar währen des ziehens der Gui ausgeblendet, Ist aber nicht so schlimm wie das geflackere.
    Hier mal der Link zum OriginalThread : http://www.autoitscript.com/forum/index.php?showtopic=87044&hl=$WS_EX_COMPOSITED
    Vielleicht kann es ja jemand, ausser mir gebrauchen 8)

    • Offizieller Beitrag

    So sieht's besser aus:

    Spoiler anzeigen
    [autoit]


    #include <GuiImageList.au3>
    #include <GuiListView.au3>
    #include <GUIConstantsEx.au3>
    #include <WindowsConstants.au3>
    #AutoIt3Wrapper_au3check_parameters=-d -w 1 -w 2 -w 3 -w 4 -w 5 -w 6
    Global Const $WS_EX_COMPOSITED = 0x2000000
    ;~ Const $WM_ENTERSIZEMOVE = 0x231
    ;~ Const $WM_EXITSIZEMOVE = 0x232
    Global $Style,$hGui
    Opt('MustDeclareVars', 1)

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

    ;~ GUIRegisterMsg($WM_ENTERSIZEMOVE,"startmove")
    ;~ GUIRegisterMsg($WM_EXITSIZEMOVE,"endmove")

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

    $Debug_LV = False ; Check ClassName being passed to ListView functions, set to True and use a handle to another control to see it work

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

    _Main()

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

    Func _Main()
    Local $hImage, $hListView

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

    ; Create GUI
    $hGUI = GUICreate("ListView Add Item", 400, 300,-1,-1,BitOR($WS_MINIMIZEBOX, $WS_MAXIMIZEBOX,$WS_CAPTION, $WS_POPUP, $WS_SIZEBOX, $WS_EX_COMPOSITED))
    $hListView = GUICtrlCreateListView("", 2, 2, 394, 268, Default, $LVS_EX_DOUBLEBUFFER) ; <- $LVS_EX_DOUBLEBUFFER
    _GUICtrlListView_SetUnicodeFormat($hListView, False)
    GUISetState()

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

    ; Load images
    $hImage = _GUIImageList_Create()
    _GUIImageList_Add($hImage, _GUICtrlListView_CreateSolidBitMap($hListView, 0xFF0000, 16, 16))
    _GUIImageList_Add($hImage, _GUICtrlListView_CreateSolidBitMap($hListView, 0x00FF00, 16, 16))
    _GUIImageList_Add($hImage, _GUICtrlListView_CreateSolidBitMap($hListView, 0x0000FF, 16, 16))
    _GUICtrlListView_SetImageList($hListView, $hImage, 1)

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

    ; Add columns
    _GUICtrlListView_InsertColumn($hListView, 0, "Column 1", 100)
    _GUICtrlListView_InsertColumn($hListView, 1, "Column 2", 100)
    _GUICtrlListView_InsertColumn($hListView, 2, "Column 3", 100)

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

    ; Add items
    _GUICtrlListView_AddItem($hListView, "Row 1: Col 1", 0)
    _GUICtrlListView_AddItem($hListView, "Row 2: Col 1", 1)
    _GUICtrlListView_AddItem($hListView, "Row 3: Col 1", 2)

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

    ; Loop until user exits
    Do
    Until GUIGetMsg() = $GUI_EVENT_CLOSE
    GUIDelete()
    EndFunc ;==>_Main

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

    ;~ Func startmove()
    ;~ ConsoleWrite("Enter sm" & @CRLF)
    ;~ $style = GUIGetStyle($hGUI)
    ;~ GUISetStyle($style[0],BitOr($style[1],$WS_EX_COMPOSITED),$hGui)
    ;~ EndFunc
    ;~ Func endmove()
    ;~ ConsoleWrite("exit sm" & @CRLF)
    ;~ GUISetStyle($style[0],$style[1],$hGUI)
    ;~ EndFunc

    [/autoit]
    • Offizieller Beitrag

    Oscar . Das funzt nur bei dem Beispiel. Habe ein 6 Spalten ListView. Das flacker auch mit $LVS_EX_DOUBLEBUFFER. Bei deiner Lösung flacken die Buttons und sonstige Controls wenn Sie vorhanden sind .