Code : Tout sélectionner
#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>
#include <Misc.au3>
#Include <File.au3>
#include <Array.au3>
#include <SliderConstants.au3>
#include <ListviewConstants.au3>
Opt("GUIOnEventMode", 1)
Opt("MouseCoordMode", 2)
;==================================
Global $dossierOuKyaLesCsv = @ScriptDir & "\"
Global $my_file, $array
Global $middle, $coeffV, $Mcourbe, $Wcourbe, $nblignes, $step
Global $gui, $child, $g, $grafic_width, $slider, $dot, $bar, $LVitem
Global $btn_left, $btn_right, $input_pasdefil
_OpenAndLoadAllZeStuff()
While 1
If WinActive($gui) Then
_ReadZeSlider()
_CheckBtnsGrafik()
ElseIf WinActive($child) Then
_DragZeGrafik()
EndIf
Wend
;=================================
; FONCTIONS
;=================================
Func _ChouzeFile()
Local $var = FileOpenDialog("Choisir un csv...", $dossierOuKyaLesCsv, "CSV (*.csv)", 1)
If @error Then Exit
Return $var
EndFunc
Func _OpenAndLoadAllZeStuff()
If WinExists($gui) Then GuiDelete($gui)
If WinExists($child) Then GuiDelete($child)
$my_file = _ChouzeFile() ; 'monfichier3.csv'
_BuildZeArray()
_BuildZeGuis()
EndFunc
Func _BuildZeArray()
SplashTextOn ("", "Chargement ...", 250, 55, -1, -1, 49)
Dim $aTableau1
_FileReadToArray($my_file, $aTableau1)
Dim $array[$aTableau1[0]][18]
For $i = 1 To $aTableau1[0]
For $j = 0 to 17
Local $split = StringSplit($aTableau1[$i], ";")
$array[$i-1][$j] = StringReplace($split[$j+1], '"', "")
Next
Next
SplashOff()
;_ArrayDisplay($array, 'Tableau2')
EndFunc
Func _BuildZeGuis()
;;== échelle verticale
Local $aberr_inf = Number(StringReplace($array[1][13], ",", "."))
Local $aberr_sup = Number(StringReplace($array[1][16], ",", "."))
Local $Hcourbe = 400
$middle = ($aberr_sup + $aberr_inf)/2
$coeffV = $Hcourbe/($aberr_sup - $aberr_inf)
$Mcourbe = $Hcourbe/2 ; 200
;;== échelle horizontale
$Wcourbe = 600
$nblignes = UBound($array)-1
If $nblignes >= $Wcourbe Then
$step = 1
Else
For $i = 1 to $Wcourbe
If $nblignes < $Wcourbe/$i and $nblignes > $Wcourbe/($i+1) Then
$step = $i+1
Exitloop
EndIf
Next
EndIf
$grafic_width = $nblignes*$step
;;==guis
Local $left = 50
$gui = GUICreate($my_file, $Wcourbe+$left+20, 505)
GUISetOnEvent($GUI_EVENT_CLOSE, "_Exit")
Local $a = Number(StringLen(Int($aberr_sup - $aberr_inf))-2)
Local $b = 10^$a
For $i = $aberr_inf to $aberr_sup step $b
GuiCtrlCreateLabel("", 0, _GetZePosY($i)+4, $left, 17, 2)
GuiCtrlSetFont(-1, 8, 400, 0, "Arial Unicode MS")
GuiCtrlSetData(-1, Round($i, 2) & " " & ChrW(9472) )
GUICtrlSetBkColor(-1, $GUI_BKCOLOR_TRANSPARENT)
Next
GuiCtrlCreateLabel($array[1][3], $left, 420, 110, 17) ; dates
GuiCtrlCreateLabel($array[$nblignes][3], $Wcourbe-50, 420, 110, 17)
$btn_left = GuiCtrlCreateButton(ChrW(9668), $left+($Wcourbe/2)-27, 415, 25, 20)
$btn_right = GuiCtrlCreateButton(ChrW(9658), $left+($Wcourbe/2)+2, 415, 25, 20)
$btn_open = GuiCtrlCreateButton("...", 10, 440, 25, 20)
GUICtrlSetOnEvent(-1, "_OpenAndLoadAllZeStuff")
$slider = GUICtrlCreateSlider($left-10, 440, $Wcourbe+20, 20, $TBS_NOTICKS+$TBS_TOP+ $TBS_FIXEDLENGTH)
GUICtrlSetLimit(-1, $Wcourbe/$step, 0)
GUICtrlSendMsg($slider, $TBM_SETTHUMBLENGTH, 16, 0)
GuiCtrlCreateLabel("défilement", 10, 472, 50, 15)
$input_pasdefil = GuiCtrlCreateInput("1", 65, 470, 30, 18)
$LV = GuiCtrlCreateListview(" | | | | | ", $Wcourbe+$left-540, 460, 540, 35, $LVS_NOCOLUMNHEADER, $LVS_EX_GRIDLINES)
GUICtrlSendMsg($LV, $LVM_SETCOLUMNWIDTH, 0, 80)
GUICtrlSendMsg($LV, $LVM_SETCOLUMNWIDTH, 1, 80)
GUICtrlSendMsg($LV, $LVM_SETCOLUMNWIDTH, 2, 80)
GUICtrlSendMsg($LV, $LVM_SETCOLUMNWIDTH, 3, 120)
GUICtrlSendMsg($LV, $LVM_SETCOLUMNWIDTH, 4, 100)
GUICtrlSendMsg($LV, $LVM_SETCOLUMNWIDTH, 5, 70)
;GuiCtrlCreateListViewItem("Point|Valeur|Date|Reference|ID Logique", $LV)
GuiCtrlCreateListViewItem("Tol. mini|Valeur|Tol. maxi|Date|Reference|ID Logique", $LV)
$LVitem = GuiCtrlCreateListViewItem(" | | | | | ", $LV)
GUISetState()
$child = GUICreate("courbe", $Wcourbe, 400, $left, 10, BitOR($WS_POPUP, $WS_BORDER), _
BitOR($WS_EX_MDICHILD, $WS_EX_COMPOSITED), $gui)
GUISetBkColor(0xffffff)
GuiCtrlCreateLabel("tol. sup", 5, _GetZePosY($array[1][15])-15, 60, 17)
GUICtrlSetBkColor(-1, $GUI_BKCOLOR_TRANSPARENT)
GuiCtrlCreateLabel("tol. inf", 5, _GetZePosY($array[1][14]), 60, 17)
GUICtrlSetBkColor(-1, $GUI_BKCOLOR_TRANSPARENT)
;GuiCtrlCreateLabel("", 0, 200, $Wcourbe, 1) ; moyenne
;GUICtrlSetBkColor(-1, 0x999999)
GuiCtrlCreateLabel("aberr. sup : " & $array[1][16], 5, 0, 120, 17)
GUICtrlSetBkColor(-1, $GUI_BKCOLOR_TRANSPARENT)
GuiCtrlCreateLabel("aberr. inf : " & $array[1][13], 5, 385, 120, 17)
GUICtrlSetBkColor(-1, $GUI_BKCOLOR_TRANSPARENT)
$g = GUICtrlCreateGraphic(0, 0, $grafic_width, 400)
GUICtrlSetBkColor(-1, 0xffffff)
GUICtrlSetGraphic($g, $GUI_GR_MOVE, 0, $Mcourbe) ; init
GUICtrlSetGraphic($g, $GUI_GR_PENSIZE, 1)
For $i = 1 to $nblignes-1
GUICtrlSetGraphic($g, $GUI_GR_COLOR, 0xff)
GUICtrlSetGraphic($g, $GUI_GR_LINE, $i*$step, _GetZePosY($array[$i][7]) )
Next
GUICtrlSetGraphic($g, $GUI_GR_HINT, 2)
GUICtrlSetGraphic($g, $GUI_GR_MOVE, 0, _GetZePosY($array[1][15])) ; init
GUICtrlSetGraphic($g, $GUI_GR_COLOR, 0xff0000)
For $i = 1 to $nblignes-1
If ($array[$i][15])<>($array[$i-1][15]) Then _
GUICtrlSetGraphic($g, $GUI_GR_LINE, $i-1, _GetZePosY($array[$i][15]) )
GUICtrlSetGraphic($g, $GUI_GR_LINE, $i, _GetZePosY($array[$i][15]) ) ; tol sup
Next
GUICtrlSetGraphic($g, $GUI_GR_MOVE, 0, _GetZePosY($array[1][14])) ; init
For $i = 1 to $nblignes-1
If ($array[$i][14])<>($array[$i-1][14]) Then _
GUICtrlSetGraphic($g, $GUI_GR_LINE, $i-1, _GetZePosY($array[$i][14]) )
GUICtrlSetGraphic($g, $GUI_GR_LINE, $i, _GetZePosY($array[$i][14]) ) ; tol inf
Next
GUICtrlSetGraphic($g, $GUI_GR_MOVE, 0, (_GetZePosY($array[1][14])+_GetZePosY($array[1][15]))/2 ) ; init
GUICtrlSetGraphic($g, $GUI_GR_COLOR, 0x999999)
For $i = 1 to $nblignes-1
If ($array[$i][14])<>($array[$i-1][14]) Then _
GUICtrlSetGraphic($g, $GUI_GR_LINE, $i-1, (_GetZePosY($array[$i][14])+_GetZePosY($array[$i][15]))/2 )
GUICtrlSetGraphic($g, $GUI_GR_LINE, $i, (_GetZePosY($array[$i][14])+_GetZePosY($array[$i][15]))/2 ) ; moy
Next
$bar = GuiCtrlCreateLabel("", 0, 0, 1, 400)
GUICtrlSetBkColor(-1, 0x8888ff)
GUICtrlSetState(-1, $GUI_ONTOP)
$dot = GuiCtrlCreateLabel("", -1, $Mcourbe, 3, 3)
GUICtrlSetBkColor(-1, 0xff0000)
GUISetState()
EndFunc
Func _GetZePosY($array_value)
Local $temp = Number(StringReplace($array_value, ",", "."))
Return ($middle-$temp)*$coeffV+$Mcourbe
EndFunc
Func _CheckBtnsGrafik()
If _IsPressed("01") Then
Local $info = GUIGetCursorInfo($gui)
If $info[4] = $btn_left Then
Do
_MoveZeGrafik(-1)
Until not _IsPressed("01")
ElseIf $info[4] = $btn_right Then
Do
_MoveZeGrafik(1)
Until not _IsPressed("01")
EndIf
EndIf
EndFunc
Func _DragZeGrafik()
If _IsPressed("01") Then
Local $info = GUIGetCursorInfo($child)
If $info[4] = $g and $info[0]>0 and $info[0]<$Wcourbe Then
Do
$m0 = MouseGetPos()
Sleep(10)
$m = MouseGetPos()
_MoveZeGrafik($m[0]-$m0[0])
Until not _IsPressed("01")
EndIf
EndIf
If _IsPressed("25") Then ; left
Do
_MoveZeGrafik(-1)
; Sleep(100)
Until not _IsPressed("25")
EndIf
If _IsPressed("27") Then ; right
Do
_MoveZeGrafik(1)
; Sleep(100)
Until not _IsPressed("27")
EndIf
EndFunc
Func _MoveZeGrafik($val)
Local $pas, $p, $newx
$pas = GuiCtrlRead($input_pasdefil)
$p = ControlGetPos($child, "", $g)
$newx = $p[0]+($val*$pas*$step)
If $newx <= 0 and $newx >= $Wcourbe-$grafic_width Then
ControlMove($child, "", $g, $newx, 0)
_SetZeInfos()
EndIf
EndFunc
Func _ReadZeSlider()
If _IsPressed("01") Then
$info = GUIGetCursorInfo($gui)
If $info[4] = $slider Then
Do
$slider_val0 = GuiCtrlRead($slider)
Sleep(10)
$slider_val = GuiCtrlRead($slider)
If $slider_val<>$slider_val0 Then
_SetZeInfos()
EndIf
Until not _IsPressed("01")
EndIf
EndIf
EndFunc
Func _SetZeInfos()
Sleep(10)
Local $slider_val, $pos[4], $index
$slider_val = GuiCtrlRead($slider)
$pos = ControlGetPos($child, "", $g)
$index = $slider_val - $pos[0]/$step
GUICtrlSetPos($bar, $slider_val*$step, 0)
GUICtrlSetPos($dot, ($slider_val*$step)-1, _GetZePosY($array[$index][7])-1)
GUICtrlSetData($LVitem, $array[$index][14] &"|"& $array[$index][7] &"|"& _
$array[$index][15] &"|"& $array[$index][3] &"|"& $array[$index][2] &"|"& $array[$index][11])
EndFunc
Func _Exit()
Exit
EndFunc