#include <GUIConstantsEx.au3>
#include <MsgBoxConstants.au3>
#include <GuiListView.au3>
#include <Array.au3>
#include <File.au3>
#include <FileConstants.au3>
#include <WinAPI.au3>
#include <GUIEdit.au3>
#include <WinAPIEx.au3>
#include <WindowsConstants.au3>
#include <FontConstants.au3>
#include <ButtonConstants.au3>
Opt("TrayIconHide", 0) ;0 = 顯示托盤圖標, 1 = 隱藏托盤圖標
Opt('MustDeclareVars', 1) ;0 = 變量不需預先聲明, 1 = 變量必需預先聲明
Opt("GUICloseOnESC", 1) ;0 = 點擊 Esc 鍵不關閉1 = 點擊 Esc 鍵關閉,
Global $hEdit, $aHit, $aRect, $aPos, $iHeight = 20
Global $aItem,$nMsg
Local $GUI_Form = GUICreate("ListView_Sort",450,400)
Local $Button_Close = GUICtrlCreateButton("關閉", 310, 370, 85, 25)
Global $Button_Read_WhiteList = GUICtrlCreateButton("讀list", 200, 370, 85, 25)
Local $Button_Export = GUICtrlCreateButton("匯出", 100, 370, 85, 25)
Local $Button_Delete = GUICtrlCreateButton("刪除", 10, 370, 85, 25)
Local $Button_NewList = GUICtrlCreateButton("新增", 10, 340, 85, 25)
Local $Button_Sort = GUICtrlCreateButton("排序", 100, 340, 85, 25)
Global $GUI_ListView_1 = GUICtrlCreateListView("title1|title2|title3|title4", 10, 10, 430, 250)
Global $GUI_ListView = GUICtrlGetHandle($GUI_ListView_1);回傳LISTVIEW
_GUICtrlListView_SetColumnWidth($GUI_ListView, 0, 80)
_GUICtrlListView_SetColumnWidth($GUI_ListView, 1, 120)
_GUICtrlListView_SetColumnWidth($GUI_ListView, 2, 90)
_GUICtrlListView_SetColumnWidth($GUI_ListView, 3, 90)
Global $hFont = _WinAPI_CreateFont($iHeight - 2, 0, 0, 0, 400, False, False, False, $DEFAULT_CHARSET, $OUT_DEFAULT_PRECIS, $CLIP_DEFAULT_PRECIS, $DEFAULT_QUALITY, 0, '新細明體')
GUISetState(@SW_SHOW,$GUI_Form)
GUIRegisterMsg($WM_NOTIFY, 'WM_NOTIFY')
GUIRegisterMsg($WM_COMMAND, 'WM_COMMAND')
While 1
Switch GUIGetMsg()
Case $GUI_EVENT_CLOSE, $Button_Close
Exit
Case $Button_Read_WhiteList
WhiteList()
Case $Button_Export
Button_Export()
Case $Button_Delete
Button_Delete()
Case $Button_NewList
Button_NewList()
Case $Button_Sort
Button_Sort()
EndSwitch
WEnd
Func Button_Sort()
Local $vSortSense = False
_GUICtrlListView_SimpleSort($GUI_ListView, $vSortSense, 3, False) ; 防止下一次插入排序方向切换
EndFunc
Func Button_NewList()
Local $temp = _GUICtrlListView_GetItemCount($GUI_ListView)
_GUICtrlListView_AddItem($GUI_ListView, "新增")
_GUICtrlListView_ClickItem($GUI_ListView, $temp, "left", False, 2)
EndFunc
Func Button_Delete() ;刪除
Local $temp = _GUICtrlListView_GetSelectedIndices($GUI_ListView)
;MsgBox(0,"$temp",$temp)
If $temp <> "" Then
Local $temp2 = _GUICtrlListView_GetItem ( $GUI_ListView, $temp, 1 )
;MsgBox(0,"$temp",$temp2[3])
_GUICtrlListView_DeleteItem($GUI_ListView, $temp)
MsgBox(0,"資料刪除",$temp2[3] & "資料已刪除")
EndIf
EndFunc
Func Button_Export() ;匯出
Local $stringtemp
FileDelete("白名單-" & @YEAR & "-" & @MON & "-" & @MDAY & ".txt")
Sleep(500)
;Local $temp = _GUICtrlListView_GetColumnCount($GUI_ListView)
Local $temp =_GUICtrlListView_GetItemCount ($GUI_ListView)
;MsgBox(0,"$temp",$temp)
Local $hFileOpen = FileOpen("test_listview-" & @YEAR & "-" & @MON & "-" & @MDAY & ".txt",512+1)
For $i = 0 To $temp -1 Step 1
$aItem = _GUICtrlListView_GetItemTextArray($GUI_ListView, $i)
;_ArrayDisplay($aItem)
$stringtemp = $aItem[1] & "," & $aItem[2] & "," & $aItem[3] & "," & $aItem[4]
FileWriteLine($hFileOpen, $stringtemp )
Next
FileClose($hFileOpen)
MsgBox(0,"匯出完成","test_listview已匯出完成")
EndFunc
Func WhiteList() ;讀白名單
Local $WhiteList_File_Open, $hFileOpen, $ListArray, $FileOpen
$WhiteList_File_Open = FileOpenDialog("選擇文件", @ScriptDir, "選擇文件 (*.txt)", 1)
;MsgBox(0,"$WhiteList_File_Open",$WhiteList_File_Open)
If @error Then
MsgBox($MB_SYSTEMMODAL, "", "沒有選擇文件")
Else
If Not _FileReadToArray($WhiteList_File_Open, $ListArray, $FRTA_COUNT, ",") Then
MsgBox($MB_SYSTEMMODAL, "", "读取该文件时出错. @error: " & @error) ; 读取当前文件时出错.
EndIf
;_ArrayDisplay($ListArray, "arrays 数组 - 计数", Default, 8)
_ArrayDelete($ListArray, 0)
_GUICtrlListView_AddArray($GUI_ListView,$ListArray)
EndIf
EndFunc
Func WM_NOTIFY($hWnd, $iMsg, $iwParam, $ilParam)
Local $tNMHDR, $hWndFrom, $iCode, $hFont
$tNMHDR = DllStructCreate($tagNMHDR, $ilParam)
$hWndFrom = DllStructGetData($tNMHDR, 'hWndFrom')
$iCode = DllStructGetData($tNMHDR, 'Code')
Switch $iCode
Case $NM_DBLCLK
Global $aHit = _GUICtrlListView_SubItemHitTest($GUI_ListView)
If $aHit[0] <> -1 Then
Local $aRect = _GUICtrlListView_GetSubItemRect($GUI_ListView, $aHit[0], $aHit[1])
Local $sItemText = _GUICtrlListView_GetItemText($GUI_ListView, $aHit[0], $aHit[1])
Local $aPos = ControlGetPos($hWnd, '', $GUI_ListView)
Local $iStyle = BitOR($WS_CHILD, $WS_VISIBLE, $ES_AUTOHSCROLL, $ES_LEFT)
$hEdit = _GUICtrlEdit_Create($hWnd, $sItemText, $aPos[0] + $aRect[0], $aPos[1] + $aRect[1], _GUICtrlListView_GetColumnWidth($GUI_ListView, $aHit[1]), $iHeight, $iStyle)
_WinAPI_BringWindowToTop($hEdit)
_WinAPI_SetFont($hEdit, $hFont, True)
_GUICtrlEdit_SetMargins($hEdit, $EC_LEFTMARGIN, 4)
_WinAPI_SetFocus($hEdit)
_GUICtrlEdit_SetSel($hEdit, 0, -1)
EndIf
Case $NM_CLICK
EndSwitch
EndFunc ;==>WM_NOTIFY
Func WM_COMMAND($hWnd, $iMsg, $iwParam, $ilParam)
Local $iCode = BitShift($iwParam, 16)
Local $nMsgID = BitAND($iwParam, 0x0000FFFF)
Switch $ilParam
Case $hEdit
Switch $iCode
Case $EN_KILLFOCUS
_SetItemText()
EndSwitch
EndSwitch
If $nMsgID = 1 And $hEdit <> '' Then
_SetItemText()
EndIf
Return $GUI_RUNDEFMSG
EndFunc ;==>WM_COMMAND
Func _SetItemText()
Local $sItemText
$sItemText = _GUICtrlEdit_GetText($hEdit)
_GUICtrlListView_SetItemText($GUI_ListView, $aHit[0], $sItemText, $aHit[1])
_WinAPI_DestroyWindow($hEdit)
EndFunc ;==>_SetItemText