本帖最后由 kk_lee69 于 2016-11-23 13:41 编辑
回复 3# blue_dvd
幫你改好了 你是看看 下面的範例吧 !!!
至於 原理 請參考
下面的文章
http://www.autoitx.com/thread-50083-1-1.html
#PRE_UseX64=n
#include <WindowsConstants.au3>
#include <GUIConstantsEx.au3>
#include <GuiImageList.au3>
#include <GuiListView.au3>
#include <WinAPI.au3>
#include <GuiEdit.au3>
#include <array.au3>
#include <Misc.au3>
Global $B_DESCENDING[3] ; 排序用陣列
Global $hActLst
Global $bCtrlDown = False;listview控制項ctrl鍵按下標識
Global $hEdit, $Item = -1, $SubItem = 0
Global $hEnter, $aAccelKeys[1][2] = [["{ENTER}", $hEnter]];虛擬控制項的控制碼和綁定的快速鍵
Local $hUser32 = DllOpen("user32.dll")
Local $ichked = 0;勾選的行數
Local $tText = DllStructCreate("wchar Text[256]");建個結構,用來放listview列資料
Local $GUI, $hImage
Local $iITEM_COUNT = 1000, $aShowdata[$iITEM_COUNT][4], $aShowdata2[$iITEM_COUNT][4], $aShowdata3[$iITEM_COUNT][4];注意陣列最大專案數為2^24(16777216),所以$iITEM_COUNT = 4194304為二維陣列$aShowdata最大行數
Local $sSomeString = ""
Local $hGUI, $hListView, $hListView2, $hListView3
GUIRegisterMsg($WM_COMMAND, "WM_COMMAND")
GUIRegisterMsg($WM_NOTIFY, "WM_NOTIFY")
$hGUI = GUICreate("ListView虛表 載入[" & UBound($aShowdata) & "]資料 核取方塊 原地編輯例子 By_Crossdoor", 600, 605)
$hListView = GUICtrlCreateListView("$hListView| | ", 2, 2, 295, 296, BitOR($LVS_REPORT, $LVS_SINGLESEL, $LVS_SHOWSELALWAYS, $LVS_OWNERDATA), $LVS_EX_GRIDLINES + $LVS_EX_FULLROWSELECT + $LVS_EX_DOUBLEBUFFER + $LVS_EX_CHECKBOXES)
;~ _WinAPI_SetWindowTheme(GUICtrlGetHandle($hListView), "Explorer");設置主題
;設置列寬
GUICtrlSendMsg($hListView, $LVM_SETCOLUMNWIDTH, 0, 110)
GUICtrlSendMsg($hListView, $LVM_SETCOLUMNWIDTH, 1, 80)
GUICtrlSendMsg($hListView, $LVM_SETCOLUMNWIDTH, 2, 80)
GUICtrlSendMsg($hListView, $LVM_SETITEMCOUNT, $iITEM_COUNT, 0);設定數據總數
$hListView2 = GUICtrlCreateListView("$hListView2| | ", 300, 2, 295, 296, BitOR($LVS_REPORT, $LVS_SINGLESEL, $LVS_SHOWSELALWAYS, $LVS_OWNERDATA), $LVS_EX_GRIDLINES + $LVS_EX_FULLROWSELECT + $LVS_EX_DOUBLEBUFFER + $LVS_EX_CHECKBOXES)
;~ _WinAPI_SetWindowTheme(GUICtrlGetHandle($hListView), "Explorer");設置主題
;設置列寬
GUICtrlSendMsg($hListView2, $LVM_SETCOLUMNWIDTH, 0, 110)
GUICtrlSendMsg($hListView2, $LVM_SETCOLUMNWIDTH, 1, 80)
GUICtrlSendMsg($hListView2, $LVM_SETCOLUMNWIDTH, 2, 80)
GUICtrlSendMsg($hListView2, $LVM_SETITEMCOUNT, $iITEM_COUNT, 0);設定數據總數
$hListView3 = GUICtrlCreateListView("$hListView3| | ", 300, 300, 295, 296, BitOR($LVS_REPORT, $LVS_SINGLESEL, $LVS_SHOWSELALWAYS, $LVS_OWNERDATA), $LVS_EX_GRIDLINES + $LVS_EX_FULLROWSELECT + $LVS_EX_DOUBLEBUFFER + $LVS_EX_CHECKBOXES)
;~ _WinAPI_SetWindowTheme(GUICtrlGetHandle($hListView), "Explorer");設置主題
;設置列寬
GUICtrlSendMsg($hListView3, $LVM_SETCOLUMNWIDTH, 0, 110)
GUICtrlSendMsg($hListView3, $LVM_SETCOLUMNWIDTH, 1, 80)
GUICtrlSendMsg($hListView3, $LVM_SETCOLUMNWIDTH, 2, 80)
GUICtrlSendMsg($hListView3, $LVM_SETITEMCOUNT, $iITEM_COUNT, 0);設定數據總數
;===========創建並關聯圖像清單
$hImage = _GUIImageList_Create()
_GUIImageList_AddIcon($hImage, @SystemDir & "\shell32.dll", 110)
_GUICtrlListView_SetImageList($hListView, $hImage, 1);分配圖像清單到清單視圖控制項$hListView
_GUICtrlListView_SetImageList($hListView2, $hImage, 1);分配圖像清單到清單視圖控制項$hListView2
$Button1 = GUICtrlCreateButton("選中行", 10, 310, 70, 25)
$Button2 = GUICtrlCreateButton("未選行", 80, 310, 70, 25)
$Button3 = GUICtrlCreateButton("修改", 150, 310, 70, 25)
$Button4 = GUICtrlCreateButton("清空", 220, 310, 70, 25)
GUISetState()
;==================在表單顯示後再初始化資料,因為初始化陣列資料比較慢
;如果先初始化陣列後顯示視窗,會卡很久,就造成虛表也很慢的假像
For $i = 0 To $iITEM_COUNT - 1
;重繪 刷新 listview 0-13行(讓ListView顯示陣列資料),不用太多行,只需要一屏的行數就就可以
;因為下拉滾動的時候listview會收到LVN_GETDISPINFO消息,這個消息我們在WM_NOTIFY內處理過了
If $i = 18 Then
GUICtrlSendMsg($hListView, $LVM_REDRAWITEMS, 0, $i)
GUICtrlSendMsg($hListView2, $LVM_REDRAWITEMS, 0, $i)
GUICtrlSendMsg($hListView3, $LVM_REDRAWITEMS, 0, $i)
EndIf
$aShowdata[$i][0] = "爺爺" & $i
$aShowdata[$i][1] = "爸爸" & $i
$aShowdata[$i][2] = "兒子" & $i
$aShowdata[$i][3] = 4096;核取方塊狀態4096未選中 8192選中
$aShowdata2[$i][0] = "2爺爺" & $i
$aShowdata2[$i][1] = "2爸爸" & $i
$aShowdata2[$i][2] = "2兒子" & $i
$aShowdata2[$i][3] = 4096;核取方塊狀態4096未選中 8192選中
$aShowdata3[$i][0] = "3爺爺" & $i
$aShowdata3[$i][1] = "3爸爸" & $i
$aShowdata3[$i][2] = "3兒子" & $i
$aShowdata3[$i][3] = 4096;核取方塊狀態4096未選中 8192選中
Next
While 1
$bCtrlDown = _IsPressed("11", $hUser32);取ctrl按鍵的狀態
Switch GUIGetMsg()
Case -3
ExitLoop
Case $Button1
$aShowdata[3][3] = 8192
$aShowdata[7][3] = 8192
GUICtrlSendMsg($hListView, $LVM_REDRAWITEMS, 3, 7)
;~ $a = _GetChkIndex(8192)
;~ If $a[0] = -1 Then
;~ MsgBox(32, "提示", "未勾選任何數據")
;~ Else
;~ _ArrayDisplay($a, "勾選行的索引");陣列很大時,_ArrayDisplay會非常耗時
;~ EndIf
Case $Button2
$a = _GetChkIndex(4096)
If $a[0] = -1 Then
MsgBox(32, "提示", "數據全都被勾選了。")
Else
;MsgBox(32, "提示", "未勾選的數據有" & UBound($a) & "行")
_ArrayDisplay($a, "未勾選行的索");陣列很大時,_ArrayDisplay會非常耗時
EndIf
Case $Button3
If StringLen($sSomeString) Then
$sSomeString = ""
Else
$sSomeString = Asc(Random(48, 255, 1))
EndIf
For $i = 0 To $iITEM_COUNT - 1
$aShowdata[$i][0] = "爺爺" & $i & "-" & $sSomeString
$aShowdata[$i][1] = "爸爸" & $i & "-" & $sSomeString
$aShowdata[$i][2] = "兒子" & $i & "-" & $sSomeString
Next
GUICtrlSendMsg($hListView, $LVM_ENSUREVISIBLE, 1, 0)
GUICtrlSendMsg($hListView, $LVM_REDRAWITEMS, 0, 20)
Case $Button4
$aShowdata = 0
$iITEM_COUNT = 0
GUICtrlSendMsg($hListView, $LVM_SETITEMCOUNT, $iITEM_COUNT, 0)
GUICtrlSendMsg($hListView, $LVM_ENSUREVISIBLE, 1, 0)
GUICtrlSendMsg($hListView, $LVM_REDRAWITEMS, 0, 20)
EndSwitch
WEnd
GUIDelete()
DllClose($hUser32)
Func WM_NOTIFY($hWnd, $iMsg, $iwParam, $ilParam)
#forceref $hWnd, $iMsg, $iwParam
Local $hWndFrom, $iIDFrom, $iCode, $tNMHDR, $tInfo
$tNMHDR = DllStructCreate($tagNMHDR, $ilParam)
$hWndFrom = HWnd(DllStructGetData($tNMHDR, "hWndFrom"))
$iIDFrom = DllStructGetData($tNMHDR, "IDFrom")
$iCode = DllStructGetData($tNMHDR, "Code")
Switch $iIDFrom
Case $hListView
Switch $iCode
Case $LVN_COLUMNCLICK ; 點擊列頭排序
_SortItems($iIDFrom, $ilParam, $aShowdata)
Case $NM_CUSTOMDRAW;自繪消息 處理選中行背景色
Local $tCustDraw = DllStructCreate("hwnd hwndFrom;int idFrom;int code;dword DrawStage;hwnd hdc;long rect[4];dword ItemSpec;int ItemState;dword Itemlparam;dword clrText;dword clrTextBk;int SubItem; dword ItemType;dword clrFace;int IconEffect;int IconPhase;int PartID;int StateID;long rectText[4];int Align", $ilParam)
Local $iDrawStage = DllStructGetData($tCustDraw, "DrawStage")
If $iDrawStage = $CDDS_PREPAINT Then Return $CDRF_NOTIFYITEMDRAW ;request custom drawing of items
If $iDrawStage = $CDDS_ITEMPREPAINT Then Return $CDRF_NOTIFYSUBITEMDRAW ;request drawing each cell separately
If Not BitAND($iDrawStage, $CDDS_SUBITEM) Then Return $CDRF_DODEFAULT
_SetchkedBkClr($tCustDraw, $aShowdata)
Return $CDRF_NEWFONT
Case $LVN_ITEMCHANGED ; An item has changed
_CtrlSel($iIDFrom, $ilParam, $aShowdata)
Case $LVN_BEGINSCROLL ; 滾動事件開始
If IsHWnd($hEdit) Then _EndItemEdit($iIDFrom, $aShowdata);如果存在$hEdit控制項,則結束編輯
Case $NM_CLICK;按一下
If IsHWnd($hEdit) Then _EndItemEdit($iIDFrom, $aShowdata)
_chkboxState($iIDFrom, $ilParam, $aShowdata);刷新核取方塊狀態
Case $NM_DBLCLK ; 按兩下
_StartItemEdit($iIDFrom, $ilParam, $aShowdata);開始原地編輯
Case -150, -177 ;$LVN_GETDISPINFOA = -150, $LVN_GETDISPINFOW = -177 請求顯示資料
_LVN_GETDISPINFO($iIDFrom, $ilParam, $aShowdata)
EndSwitch
Case $hListView2
Switch $iCode
Case -150, -177 ;$LVN_GETDISPINFOA = -150, $LVN_GETDISPINFOW = -177 請求顯示資料
_LVN_GETDISPINFO($iIDFrom, $ilParam, $aShowdata2)
Case $LVN_COLUMNCLICK ; 點擊列頭排序
_SortItems($iIDFrom, $ilParam, $aShowdata2)
Case $NM_CUSTOMDRAW;自繪消息 處理選中行背景色
Local $tCustDraw = DllStructCreate("hwnd hwndFrom;int idFrom;int code;dword DrawStage;hwnd hdc;long rect[4];dword ItemSpec;int ItemState;dword Itemlparam;dword clrText;dword clrTextBk;int SubItem; dword ItemType;dword clrFace;int IconEffect;int IconPhase;int PartID;int StateID;long rectText[4];int Align", $ilParam)
Local $iDrawStage = DllStructGetData($tCustDraw, "DrawStage")
If $iDrawStage = $CDDS_PREPAINT Then Return $CDRF_NOTIFYITEMDRAW ;request custom drawing of items
If $iDrawStage = $CDDS_ITEMPREPAINT Then Return $CDRF_NOTIFYSUBITEMDRAW ;request drawing each cell separately
If Not BitAND($iDrawStage, $CDDS_SUBITEM) Then Return $CDRF_DODEFAULT
_SetchkedBkClr($tCustDraw, $aShowdata2, 0x738393)
Return $CDRF_NEWFONT
Case $LVN_ITEMCHANGED ; An item has changed
_CtrlSel($iIDFrom, $ilParam, $aShowdata2)
Case $LVN_BEGINSCROLL ; 滾動事件開始
If IsHWnd($hEdit) Then _EndItemEdit($iIDFrom, $aShowdata2);如果存在$hEdit控制項,則結束編輯
Case $NM_CLICK;按一下
If IsHWnd($hEdit) Then _EndItemEdit($iIDFrom, $aShowdata2)
_chkboxState($iIDFrom, $ilParam, $aShowdata2)
Case $NM_DBLCLK ; 按兩下
_StartItemEdit($iIDFrom, $ilParam, $aShowdata2)
EndSwitch
Case $hListView3
Switch $iCode
Case -150, -177 ;$LVN_GETDISPINFOA = -150, $LVN_GETDISPINFOW = -177 請求顯示資料
_LVN_GETDISPINFO($iIDFrom, $ilParam, $aShowdata3)
Case $LVN_COLUMNCLICK ; 點擊列頭排序
_SortItems($iIDFrom, $ilParam, $aShowdata3)
Case $NM_CUSTOMDRAW;自繪消息 處理選中行背景色
Local $tCustDraw = DllStructCreate("hwnd hwndFrom;int idFrom;int code;dword DrawStage;hwnd hdc;long rect[4];dword ItemSpec;int ItemState;dword Itemlparam;dword clrText;dword clrTextBk;int SubItem; dword ItemType;dword clrFace;int IconEffect;int IconPhase;int PartID;int StateID;long rectText[4];int Align", $ilParam)
Local $iDrawStage = DllStructGetData($tCustDraw, "DrawStage")
If $iDrawStage = $CDDS_PREPAINT Then Return $CDRF_NOTIFYITEMDRAW ;request custom drawing of items
If $iDrawStage = $CDDS_ITEMPREPAINT Then Return $CDRF_NOTIFYSUBITEMDRAW ;request drawing each cell separately
If Not BitAND($iDrawStage, $CDDS_SUBITEM) Then Return $CDRF_DODEFAULT
_SetchkedBkClr($tCustDraw, $aShowdata3, 0xD307AD, 0xE3F7ED)
Return $CDRF_NEWFONT
Case $LVN_ITEMCHANGED ; An item has changed
_CtrlSel($iIDFrom, $ilParam, $aShowdata3)
Case $LVN_BEGINSCROLL ; 滾動事件開始
If IsHWnd($hEdit) Then _EndItemEdit($iIDFrom, $aShowdata3);如果存在$hEdit控制項,則結束編輯
Case $NM_CLICK;按一下
If IsHWnd($hEdit) Then _EndItemEdit($iIDFrom, $aShowdata3)
_chkboxState($iIDFrom, $ilParam, $aShowdata3)
Case $NM_DBLCLK ; 按兩下
_StartItemEdit($iIDFrom, $ilParam, $aShowdata3)
EndSwitch
EndSwitch
Return $GUI_RUNDEFMSG
EndFunc
Func WM_COMMAND($hWnd, $Msg, $wParam, $lParam)
$iIDFrom = _WinAPI_LoWord($wParam)
$iCode = _WinAPI_HiWord($wParam)
Switch $lParam
Case $hEdit
Switch $iCode
Case $EN_KILLFOCUS;編輯方塊失去焦點,結束編輯
Switch $hActLst
Case $hListView
_EndItemEdit($hListView, $aShowdata)
Case $hListView2
_EndItemEdit($hListView2, $aShowdata2)
Case $hListView3
_EndItemEdit($hListView3, $aShowdata3)
EndSwitch
Case $EN_UPDATE
EndSwitch
Case $hEnter;虛擬控制項消息觸發 收到回車消息才觸發
If IsHWnd($hEdit) Then
If $SubItem = 0 Then
__ClickListViewItem($hActLst, $Item, True);使用點擊來結束編輯,省去判斷listview的資料陣列
Else
__ClickListViewItem($hActLst, $Item)
EndIf
EndIf
EndSwitch
Return $GUI_RUNDEFMSG
EndFunc
Func _SetchkedBkClr(ByRef $tCustDraw, ByRef $aDataArray, $ihighBkClr = 0xF7D3AD, $idefBkclr = 0xFFFFFF)
Local $iIndex = DllStructGetData($tCustDraw, "ItemSpec")
If MOD($iIndex,2) = 0 Then
DllStructSetData($tCustDraw, "clrTextBk", $idefBkclr);BGR格式顏色值 默認背景色
Else
DllStructSetData($tCustDraw, "clrTextBk", $ihighBkClr);BGR格式顏色值 高亮背景色
EndIf
EndFunc
Func _chkboxState($hlst, $ilParam, ByRef $aDataArray);刷新核取方塊狀態
$tInfo = DllStructCreate($tagNMITEMACTIVATE, $ilParam)
$iIndex = DllStructGetData($tInfo, "Index")
$x = DllStructGetData($tInfo, "X")
If ($x < 16) And (3 < $x) And (BitAND(_GUICtrlListView_GetExtendedListViewStyle($hlst), $LVS_EX_CHECKBOXES) = $LVS_EX_CHECKBOXES) Then;使用點擊的x座標來判斷是否在核取方塊上點擊
If $aDataArray[$iIndex][3] = 4096 Then
$ichked+=1
$aDataArray[$iIndex][3] = 8192;4096未選中 8192選中
Else
$ichked-=1
$aDataArray[$iIndex][3] = 4096;4096未選中 8192選中
EndIf
;====立刻刷新核取方塊顯示狀態 重繪$iIndex項
GUICtrlSendMsg($hlst, $LVM_REDRAWITEMS, $iIndex, $iIndex)
EndIf
EndFunc
Func _SortItems($hlst, $ilParam, ByRef $aDataArray);排序
$tInfo = DllStructCreate($tagNMLISTVIEW, $ilParam)
$iSub = DllStructGetData($tInfo, "SubItem")
_ArraySort($aDataArray, $B_DESCENDING[$iSub], 0, 0, $iSub)
GUICtrlSendMsg($hlst, $LVM_REDRAWITEMS, 0, 20)
$B_DESCENDING[$iSub] = Not $B_DESCENDING[$iSub]
EndFunc
Func _CtrlSel($hlst, $ilParam, ByRef $aDataArray);按住ctrl鍵點選item
If $bCtrlDown Then;ctrl鍵按下
$tInfo = DllStructCreate($tagNMLISTVIEW, $ilParam)
Local $iIndex = DllStructGetData($tInfo, "Item")
Local $iNewState = DllStructGetData($tInfo, "NewState")
If $iIndex > -1 And $iNewState = BitOR($LVIS_FOCUSED, $LVIS_SELECTED) Then
If $aDataArray[$iIndex][3] = 4096 Then
$ichked+=1
$aDataArray[$iIndex][3] = 8192;4096未選中 8192選中
Else
$ichked-=1
$aDataArray[$iIndex][3] = 4096;4096未選中 8192選中
EndIf
$tInfo = DllStructCreate($tagNMLVDISPINFO, $ilParam)
DllStructSetData($tInfo, "State", $aDataArray[$iIndex][3]);設置核取方塊狀態
;====立刻刷新核取方塊顯示狀態 重繪$iIndex項
GUICtrlSendMsg($hlst, $LVM_REDRAWITEMS, $iIndex, $iIndex)
EndIf
EndIf
EndFunc
Func _LVN_GETDISPINFO($hlst, $ilParam, ByRef $aDataArray)
If Not IsArray($aDataArray) Then Return
$tInfo = DllStructCreate($tagNMLVDISPINFO, $ilParam)
$iIndex = Int(DllStructGetData($tInfo, "Item"))
$iSub = Int(DllStructGetData($tInfo, "SubItem"))
If BitAND(DllStructGetData($tInfo, "Mask"), $LVIF_IMAGE) And $iSub = 0 Then DllStructSetData($tInfo, "Image", 0);判斷是否有LVIF_IMAGE屬性,有則設置列圖像。不設置_GUICtrlListView_SetImageList則無
If (BitAND(_GUICtrlListView_GetExtendedListViewStyle($hlst), $LVS_EX_CHECKBOXES) = $LVS_EX_CHECKBOXES) Then
;===============設置核取方塊資訊
DllStructSetData($tInfo, "Mask", BitOR($LVIF_STATE, DllStructGetData($tInfo, "Mask")))
DllStructSetData($tInfo, "StateMask", $LVIS_STATEIMAGEMASK)
DllStructSetData($tInfo, "State", $aDataArray[$iIndex][3])
EndIf
DllStructSetData($tText, "Text", $aDataArray[$iIndex][$iSub]);列資料放入$tText結構
DllStructSetData($tInfo, "Text", DllStructGetPtr($tText));$tText結構的指標來設置列資料
DllStructSetData($tInfo, "TextMax", StringLen($aDataArray[$iIndex][$iSub]));設置列數據字串長
EndFunc
Func _StartItemEdit($hlst, $ilParam, ByRef $aDataArray)
$tInfo = DllStructCreate($tagNMITEMACTIVATE, $ilParam)
$iIndex = DllStructGetData($tInfo, "Index")
$iSub = DllStructGetData($tInfo, "SubItem")
$x = DllStructGetData($tInfo, "X")
If ($iIndex <> -1) And ($iSub >= 0) And ($x > 16) Then;點擊的x>16才回應原地編輯
$hActLst = $hlst
If _GUICtrlListView_EnsureVisible($hlst, $iIndex) Then GUICtrlSendMsg($hlst, $LVM_REDRAWITEMS, $iIndex, $iIndex + 1);確保列表視圖專案可見
Local $alstPos = ControlGetPos($hGUI, "", $hlst)
$Item = $iIndex
$SubItem = $iSub
;==========計算編輯方塊座標
Local $aRect = _GUICtrlListView_GetSubItemRect($hlst, $iIndex, $iSub)
Local $iEdit_X = $aRect[0] + $alstPos[0] + 4
Local $iEdit_Y = $aRect[1] + $alstPos[1] + 3
Local $iEdit_Width = _GUICtrlListView_GetColumnWidth($hlst, $iSub) - 1
Local $iEdit_Height = $aRect[3] - $aRect[1]
If $iSub = 0 Then
Local $i1 = 0, $i2 = 0
If (BitAND(_GUICtrlListView_GetExtendedListViewStyle($hlst), $LVS_EX_CHECKBOXES) = $LVS_EX_CHECKBOXES) Then $i1 = 17;判斷是否有核取方塊
If _GUICtrlListView_GetImageList($hlst, 1) Then $i2 = 19;判斷是否有分配圖像清單到清單視圖控制項
$iEdit_X += ($i2 + $i1)
$iEdit_Width -= ($i2 + $i1)
EndIf
Local $iEdit = GUICtrlCreateInput($aDataArray[$iIndex][$iSub], $iEdit_X, $iEdit_Y, $iEdit_Width, $iEdit_Height, BitOR($WS_CHILD, $WS_VISIBLE, $ES_LEFT))
GUICtrlSetFont($iEdit, 11)
GUICtrlSetState($iEdit, $GUI_FOCUS)
$hEdit = GUICtrlGetHandle($iEdit)
_WinAPI_BringWindowToTop($hEdit)
_GUICtrlEdit_SetSel($hEdit, 0, -1) ;全選編輯方塊文字
Local $iEnter = GUICtrlCreateDummy()
$hEnter = GUICtrlGetHandle($iEnter)
GUISetAccelerators($aAccelKeys, $hGUI);在虛擬控制項上綁定一個回車快捷按鍵
EndIf
EndFunc
Func _EndItemEdit($hlst, ByRef $aDataArray)
If ($Item < UBound($aDataArray, 1)) And ($SubItem < UBound($aDataArray, 2)) And ($hActLst == $hlst) Then
Local $sText = _GUICtrlEdit_GetText($hEdit)
_GUICtrlListView_SetItemText($hlst, $Item, $sText, $SubItem)
If IsHWnd($hEdit) Then _WinAPI_DestroyWindow($hEdit)
If IsHWnd($hEnter) Then _WinAPI_DestroyWindow($hEnter)
$hEnter = Null
$hEdit = Null
If ($Item >= 0) Then $aDataArray[$Item][$SubItem] = $sText
$Item = -1
$SubItem = 0
EndIf
EndFunc
Func _GetChkIndex($iChkState)
Local $aIndex[1] = [-1], $j = 0
If $ichked = 0 Then Return $aIndex
If $iChkState = 8192 Then
ReDim $aIndex[$ichked]
Else
ReDim $aIndex[UBound($aShowdata)-$ichked]
EndIf
For $i = 0 To UBound($aShowdata) -1
If $aShowdata[$i][3] == $iChkState Then
$aIndex[$j] = $i
$j+=1
EndIf
Next
Return $aIndex
EndFunc
Func __ClickListViewItem($hWnd, $iIndex, $baddX = False)
If Not IsHWnd($hWnd) Then $hWnd = GUICtrlGetHandle($hWnd)
Local $tRECT = _GUICtrlListView_GetItemRectEx($hWnd, $iIndex, $LVIR_LABEL)
Local $tPoint = _WinAPI_PointFromRect($tRECT, True)
$tPoint = _WinAPI_ClientToScreen($hWnd, $tPoint)
Local $iX, $iY
_WinAPI_GetXYFromPoint($tPoint, $iX, $iY)
If $baddX Then $iX += DllStructGetData($tRECT, "Right")
Local $iMode = Opt("MouseCoordMode", 1)
Local $aPos = MouseGetPos()
MouseClick("left", $iX, $iY, 1, 0)
MouseMove($aPos[0], $aPos[1], 0)
Opt("MouseCoordMode", $iMode)
EndFunc
|