cqboyqx 发表于 2020-5-11 18:07:36

学弄了一个ListView表增行的效果,就是有点瑕疵,这种情况有没有办法处理?[已解决]

本帖最后由 cqboyqx 于 2020-5-15 21:02 编辑

学弄了一个ListView表增行的效果,可是就是有点瑕疵,就是当行数增加到10行及以上的时候,ListView表界面就闪跳,增加行数越多越严重,不知道这种情况有没有办法处理?
#include <GUIConstantsEx.au3>
#include <ListViewConstants.au3>
#include <WindowsConstants.au3>
#include <GuiListView.au3>


Global $hListView
_Main()

Func _Main()
$Form1 = GUICreate("Form1", 740, 610)
$hListView = GUICtrlCreateListView("cos_text1|cos_text2|cos_text3|cos_text4|cos_text5|cos_text6|cos_text7|cos_text8|cos_text9|", 8, 8, 722, 28)
GUISetState()
   ; 循环直到用户退出
   tianjia()
    Do
    Until GUIGetMsg() = $GUI_EVENT_CLOSE
    GUIDelete()
EndFunc


Func tianjia()
      For $x =0 To 26
         Local $aItems
            For $iI = 0 To 0
                        $aItems[$iI] = 'text'&$x
                $aItems[$iI] = 'text'&$x
                $aItems[$iI] = 'text'&$x
                $aItems[$iI] = 'text'&$x      
                              $aItems[$iI] = 'text'&$x
                $aItems[$iI] = 'text'&$x
                $aItems[$iI] = 'text'&$x
                $aItems[$iI] = 'text'&$x
                              $aItems[$iI] = 'text'&$x      
                        Next
                        
                        Sleep(500)
               _GUICtrlListView_AddArray($hListView, $aItems)
                     $iY = _GUICtrlListView_ApproximateViewHeight($hListView)
                         _WinAPI_SetWindowPos(GUICtrlGetHandle($hListView), 0, 8, 8, 722, $iY-17, $SWP_NOZORDER)                                                
      Next
EndFunc


繁星 发表于 2020-5-11 20:51:00

Func tianjia1()
        For $i = 0 To 26
                _GUICtrlListView_AddItem($hListView, 'text' & $i, $i)
                For $j = 0 To 9
                        _GUICtrlListView_AddSubItem($hListView, $i, 'text' & $i, $j)
                Next
        Next
        $iY = _GUICtrlListView_ApproximateViewHeight($hListView)
        _WinAPI_SetWindowPos(GUICtrlGetHandle($hListView), 0, 8, 8, 722, $iY-17, $SWP_NOZORDER)
EndFunc

Func tianjia2()
        Local $aItems
        For $i = 0 To 26 - 1
                For $j = 0 To 9 - 1
                        $aItems[$i][$j] = 'text' & $i
                Next
        Next
        _GUICtrlListView_AddArray($hListView, $aItems)
        $iY = _GUICtrlListView_ApproximateViewHeight($hListView)
        _WinAPI_SetWindowPos(GUICtrlGetHandle($hListView), 0, 8, 8, 722, $iY-17, $SWP_NOZORDER)
EndFunc

chzj589 发表于 2020-5-11 21:00:15


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


Global $hListView
_Main()

Func _Main()
        $Form1 = GUICreate("Form1", 740, 610)
        $hListView = GUICtrlCreateListView("", 8, 8, 722, 28);cos_text1|cos_text2|cos_text3|cos_text4|cos_text5|cos_text6|cos_text7|cos_text8|cos_text9|
        _GUICtrlListView_AddColumn($hListView, "cos_text1", 0, 2);设置列属性
        _GUICtrlListView_AddColumn($hListView, "cos_text2", 80, 2)
        _GUICtrlListView_AddColumn($hListView, "cos_text3", 80, 2)
        _GUICtrlListView_AddColumn($hListView, "cos_text4", 80, 2)
        _GUICtrlListView_AddColumn($hListView, "cos_text5", 80, 2)
        _GUICtrlListView_AddColumn($hListView, "cos_text6", 80, 2)
        _GUICtrlListView_AddColumn($hListView, "cos_text7", 80, 2)
        _GUICtrlListView_AddColumn($hListView, "cos_text8", 80, 2)
        _GUICtrlListView_AddColumn($hListView, "cos_text9", 80, 2)
        GUISetState()
        ; 循环直到用户退出
        tianjia()
        Do
        Until GUIGetMsg() = $GUI_EVENT_CLOSE
        GUIDelete()
