学弄了一个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
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
#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
繁星 发表于 2020-5-11 20:51
我想表达的意思不是一下子所有行的数据全部写进去,而是每间隔1-2秒时间写入一行,就是想怎么处理才能让每写进一行数据列表不闪跳 chzj589 发表于 2020-5-11 21:00
#include
#include
我想表达的意思不是一下子所有行的数据全部写进去,而是每间隔1-2秒时间写入一行,就是想怎么处理才能让每写进一行数据列表不闪跳
#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
也只有这种把列表的高度设置一步到位,如果每增加一行,列表就增加一行的高度,估计难控制闪跳。 chzj589 发表于 2020-5-11 22:06
#include
#include
也只有这种把列表的高度设置一步到位,如果每增加一行,列表就增加一行的高度,估计难控制闪跳。 $LVS_EX_DOUBLEBUFFER 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
chzj589 发表于 2020-5-11 22:44
这样试试
#include
好多了,谢谢大佬 繁星 发表于 2020-5-11 22:35
$LVS_EX_DOUBLEBUFFER
你这个是怎么用? 繁星 发表于 2020-5-11 22:35
$LVS_EX_DOUBLEBUFFER
对加上你这个就可以了 厉害拉 兄弟 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
建議 搜尋一下千萬數據 不卡頓的做法
页:
[1]
2