J'aimerai savoir comment faire de manière simple une alimentation en cascade de ComboBox avec des données stockées dans une base SQLite.
J'ai reussi le faire, mais le problème est que j'ai une StatusBar divisée en 3 parties et à cause de ma boucle While dans la fonction Func _BuildMainGUI() (voir code joint), je ne peux pas afficher le jour et l'heure en dynamique, alors que si j'extrais la boucle While de ma fonction Func _BuildMainGUI(), la date et l'heure s'affiche correctement, mais je n'alimente plus mes ComboBox...
Mon code pour alimenter les ComboBox en cascade:
► Afficher le texte
Code : Tout sélectionner
While 1
Sleep(10)
$fState = _GUICtrlComboBox_GetDroppedState($c_Ligne)
If $fState <> $fCurrState Then
Switch $fState
Case True
$fOpened = True
Case False
If $fOpened Then
$fOpened = False
$Line = GUICtrlRead($c_Ligne)
_LoadCells($Line)
EndIf
EndSwitch
$fCurrState = $fState
EndIf
;===============================================
Sleep(10)
$fState2 = _GUICtrlComboBox_GetDroppedState($c_Station)
If $fState2 <> $fCurrState2 Then
Switch $fState2
Case True
$fOpened2 = True
Case False
If $fOpened2 Then
$fOpened2 = False
$Cell = GUICtrlRead($c_Station)
_LoadTools($Line, $Cell)
EndIf
EndSwitch
$fCurrState2 = $fState2
EndIf
;===============================================
Sleep(10)
$fState3 = _GUICtrlComboBox_GetDroppedState($c_Outillage)
If $fState3 <> $fCurrState3 Then
Switch $fState3
Case True
$fOpened3 = True
Case False
If $fOpened3 Then
$fOpened3 = False
$Tool = GUICtrlRead($c_Outillage)
_LoadToolsRemove($Tool, $Line)
EndIf
EndSwitch
$fCurrState3 = $fState3
EndIf
;===============================================
WEndMon code complet:
► Afficher le texte
Code : Tout sélectionner
#Region ;**** Directives created by AutoIt3Wrapper_GUI ****
#AutoIt3Wrapper_UseX64=n
#AutoIt3Wrapper_Res_Language=1036
#AutoIt3Wrapper_Res_requestedExecutionLevel=asInvoker
#AutoIt3Wrapper_AU3Check_Parameters=-d -w 1 -w 2 -w 3 -w 4 -w 5 -w 6
#EndRegion ;**** Directives created by AutoIt3Wrapper_GUI ****
;==[Les Includes]====
#include <GuiConstantsEx.au3>
#include <GuiListView.au3>
#include <WindowsConstants.au3>
#include <Misc.au3>
#include <Timers.au3>
#include <SendMessage.au3>
#include <ProgressConstants.au3>
#include <GuiStatusBar.au3>
#include <Date.au3>
#include <ColorConstants.au3>
#include <ButtonConstants.au3>
#include <EditConstants.au3>
#include <StaticConstants.au3>
#include <SQLite.au3>
#include <SQLite.dll.au3>
#include <MsgBoxConstants.au3>
#include <Array.au3>
#include <ComboConstants.au3>
#Include <File.au3>
#include <GuiButton.au3>
#include <GuiComboBox.au3>
Opt("GUIOnEventMode", 1)
Global $hGUI, $msg, $hStatus, $aParts[3] = [200, 450, 200], $hIcons, $hIcons2, $iTimer1
Global $mem
Global $MemoriserGui
Global $QuestionLabel
Global $ReponseLabel
Global $SQLite = @ScriptDir & "\_SQLIte\MlsPToolsManager.sqlite" ; /!\ /!\ /!\ CREER MANUELLEMENT CE FICHIER AVANT DE LANCER LE PROGRAMME /!\ /!\ /!\
Global $sLocalSQLiteDll = @ScriptDir & "\_SQLIte\sqlite3.dll"
Global $Base_SQLite
Global $c_Ligne, $c_Station, $c_Outillage, $c_OutillageRetire, $nMsg1, $fState, $fOpened, $fCurrState, $Line, $l_NomStation, $Cell, $fState2, $fOpened2, $fCurrState2, $TempArray, $Tool
Global $fState3, $fOpened3, $fCurrState3, $i_Demandeur, $ListView1, $ListView2, $ListView3, $b_Valider
_InitSql()
_BuildMainGUI()
;AdlibRegister("_ScreenAdaptation")
GUIRegisterMsg($WM_SIZE, "WM_SIZE")
GUIRegisterMsg($WM_TIMER, "WM_TIMER")
$iTimer1 = _Timer_SetTimer($hGUI, 1000)
While GUIGetMsg()<>-3
WEnd
Func _Exit_SQLite()
_SQLite_Close()
_SQLite_Shutdown()
EndFunc
Func _InitSql()
_SQLite_Startup($sLocalSQLiteDll, False, 1)
If @error Then
MsgBox(0, "Fichier manquant", "Le fichier SQLite3.dll est introuvable !")
Exit
EndIf
$Base_SQLite = _SQLite_Open($sqlite)
If @error > 0 Then
MsgBox(16, "SQLite Erreur", "La base ne peut être chargée !")
Exit
EndIf
OnAutoItExitRegister("_Exit_SQLite")
EndFunc
Func _BuildMainGUI()
$hGUI = GUICreate("", @DesktopWidth-400, @DesktopHeight-200, -1, -1)
GUISetOnEvent($GUI_EVENT_CLOSE, "_Quitter", $hGUI)
Local $Group1 = GUICtrlCreateGroup("Partie Fabrication", 8, 8, 769, 569)
DllCall("UxTheme.dll", "int", "SetWindowTheme", "hwnd", GUICtrlGetHandle($Group1), "wstr", 0, "wstr", 0)
;==[Les Labels]==============================================================================================
Local $l_Ligne = GUICtrlCreateLabel("Ligne:", 70, 32, 38, 20)
Local $l_Station = GUICtrlCreateLabel("Station:", 62, 62, 46, 20)
$l_NomStation = GUICtrlCreateLabel("", 320, 64, 250, 20)
Local $l_Outillage = GUICtrlCreateLabel("Outillage:", 51, 92, 60, 20)
Local $l_OutillageRetire = GUICtrlCreateLabel("Outillage retiré:", 20, 122, 110, 20)
Local $l_Demandeur = GUICtrlCreateLabel("Demandeur:", 35, 152, 70, 20)
;==[Les Contrôles]===========================================================================================
$c_Ligne = GUICtrlCreateCombo("", 110, 30, 145, 25, BitOR($CBS_DROPDOWNLIST, $WS_VSCROLL)) ; (text, left, top , width , height, ....)
$c_Station = GUICtrlCreateCombo("", 110, 60, 145, 25, BitOR($CBS_DROPDOWNLIST, $WS_VSCROLL))
$c_Outillage = GUICtrlCreateCombo("", 110, 90, 145, 25, BitOR($CBS_DROPDOWNLIST, $WS_VSCROLL))
$c_OutillageRetire = GUICtrlCreateCombo("", 110, 120, 145, 25, BitOR($CBS_DROPDOWNLIST, $WS_VSCROLL))
$i_Demandeur = GUICtrlCreateInput("", 110, 150, 145, 20)
$ListView1 = GUICtrlCreateListView("", 16, 180, 238, 145)
$ListView2 = GUICtrlCreateListView("", 260, 180, 209, 145)
$ListView3 = GUICtrlCreateListView("Date|Ligne|Station|Outillage|Enlevé|Défaut|Demandeur", 16, 330, 700, 200)
_GUICtrlListView_InsertColumn($ListView1, 0, "Nature du défaut", 155)
_GUICtrlListView_InsertColumn($ListView2, 0, "Défaut(s) affiché(s)", 230)
;==[Ajout items dans la ComboBox via le fichier Config.ini]==================================================
Local $LineIntoCfgFile = IniReadSection(@ScriptDir & "\Config\Config.ini", "LINES")
If @error Then
MsgBox(48, "Administrateur", "Erreur d'ouverture fichier Config.ini." & @CRLF & "-> Sortie de programme")
Exit
Else
For $i = 1 To $LineIntoCfgFile[0][0]
GUICtrlSetData($c_Ligne, $LineIntoCfgFile[$i][1])
Next
EndIf
;==[Mise en forme Contrôles (Font, taille, couleur, ...)]=====================================================
GUICtrlSetColor($Group1, 0x000000)
GUICtrlSetFont($Group1, 10, 400, 0, "Arial")
GUICtrlSetFont($l_Ligne, 10, 400, 0, "Arial")
GUICtrlSetFont($l_Station, 10, 400, 0, "Arial")
GUICtrlSetFont($l_Outillage, 10, 400, 0, "Arial")
GUICtrlSetFont($l_OutillageRetire, 10, 400, 0, "Arial")
GUICtrlSetFont($l_NomStation, 10, 400, 0, "Arial")
GUICtrlSetFont($l_Demandeur, 10, 400, 0, "Arial")
GUICtrlSetFont($i_Demandeur, 10, 400, 0, "Arial")
$hStatus = _GUICtrlStatusBar_Create($hGUI, -1, "", $SBARS_SIZEGRIP)
;==[Set parts]==============================
_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)
While 1
Sleep(10)
$fState = _GUICtrlComboBox_GetDroppedState($c_Ligne)
If $fState <> $fCurrState Then
Switch $fState
Case True
$fOpened = True
Case False
If $fOpened Then
$fOpened = False
$Line = GUICtrlRead($c_Ligne)
_LoadCells($Line)
EndIf
EndSwitch
$fCurrState = $fState
EndIf
;===============================================
Sleep(10)
$fState2 = _GUICtrlComboBox_GetDroppedState($c_Station)
If $fState2 <> $fCurrState2 Then
Switch $fState2
Case True
$fOpened2 = True
Case False
If $fOpened2 Then
$fOpened2 = False
$Cell = GUICtrlRead($c_Station)
_LoadTools($Line, $Cell)
EndIf
EndSwitch
$fCurrState2 = $fState2
EndIf
;===============================================
Sleep(10)
$fState3 = _GUICtrlComboBox_GetDroppedState($c_Outillage)
If $fState3 <> $fCurrState3 Then
Switch $fState3
Case True
$fOpened3 = True
Case False
If $fOpened3 Then
$fOpened3 = False
$Tool = GUICtrlRead($c_Outillage)
_LoadToolsRemove($Tool, $Line)
EndIf
EndSwitch
$fCurrState3 = $fState3
EndIf
;===============================================
WEnd
EndFunc
Func _LoadCells($Line)
$TempArray = ""
GUICtrlSetData($c_Station, "")
GUICtrlSetData($l_NomStation, "")
GUICtrlSetData($c_Outillage, "")
GUICtrlSetData($c_OutillageRetire, "")
;On récupère la quantité de la base SQLite
Local $iRows, $aResult, $iColumns, $iRval
$iRval = _SQLite_GetTable2d(-1, "SELECT * FROM Cells WHERE Line = '" & $Line & "';", $aResult, $iRows, $iColumns) ;$iRows -> Nombre de lignes
If $iRval = $SQLITE_OK Then
Local $TempArray[$iRows][3]
For $r = 1 To $iRows
For $c = 0 to 2
$TempArray[$r-1][$c] = $aResult[$r][$c]
Next
GUICtrlSetData($c_Station, $TempArray[$r-1][1])
Next
EndIf
EndFunc
Func _LoadTools($Line, $Cell)
$TempArray = ""
GUICtrlSetData($c_Outillage, "")
GUICtrlSetData($c_OutillageRetire, "")
;On récupère la quantité de la base SQLite
Local $iRows, $aResult, $iColumns, $iRval
$iRval = _SQLite_GetTable2d(-1, "SELECT * FROM ToolType WHERE Ligne = '" & $Line & "' And Station = '" & $Cell & "';", $aResult, $iRows, $iColumns) ;$iRows -> Nombre de lignes
If $iRval = $SQLITE_OK Then
Local $TempArray[$iRows][4]
For $r = 1 To $iRows
For $c = 0 to 3
$TempArray[$r-1][$c] = $aResult[$r][$c]
Next
GUICtrlSetData($c_Outillage, $TempArray[$r-1][3])
Next
EndIf
EndFunc
Func _LoadToolsRemove($Tool, $Line)
$TempArray = ""
GUICtrlSetData($c_OutillageRetire, "")
Local $Generation = StringLeft($Line, 4)
;On récupère la quantité de la base SQLite
Local $iRows, $aResult, $iColumns, $iRval
$iRval = _SQLite_GetTable2d(-1, "SELECT * FROM Tools WHERE Type_Outil = '" & $Tool & "' And Generation = '" & $Generation & "';", $aResult, $iRows, $iColumns) ;$iRows -> Nombre de lignes
If $iRval = $SQLITE_OK Then
Local $TempArray[$iRows][3]
For $r = 1 To $iRows
For $c = 0 to 2
$TempArray[$r-1][$c] = $aResult[$r][$c]
Next
GUICtrlSetData($c_OutillageRetire, $TempArray[$r-1][2])
Next
EndIf
EndFunc
Func _Quitter()
Exit
EndFunc
Func _ScreenAdaptation()
Local $WorkAera = _GetWorkArea()
Local $aGuiPos = WinGetPos($hGui)
If $aGuiPos[0] <> $WorkAera[0] OR $aGuiPos[1] <> $WorkAera[1] OR $aGuiPos[2] <> $WorkAera[4] OR $aGuiPos[3] <> $WorkAera[5] Then WinMove($hGui, "", $WorkAera[0], $WorkAera[1], $WorkAera[4], $WorkAera[5])
EndFunc
Func _GetWorkArea()
Local $Area[6]
Local $StartRect = DllStructCreate("int[4]")
Local $PStartRect = DllStructGetPtr($StartRect)
DllCall("user32.dll", "int", "SystemParametersInfo", "int", 48, "int", 0, "ptr", $PStartRect, "int", 0)
$Area[0] = DllStructGetData($StartRect,1,1)
$Area[1] = DllStructGetData($StartRect,1,2)
$Area[2] = DllStructGetData($StartRect,1,3)
$Area[3] = DllStructGetData($StartRect,1,4)
$Area[4] = $Area[2] - $Area[0]
$Area[5] = $Area[3] - $Area[1]
Return $Area
EndFunc
Func WM_TIMER($hWnd, $iMsg, $iwParam, $ilParam)
#forceref $hWnd, $iMsg, $ilParam
Switch _Timer_GetTimerID($iwParam)
Case $iTimer1
_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