EndFunc   ;==>_Main
Func tianjia()
        Local $iI = 0
        For $x = 0 To 26
                Local $aItems
                For $iI = 0 To 0
                        $aItems[$iI] = 'text' & $x
                        $aItems[$iI] = 'text' & $x
                        $aItems[$iI] = 'text' & $x
                        $aItems[$iI] = 'text' & $x
                        $aItems[$iI] = 'text' & $x
                        $aItems[$iI] = 'text' & $x
                        $aItems[$iI] = 'text' & $x
                        $aItems[$iI] = 'text' & $x
                        $aItems[$iI] = 'text' & $x
                        $iI += 1
                Next
                _GUICtrlListView_AddArray($hListView, $aItems)
                ;Sleep(500)
        Next
        $iY = _GUICtrlListView_ApproximateViewHeight($hListView)
        _WinAPI_SetWindowPos(GUICtrlGetHandle($hListView), 0, 8, 8, 722, $iY - 17, $SWP_NOZORDER)
EndFunc   ;==>tianjia


cqboyqx 发表于 2020-5-11 21:45:27

繁星 发表于 2020-5-11 20:51


我想表达的意思不是一下子所有行的数据全部写进去,而是每间隔1-2秒时间写入一行,就是想怎么处理才能让每写进一行数据列表不闪跳

cqboyqx 发表于 2020-5-11 21:47:21

chzj589 发表于 2020-5-11 21:00

#include
#include


我想表达的意思不是一下子所有行的数据全部写进去,而是每间隔1-2秒时间写入一行,就是想怎么处理才能让每写进一行数据列表不闪跳

chzj589 发表于 2020-5-11 22:06:10


#include <GUIConstantsEx.au3>
#include <ListViewConstants.au3>
#include <WindowsConstants.au3>
#include <GuiListView.au3>
Global $hListView
_Main()
Func _Main()
        $Form1 = GUICreate("Form1", 740, 610)
        $hListView = GUICtrlCreateListView("cos_text1|cos_text2|cos_text3|cos_text4|cos_text5|cos_text6|cos_text7|cos_text8|cos_text9|", 8, 8, 722, 600);cos_text1|cos_text2|cos_text3|cos_text4|cos_text5|cos_text6|cos_text7|cos_text8|cos_text9|
        GUISetState()
        ; 循环直到用户退出
        tianjia()
        Do
        Until GUIGetMsg() = $GUI_EVENT_CLOSE
        GUIDelete()
EndFunc   ;==>_Main
Func tianjia()
        Local $iI = 0, $y = 26
        Local $aItems[$y]
        For $x = 1 To $y;-1
                $aItems[$iI] = 'text' & $x
                $aItems[$iI] = 'text' & $x
                $aItems[$iI] = 'text' & $x
                $aItems[$iI] = 'text' & $x
                $aItems[$iI] = 'text' & $x
                $aItems[$iI] = 'text' & $x
                $aItems[$iI] = 'text' & $x
                $aItems[$iI] = 'text' & $x
                $aItems[$iI] = 'text' & $x
                GUICtrlCreateListViewItem($aItems[$iI] & "|" & $aItems[$iI] & "|" & $aItems[$iI] & "|" & $aItems[$iI] & "|" & $aItems[$iI] & "|" & $aItems[$iI] & "|" & $aItems[$iI] & "|" & $aItems[$iI] & "|" & $aItems[$iI], $hListView)
                Sleep(500)
                $iI += 1
        Next
EndFunc   ;==>tianjia


cqboyqx 发表于 2020-5-11 22:16:53

也只有这种把列表的高度设置一步到位,如果每增加一行,列表就增加一行的高度,估计难控制闪跳。

cqboyqx 发表于 2020-5-11 22:18:36

chzj589 发表于 2020-5-11 22:06

#include
#include


也只有这种把列表的高度设置一步到位,如果每增加一行,列表就增加一行的高度,估计难控制闪跳。

繁星 发表于 2020-5-11 22:35:48

$LVS_EX_DOUBLEBUFFER

chzj589 发表于 2020-5-11 22:44:54

cqboyqx 发表于 2020-5-11 22:18
也只有这种把列表的高度设置一步到位,如果每增加一行,列表就增加一行的高度,估计难控制闪跳。

这样试试

#include <GUIConstantsEx.au3>
#include <ListViewConstants.au3>
#include <WindowsConstants.au3>
#include <GuiListView.au3>
Global $hListView
_Main()
Func _Main()
        $Form1 = GUICreate("Form1", 780, 610)
        $hListView = GUICtrlCreateListView("cos_text1|cos_text2|cos_text3|cos_text4|cos_text5|cos_text6|cos_text7|cos_text8|cos_text9|", 8, 8, 752, 28, $LVS_REPORT, $WS_EX_CLIENTEDGE);,$LVS_EX_DOUBLEBUFFER);cos_text1|cos_text2|cos_text3|cos_text4|cos_text5|cos_text6|cos_text7|cos_text8|cos_text9|
        _GUICtrlListView_SetExtendedListViewStyle($hListView, BitOR($LVS_EX_GRIDLINES, $LVS_EX_FULLROWSELECT, $LVS_EX_INFOTIP))
        GUISetState()
        ; 循环直到用户退出
        tianjia()
        Do
        Until GUIGetMsg() = $GUI_EVENT_CLOSE
        GUIDelete()
