Code : Tout sélectionner
;==[ Création ]========: xx/xx/20xx
;==[ Auteur ]==========:
;==[ Service ]=========:
;==[ Description ]=====: ************************************
;==[ Modification ]====: Dernière modification le xx/xx/20xx
;==[ Nature modification ]====:
;==[xx/xx/20xx: ***********************************]========
;==[Include]====
#include <GuiStatusBar.au3>
#include <Timers.au3>
#include <Date.au3>
#include <File.au3>
#include <WindowsConstants.au3>
#include <GUIConstantsEx.au3>
#include <ListViewConstants.au3>
#include <GuiListView.au3>
#include <GuiMenu.au3>
#include <ListViewConstants.au3>
Opt("GUIOnEventMode", 1)
;==[Variables globales & autres]====
Global $ApplicationName = "Modèle vierge", $Version = "Demo", $Author = "xxxxxxxxxxxxxx"
Global $MainGUI, $hStatus, $aParts[3] = [200, 450, 200], $hMain, $aArrayOfMyFile, $FileToOpen, $hListView=9999
Global Enum $e_idExit, $e_idReadCSVFile
global $x, $y, $w, $h
;==[Programme]====
_Main()
GUIRegisterMsg($WM_SIZE, "WM_SIZE")
GUIRegisterMsg($WM_TIMER, "WM_TIMER")
GUIRegisterMsg($WM_COMMAND, "WM_COMMAND")
$iTimer = _Timer_SetTimer($MainGUI, 1000)
While GUIGetMsg() <> -3
WEnd
Func _Main()
$MainGUI = GUICreate($ApplicationName & " Powered By " & $Author & ". Version: " & $Version, 437, 185, -1, -1, $WS_OVERLAPPEDWINDOW)
GUISetOnEvent($GUI_EVENT_CLOSE, "_Quitter", $MainGUI)
WinSetState($MainGUI, "", @SW_MAXIMIZE)
$hFile = _GUICtrlMenu_CreateMenu()
$New= GUICtrlCreateMenuItem("Nouveau" & @TAB & "Ctrl+N", $hFile)
_GUICtrlMenu_AddMenuItem($hFile, "Fermer l'application", $e_idExit)
$hEdit = _GUICtrlMenu_CreateMenu()
_GUICtrlMenu_InsertMenuItem($hEdit, 0, "&Ouvrir fichier *.CSV", $e_idReadCSVFile)
; Create Main menu
$hMain = _GUICtrlMenu_CreateMenu()
_GUICtrlMenu_AddMenuItem($hMain, "&Fichier", 0, $hFile)
_GUICtrlMenu_AddMenuItem($hMain, "&Edition", 0, $hEdit)
_GUICtrlMenu_SetMenu($MainGUI, $hMain)
$hStatus = _GUICtrlStatusBar_Create($MainGUI, -1, "", $SBARS_SIZEGRIP)
;==[StatusBar]==============================
_GUICtrlStatusBar_SetParts($hStatus, $aParts)
DllCall("UxTheme.dll", "int", "SetWindowTheme", "hwnd", $hStatus, "wstr", 0, "wstr", 0)
$hIcons = _WinAPI_LoadShell32Icon(265); 233 -> Icon ATTENTION,
_GUICtrlStatusBar_SetIcon($hStatus, 0, $hIcons)
$hIcons2 = _WinAPI_LoadShell32Icon(160); 233 -> Icon ATTENTION,
_GUICtrlStatusBar_SetIcon($hStatus, 1, $hIcons2)
_GUICtrlStatusBar_SetText($hStatus, "Utilisateur: " & StringUpper(@UserName) & " " & "Poste: " & @ComputerName, 1)
GUISetState(@SW_SHOW)
EndFunc
Func _ReadAndDisplayCSVFile()
$FileToOpen = _CSVFileToOpen()
$aArrayOfMyFile = _CSV2Array($FileToOpen)
_CreateListView()
EndFunc
Func _CreateListView()
GUICtrlDelete($hListView)
;_GUICtrlListView_DeleteAllItems($hListView)
$NumberOfColumns = UBound($aArrayOfMyFile, 2)
$FirstLineOfCSVFile = ""
For $i = 0 to UBound($aArrayOfMyFile, 2)-1 ; nb de colonnes
$FirstLineOfCSVFile &= $aArrayOfMyFile[0][$i] & "|"
Next
$FirstLineOfCSVFile = StringTrimRight($FirstLineOfCSVFile, 1) ; pour enlever le dernier "|"
$NumberOfRows = _FileCountLines($FileToOpen)
;##########################################################################################################################################
$SizeOfMainGUI = WinGetClientSize($MainGUI)
ConsoleWrite($SizeOfMainGUI[0] & " | " & $SizeOfMainGUI[1] & @CRLF )
$hListView = GUICtrlCreateListView($FirstLineOfCSVFile, 0, 0, $SizeOfMainGUI[0], $SizeOfMainGUI[1] - _GUICtrlStatusBar_GetHeight($hStatus))
GUICtrlSetBkColor($hListView, $GUI_BKCOLOR_LV_ALTERNATE)
;##########################################################################################################################################
Dim $aItems[$NumberOfRows]
_GUICtrlListView_BeginUpdate($hListView)
For $i = 0 To $NumberOfRows - 2
For $j = 0 to $NumberOfColumns - 1
$aItems[$i] &= $aArrayOfMyFile[$i+1][$j] & "|"
Next
$aItems[$i] = StringTrimRight($aItems[$i], 1)
GUICtrlCreateListViewItem($aItems[$i], $hListView)
If Mod($i, 2) <> 0 Then GUICtrlSetBkColor(-1, 0xdddddd)
Next
For $c = 0 to $NumberOfColumns - 1
_GUICtrlListView_SetColumn($hListView, $c, $aArrayOfMyFile[0][$c])
GUICtrlSendMsg($hListView, $LVM_SETCOLUMNWIDTH, $c, 150)
Next
_GUICtrlListView_EndUpdate($hListView)
My_GUICtrlListView_AutoSizeColumns($hListView)
GUISetState(@SW_SHOW)
EndFunc
Func _CSVFileToOpen()
Local $Var = FileOpenDialog("Choisir votre fichier CSV...", @ScriptDir & "\CSV_Files", "Fichier CSV (*.csv)", 1);"C:\temp"
If @error Then Exit
Return $var
EndFunc
Func _CSV2Array($hFile, $cSeperator = ";", $bFilterString = True, $iColumnMode = 0)
Local $s = FileRead($hFile)
If @error Then Return SetError(1)
If $cSeperator = Default Then $cSeperator = "auto"
If Not $cSeperator Then $cSeperator = Opt("GUIDataSeparatorChar")
; searching the line-seperator and splitting the lines into an array
Local $aLines
If StringInStr($s, @CRLF) Then
$aLines = StringSplit($s, @CRLF, 1)
ElseIf StringInStr($s, @CR) Then
$aLines = StringSplit($s, @CR)
Else
$aLines = StringSplit($s, @LF)
EndIf
; searching the delimiter in the first line
Local $aTMP
If $cSeperator = "auto" Then
Local $iMax = 0
Local $iC[5] = [0, 0, 0, 0, 0]
Local $sC[5] = [";", ",", @TAB, "|", " "]
$aTMP = StringRegExp($aLines[1], ";", 3)
If Not @error Then $iC[0] = UBound($aTMP)
$aTMP = StringRegExp($aLines[1], ",", 3)
If Not @error Then $iC[1] = UBound($aTMP)
$aTMP = StringRegExp($aLines[1], "\t", 3)
If Not @error Then $iC[2] = UBound($aTMP)
$aTMP = StringRegExp($aLines[1], "\|", 3)
If Not @error Then $iC[3] = UBound($aTMP)
$aTMP = StringRegExp($aLines[1], "[ ]", 3)
If Not @error Then $iC[4] = UBound($aTMP)
For $i = 4 To UBound($sC) - 1
If $iC[$i] > $iMax Then
$iMax = $iC[$i]
$cSeperator = $sC[$i]
EndIf
Next
EndIf
; creating 2-dim array based on the number of data in the first line
$aTMP = StringSplit($aLines[1], $cSeperator)
Local $iCol = $aTMP[0]
Local $aRet[$aLines[0]][$iCol]
; splitting and filling the lines
For $i = 1 To $aLines[0]
$aTMP = StringSplit($aLines[$i], $cSeperator)
If @error Then ContinueLoop
If $aTMP[0] > $iCol Then
Switch $iColumnMode
Case 0
Return SetError(2, $i)
Case 1
ReDim $aRet[$aLines[0] - 1][$aTMP[0]]
Case 2
$aTMP[0] = $iCol
Case Else
Return SetError(3)
EndSwitch
EndIf
For $j = 1 To $aTMP[0]
$aTMP[$j] = StringStripWS($aTMP[$j], 3)
; removing leading and trailing " or '
If $bFilterString Then $aTMP[$j] = StringRegExpReplace($aTMP[$j], '^("|'')(.*?)\1$', '$2')
$aRet[$i - 1][$j - 1] = $aTMP[$j]
Next ; /cols
Next ; /lines
Return $aRet
EndFunc ;==>_CSV2Array
Func My_GUICtrlListView_AutoSizeColumns($hListView, $iMini = 30)
If Not IsHWnd($hListView) Then $hListView = GUICtrlGetHandle($hListView)
Local $hHeader = _GUICtrlListView_GetHeader($hListView), $iHeader_Width, $iData_Width
_GUICtrlListView_BeginUpdate($hListView)
For $iIndex = 0 To _GUICtrlListView_GetColumnCount($hListView) - 1
If _GUICtrlListView_GetColumnWidth($hListView, $iIndex) = 0 Then ContinueLoop
_GUICtrlListView_SetColumnWidth($hListView, $iIndex, $LVSCW_AUTOSIZE_USEHEADER)
$iHeader_Width = _GUICtrlListView_GetColumnWidth($hListView, $iIndex)
If @OSVersion = "WIN_XP" And $iIndex < _GUICtrlListView_GetColumnCount($hListView) - 1 Then
If _GUICtrlHeader_GetItemFlags($hHeader, $iIndex) / 2 > 1 Then $iHeader_Width += 30
EndIf
_GUICtrlListView_SetColumnWidth($hListView, $iIndex, $LVSCW_AUTOSIZE)
$iData_Width = _GUICtrlListView_GetColumnWidth($hListView, $iIndex)
If $iHeader_Width > $iData_Width Then
_GUICtrlListView_SetColumnWidth($hListView, $iIndex, $iHeader_Width)
EndIf
If _GUICtrlListView_GetColumnWidth($hListView, $iIndex) < $iMini Then
_GUICtrlListView_SetColumnWidth($hListView, $iIndex, $iMini)
EndIf
Next
_GUICtrlListView_EndUpdate($hListView)
EndFunc ;==>My_GUICtrlListView_AutoSizeColumns
Func _Quitter()
Exit
EndFunc
Func WM_COMMAND($hWnd, $iMsg, $wParam, $lParam)
#forceref $hWnd, $iMsg, $lParam
Switch $wParam
Case $e_idExit
Exit
Case $e_idReadCSVFile
;MsgBox(64, "", "$e_idReadCSVFile")
;_Ini()
;_CreateListView()
_ReadAndDisplayCSVFile()
EndSwitch
EndFunc ;==>WM_COMMAND
Func WM_TIMER($hWnd, $iMsg, $iwParam, $ilParam)
#forceref $hWnd, $iMsg, $ilParam
Switch _Timer_GetTimerID($iwParam)
Case $iTimer
_UpdateStatusBarClock()
EndSwitch
Return $GUI_RUNDEFMSG
EndFunc ;==>WM_TIMER
Func _UpdateStatusBarClock()
_GUICtrlStatusBar_SetText($hStatus, @TAB & StringFormat(_NowDate() & " " & "%02d:%02d:%02d", @HOUR, @MIN, @SEC), 0)
EndFunc
Func WM_SIZE($hWnd, $iMsg, $iwParam, $ilParam)
#forceref $hWnd, $iMsg, $iwParam, $ilParam
_GUICtrlStatusBar_Resize($hStatus)
Return $GUI_RUNDEFMSG
EndFunc ;==>WM_SIZE