EndFunc   ;==>_Main
Func tianjia()
        Local $iI = 0, $y = 26
        Local $aItems[$y]
        For $x = 1 To $y;-1
                $aItems[$iI] = 'text' & $x
                $aItems[$iI] = 'text' & $x
                $aItems[$iI] = 'text' & $x
                $aItems[$iI] = 'text' & $x
                $aItems[$iI] = 'text' & $x
                $aItems[$iI] = 'text' & $x
                $aItems[$iI] = 'text' & $x
                $aItems[$iI] = 'text' & $x
                $aItems[$iI] = 'text' & $x
                GUICtrlCreateListViewItem($aItems[$iI] & "|" & $aItems[$iI] & "|" & $aItems[$iI] & "|" & $aItems[$iI] & "|" & $aItems[$iI] & "|" & $aItems[$iI] & "|" & $aItems[$iI] & "|" & $aItems[$iI] & "|" & $aItems[$iI], $hListView)
                Sleep(100)
                $iI += 1
                $iY = _GUICtrlListView_ApproximateViewHeight($hListView)
                _WinAPI_SetWindowPos(GUICtrlGetHandle($hListView), 0, 8, 8, 722, $iY - 17, $SWP_NOZORDER)
        Next
EndFunc   ;==>tianjia


cqboyqx 发表于 2020-5-11 22:59:38

chzj589 发表于 2020-5-11 22:44
这样试试

#include


好多了,谢谢大佬

cqboyqx 发表于 2020-5-11 23:00:35

繁星 发表于 2020-5-11 22:35
$LVS_EX_DOUBLEBUFFER

你这个是怎么用?

cqboyqx 发表于 2020-5-12 09:11:55

繁星 发表于 2020-5-11 22:35
$LVS_EX_DOUBLEBUFFER

对加上你这个就可以了   厉害拉   兄弟

cqboyqx 发表于 2020-5-12 11:38:20

chzj589 发表于 2020-5-11 22:44
这样试试

#include


大佬,列表扩展样式加了$WS_EX_CLIENTEDGE确实能处理闪跳问题   但是加了后出现新的问题了   如果在框架里有bat和背景图的情况下,他们就不兼容了。(没有加列表扩展样式之前,列表加入数据的时候闪跳,加扩展样式后,闪跳没有了 ,但出现列表与图片控件交叠 了)



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


Global $hListView
_Main()

Func _Main()
$Form1 = GUICreate("Form1", 740, 610)
$Tab1 = GUICtrlCreateTab(5, 5, 585, 49)
$TabSheet1 = GUICtrlCreateTabItem("tab1")
GuiCtrlSetState(-1,$GUI_ONTOP)
GUICtrlCreateTabItem("")
    $Pic1 = GUICtrlCreatePic(@ScriptDir & "\bmp\LOGObjt.bmp", 15, 90, 700, 500)
   GuiCtrlSetState(-1,$GUI_DISABLE)
$hListView = GUICtrlCreateListView("cos_text1|cos_text2|cos_text3|cos_text4|cos_text5|cos_text6|cos_text7|cos_text8|cos_text9|", 8, 65, 722, 100, $LVS_REPORT, $WS_EX_CLIENTEDGE)
GuiCtrlSetState(-1,$GUI_ONTOP)
GUISetState()
   ; 循环直到用户退出
; tianjia()
    Do
    Until GUIGetMsg() = $GUI_EVENT_CLOSE
    GUIDelete()
EndFunc


Func tianjia()
      Local $iI = 0, $y = 15
      Local $aItems[$y]
      For $x = 1 To $y;-1
                $aItems[$iI] = 'text' & $x
                $aItems[$iI] = 'text' & $x
                $aItems[$iI] = 'text' & $x
                $aItems[$iI] = 'text' & $x
                $aItems[$iI] = 'text' & $x
                $aItems[$iI] = 'text' & $x
                $aItems[$iI] = 'text' & $x
                $aItems[$iI] = 'text' & $x
                $aItems[$iI] = 'text' & $x
                GUICtrlCreateListViewItem($aItems[$iI] & "|" & $aItems[$iI] & "|" & $aItems[$iI] & "|" & $aItems[$iI] & "|" & $aItems[$iI] & "|" & $aItems[$iI] & "|" & $aItems[$iI] & "|" & $aItems[$iI] & "|" & $aItems[$iI], $hListView)
                Sleep(200)
                $iI += 1
                $iY = _GUICtrlListView_ApproximateViewHeight($hListView)
                _WinAPI_SetWindowPos(GUICtrlGetHandle($hListView), 0, 8, 65, 722, $iY +4, $SWP_NOZORDER)
      Next
EndFunc   ;==>tianjia




kk_lee69 发表于 2020-5-12 11:58:28

建議 搜尋一下千萬數據 不卡頓的做法
页: [1] 2
查看完整版本: 学弄了一个ListView表增行的效果,就是有点瑕疵,这种情况有没有办法处理?[已解决]