Jump to content

Create a filtering listview


ATR
 Share

Recommended Posts

Hi evreybody,

I want to create a filtering listview, with optionnals checkbox and combobox. (The second combobox is based on the choice of the forst combobox).

I'm looking on other topics of filtering, and I do lots of tests, but within sucess ! I don't know how to update events..

Thanks in advance.

#include <GUIConstantsEx.au3>
#include <ListViewConstants.au3>
#Include <GuiListView.au3>
#Include <String.au3>

;Systèmes d'exploitation :
$OS_1 = " Windows XP"
$OS_2 = " Windows 2000"
$OS_3 = " Windows 2003"
$OS_4 = " Windows vista"
$OS_5 = " Windows 7"

; Rubriques :
$Rubrique_1 = " L'éditeur d'objets de stratégie de groupe"
$Rubrique_2 = " Gesion des utilisateurs"
$Rubrique_3 = " Le bureau Windows"
$Rubrique_4 = " L'explorateur Windows"
$Rubrique_5 = " Le système"
$Rubrique_6 = " Les applications et composants Windows"
$Rubrique_7 = " Perrsonnaliser et sécuriser Internet Explorer"
$Rubrique_8 = " Restrictions dans Internet Explorer"
$Rubrique_9 = " Périphériques et réseau"

; Sous-rubriques :
; Sous-rubrique " L'éditeur d'objets de stratégie de groupe"
$SousRubrique_1 = " Les fichiers de console"
$SousRubrique_2 = " L'éditeur d'objets de stratégie de groupe"
$SousRubrique_3 = " Les stratégies de groupe"
$SousRubrique_4 = " Les fichiers de modèle"
; Sous-rubrique " Gesion des utilisateurs"
$SousRubrique_5 = " Le contrôle de compte d'utilisateur"
$SousRubrique_6 = " Paramétrer le contrôle du compte d'utilisateur"
$SousRubrique_7 = " Le contrôle parental"
$SousRubrique_8 = " L'ouverture de session interactive"
$SousRubrique_9 = " Les options de sécurité et le registre Windows"
; Sous-rubrique " Le bureau Windows"
$SousRubrique_10 = " Le bureau Windows"
$SousRubrique_11 = " Le menu Démarrer"
$SousRubrique_12 = " La barre des tâches"
$SousRubrique_13 = " Les raccourcis"
$SousRubrique_14 = " Le panneau de configuration"
$SousRubrique_15 = " L'affichage"
$SousRubrique_16 = " Les écrans de veille"
$SousRubrique_17 = " Les options régionales et linguistiques"
; Sous-rubrique " L'explorateur Windows"
$SousRubrique_18 = " Personnaliser l'explorateur Windows"
$SousRubrique_19 = " Sécuriser l'explorateur Windows"
$SousRubrique_20 = " La corbeille Windows"
$SousRubrique_21 = " Les miniatures"
$SousRubrique_22 = " Les lecteurs"
$SousRubrique_23 = " Les menus contextuels sous Windows 7"
$SousRubrique_24 = " La fonctionnalité des versions précédentes"
$SousRubrique_25 = " La fonctionnalité de recherche"
$SousRubrique_26 = " Chiffrement des ficheirs et des dossiers"
$SousRubrique_27 = " Sauvegarde des données"
; Sous-rubrique " Le système"
$SousRubrique_28 = " Personnaliser votre système"
$SousRubrique_29 = " Gérer votre licence Windows"
$SousRubrique_30 = " Les fonctionnalités système"
$SousRubrique_31 = " Le gestionnaire de tâches"
$SousRubrique_32 = " Nettoyage de disque"
$SousRubrique_33 = " Les profils d'utilisateur"
$SousRubrique_34 = " La restauration système"
$SousRubrique_35 = " Windows update"
$SousRubrique_36 = " Windows Defender"
$SousRubrique_37 = " Les quotas de disque"
; Sous-rubrique " Les applications et composants Windows"
$SousRubrique_38 = " Définir une restriction logicielle"
$SousRubrique_39 = " Programmes et fonctionnalités"
$SousRubrique_40 = " Les programmes et fonctionnalités Windows 7"
$SousRubrique_41 = " Les outils systèmes"
$SousRubrique_42 = " Compatibilité des applications"
$SousRubrique_43 = " Windows Installer"
$SousRubrique_44 = " Les composants Windows"
$SousRubrique_45 = " Windows Media Player"
$SousRubrique_46 = " Windows Mail"
$SousRubrique_47 = " Gestion des pièces jointes"
$SousRubrique_48 = " Ne pas autoriser l'éxécutioon de Windows Media Center"
$SousRubrique_49 = " Désactiver les paramètres de présentation Windows"
$SousRubrique_50 = " Les capteurs d'emplacements"
; Sous-rubrique " Personnaliser et sécuriser Internet Explorer"
$SousRubrique_51 = " Personnaliser Internet Explorer"
$SousRubrique_52 = " Les zones de sécurité"
$SousRubrique_53 = " L'onglet sécurité"
$SousRubrique_54 = " Les fonctionnalités de sécurité"
$SousRubrique_55 = " Les accélérateurs web"
$SousRubrique_56 = " L'affichage de compatibilité"
$SousRubrique_57 = " Le filtre InPrivate"
; Sous-rubrique " Restrictions dans Internet Explorer"
$SousRubrique_58 = " Paramétrer les menus d'Internet Explorer"
$SousRubrique_59 = " Le panneau de configuration d'Internet Explorer"
$SousRubrique_60 = " Options avancées"
$SousRubrique_61 = " Les barres d'outils"
$SousRubrique_62 = " Paramètres Internet"
$SousRubrique_63 = " Paramètres de navigation"
$SousRubrique_64 = " Menus du navigateur"
$SousRubrique_65 = " Les flux RSS et les Web Slices"
; Sous-rubrique " Périphériques et réseau"
$SousRubrique_66 = " Les périphériques"
$SousRubrique_67 = " Gestion de l'alimentation"
$SousRubrique_68 = " Stratégies sur le réseau"
$SousRubrique_69 = " Le pare-feu de connexion Internet"
$SousRubrique_70 = " Windows Connect Now"
$SousRubrique_71 = " Le Projecteur réseau"

GUICreate("Automatisations", 520, 700)
GUISetState(@SW_SHOW)

GUICtrlCreateGroup("Filtres", 10, 10, 500, 120)
$Windows_2000 = GUICtrlCreateCheckbox("Windows 2000", 30, 30)
$Windows_XP = GUICtrlCreateCheckbox("Windows XP", 130, 30)
$Windows_2003 = GUICtrlCreateCheckbox("Windows 2003", 220, 30)
$Windows_Vista = GUICtrlCreateCheckbox("Windows Vista", 320, 30)
$Windows_7 = GUICtrlCreateCheckbox("Windows 7", 420, 30)
GUICtrlCreateLabel("Rubriques :", 30, 65)
$ListeRubriques = GUICtrlCreateCombo("", 90, 62.5, 250)
GUICtrlSetData($ListeRubriques, " |" & $Rubrique_1 & "|" & $Rubrique_2 & "|" & $Rubrique_3 & "|" & $Rubrique_4 & "|" & $Rubrique_5 & "|" & $Rubrique_6 & "|" & $Rubrique_7 & "|" & $Rubrique_8 & "|" & $Rubrique_9)
$ListeSousRubriques = GUICtrlCreateCombo("", 90, 95, 250)
GUICtrlSetState(-1, $GUI_DISABLE)
$Tableau = GUICtrlCreateListView("ID|Systèmes|Actions|Rubrique|Sous-rubrique", 10, 145, 500, 400, -1, BitOR($LVS_EX_CHECKBOXES, $LVS_EX_GRIDLINES))
_GUICtrlListView_SetColumnWidth($Tableau, 1, 120)
_GUICtrlListView_SetColumnWidth($Tableau, 2, 376)

Dim $Actions[9]
$Actions[0] = 'GUICtrlCreateListViewItem("1|"&$OS_1&"|évènement XP R1 SR3|"& $Rubrique_1 & "|" & $SousRubrique_3, $Tableau)'
$Actions[1] = 'GUICtrlCreateListViewItem("2|"&$OS_1&"|évènement XP R1 SR1|"& $Rubrique_1 & "|" & $SousRubrique_1, $Tableau)'
$Actions[2] = 'GUICtrlCreateListViewItem("03|"&$OS_2&"|évènement XP R2 SR8|"& $Rubrique_2 & "|" & $SousRubrique_8, $Tableau)'
$Actions[3] = 'GUICtrlCreateListViewItem("4|"&$OS_2&"|évènement XP R3 SR3|"& $Rubrique_3 & "|" & $SousRubrique_3, $Tableau)'
$Actions[4] = 'GUICtrlCreateListViewItem("54|"&$OS_1&"|évènement XP R1 SR2|"& $Rubrique_1 & "|" & $SousRubrique_2, $Tableau)'
$Actions[5] = 'GUICtrlCreateListViewItem("6|"&$OS_1&"|évènement XP R2 SR7|"& $Rubrique_2 & "|" & $SousRubrique_7, $Tableau)'
$Actions[6] = 'GUICtrlCreateListViewItem("789|"&$OS_2&"|évènement XP R2 SR6|"& $Rubrique_2 & "|" & $SousRubrique_6, $Tableau)'
$Actions[7] = 'GUICtrlCreateListViewItem("8|"&$OS_1&"|évènement XP R1 SR2|"& $Rubrique_1 & "|" & $SousRubrique_2, $Tableau)'
$Actions[8] = 'GUICtrlCreateListViewItem("9|"&$OS_1&"|évènement XP R1 SR2|"& $Rubrique_1 & "|" & $SousRubrique_2, $Tableau)'

For $Elements_depart In $Actions
    Execute($Elements_depart)
Next

;~ _GUICtrlListView_HideColumn($Tableau, 0)
_GUICtrlListView_HideColumn($Tableau, 3)
_GUICtrlListView_HideColumn($Tableau, 4)
GUICtrlSetState($Windows_2000, $GUI_CHECKED)
GUICtrlSetState($Windows_XP, $GUI_CHECKED)
GUICtrlSetState($Windows_2003, $GUI_CHECKED)
GUICtrlSetState($Windows_Vista, $GUI_CHECKED)
GUICtrlSetState($Windows_7, $GUI_CHECKED)

$Appliquer = GUICtrlCreateButton("Appliquer", 20, 560, 100)
$Quitter = GUICtrlCreateButton("Quitter", 140, 560, 100)

_GUICtrlListView_RegisterSortCallBack($Tableau)

Do
    $msg = GUIGetMsg()
    Select
        Case $msg = $Tableau
            _GUICtrlListView_SortItems($Tableau, GUICtrlGetState($Tableau))
        Case $msg = $Windows_2000
            $Question_coche = GUICtrlRead($Windows_2000)
            $Lecture_rubriques = GUICtrlRead($ListeRubriques)
            $Lecture_SousRubriques = GUICtrlRead($ListeSousRubriques)
            If $Lecture_rubriques <> "" Then
                If $Lecture_SousRubriques <> "" Then
                    Filtrage($OS_2, $Question_coche, $Lecture_rubriques, $Lecture_SousRubriques)
                    ConsoleWrite("filtrage 1"&@CRLF)
                EndIf
                Filtrage($OS_2, $Question_coche, $Lecture_rubriques)
                ConsoleWrite("filtrage 2"&@CRLF)
            Else
                Filtrage($OS_2, $Question_coche)
                ConsoleWrite("filtrage 3"&@CRLF)
            EndIf
        Case $msg = $Windows_2003
            $Question_coche = GUICtrlRead($Windows_2003)
            ConsoleWrite(GUICtrlGetState($Windows_2000)&@CRLF)
            $Lecture_rubriques = GUICtrlRead($ListeRubriques)
            $Lecture_SousRubriques = GUICtrlRead($ListeSousRubriques)
            If $Lecture_rubriques <> "" Then
                If $Lecture_SousRubriques <> "" Then
                    Filtrage($OS_3, $Question_coche, $Lecture_rubriques, $Lecture_SousRubriques)
                    ConsoleWrite("filtrage 4"&@CRLF)
                EndIf
                Filtrage($OS_3, $Question_coche, $Lecture_rubriques)
                ConsoleWrite("filtrage 5"&@CRLF)
            Else
                Filtrage($OS_3, $Question_coche)
                ConsoleWrite("filtrage 6"&@CRLF)
            EndIf
        Case $msg = $Windows_XP
            $Question_coche = GUICtrlRead($Windows_XP)
            $Lecture_rubriques = GUICtrlRead($ListeRubriques)
            $Lecture_SousRubriques = GUICtrlRead($ListeSousRubriques)
            If $Lecture_rubriques <> "" Then
                If $Lecture_SousRubriques <> "" Then
                    Filtrage($OS_1, $Question_coche, $Lecture_rubriques, $Lecture_SousRubriques)
                    ConsoleWrite("filtrage 7"&@CRLF)
                EndIf
                Filtrage($OS_1, $Question_coche, $Lecture_rubriques)
                ConsoleWrite("filtrage 8"&@CRLF)
            Else
                Filtrage($OS_1, $Question_coche)
            EndIf
        Case $msg = $Windows_Vista
            $Question_coche = GUICtrlRead($Windows_Vista)
            $Lecture_rubriques = GUICtrlRead($ListeRubriques)
            $Lecture_SousRubriques = GUICtrlRead($ListeSousRubriques)
            If $Lecture_rubriques <> "" Then
                If $Lecture_SousRubriques <> "" Then
                    Filtrage($OS_4, $Question_coche, $Lecture_rubriques, $Lecture_SousRubriques)
                EndIf
                Filtrage($OS_4, $Question_coche, $Lecture_rubriques)
            Else
                Filtrage($OS_4, $Question_coche)
            EndIf
        Case $msg = $Windows_7
            $Question_coche = GUICtrlRead($Windows_7)
            $Lecture_rubriques = GUICtrlRead($ListeRubriques)
            $Lecture_SousRubriques = GUICtrlRead($ListeSousRubriques)
            If $Lecture_rubriques <> "" Then
                If $Lecture_SousRubriques <> "" Then
                    Filtrage($OS_5, $Question_coche, $Lecture_rubriques, $Lecture_SousRubriques)
                EndIf
                Filtrage($OS_5, $Question_coche, $Lecture_rubriques)
            Else
                Filtrage($OS_5, $Question_coche)
            EndIf
        Case $msg = $ListeRubriques
            $Lecture_rubriques = GUICtrlRead($ListeRubriques)
            Filtrage_Rubriques($Lecture_rubriques)
        Case $msg = $ListeSousRubriques
            $Lecture_SousRubriques = GUICtrlRead($ListeSousRubriques)
            $Lecture_rubriques = GUICtrlRead($ListeRubriques)
        Case $msg = $Quitter
            GUIDelete()
            Exit
    EndSelect
Until $msg = $GUI_EVENT_CLOSE

_GUICtrlListView_UnRegisterSortCallBack($Tableau)

Func Filtrage_Rubriques($Rubrique)
    If $Rubrique = "" Then
        GUICtrlSetData($ListeSousRubriques, "")
        GUICtrlSetState($ListeSousRubriques, $GUI_DISABLE)
    ElseIf $Rubrique = " L'éditeur d'objets de stratégie de groupe" Then
        GUICtrlSetState($ListeSousRubriques, $GUI_ENABLE)
        GUICtrlSetData($ListeSousRubriques, " |"&$SousRubrique_1&"|"&$SousRubrique_2&"|"&$SousRubrique_3&"|"&$SousRubrique_4)
    ElseIf $Rubrique = " Gesion des utilisateurs" Then
        GUICtrlSetState($ListeSousRubriques, $GUI_ENABLE)
        GUICtrlSetData($ListeSousRubriques, " |"&$SousRubrique_5&"|"&$SousRubrique_6&"|"&$SousRubrique_7&"|"&$SousRubrique_8&"|"&$SousRubrique_9)
    ElseIf $Rubrique = " Le bureau Windows" Then
        GUICtrlSetState($ListeSousRubriques, $GUI_ENABLE)
        GUICtrlSetData($ListeSousRubriques, " |"&$SousRubrique_10&"|"&$SousRubrique_11&"|"&$SousRubrique_12&"|"&$SousRubrique_13&"|"&$SousRubrique_14&"|"&$SousRubrique_15&"|"&$SousRubrique_16&"|"&$SousRubrique_17)
    ElseIf $Rubrique = " L'explorateur Windows" Then
        GUICtrlSetState($ListeSousRubriques, $GUI_ENABLE)
        GUICtrlSetData($ListeSousRubriques, " |"&$SousRubrique_18&"|"&$SousRubrique_19&"|"&$SousRubrique_20&"|"&$SousRubrique_21&"|"&$SousRubrique_22&"|"&$SousRubrique_23&"|"&$SousRubrique_24&"|"&$SousRubrique_25&"|"&$SousRubrique_26&"|"&$SousRubrique_27)
    ElseIf $Rubrique = " Le système" Then
        GUICtrlSetState($ListeSousRubriques, $GUI_ENABLE)
        GUICtrlSetData($ListeSousRubriques, " |"&$SousRubrique_28&"|"&$SousRubrique_29&"|"&$SousRubrique_30&"|"&$SousRubrique_31&"|"&$SousRubrique_32&"|"&$SousRubrique_33&"|"&$SousRubrique_34&"|"&$SousRubrique_35&"|"&$SousRubrique_36&"|"&$SousRubrique_37)
    ElseIf $Rubrique = " Les applications et composants Windows" Then
        GUICtrlSetState($ListeSousRubriques, $GUI_ENABLE)
        GUICtrlSetData($ListeSousRubriques, " |"&$SousRubrique_38&"|"&$SousRubrique_39&"|"&$SousRubrique_40&"|"&$SousRubrique_41&"|"&$SousRubrique_42&"|"&$SousRubrique_43&"|"&$SousRubrique_44&"|"&$SousRubrique_45&"|"&$SousRubrique_46&"|"&$SousRubrique_47&"|"&$SousRubrique_48&"|"&$SousRubrique_49&"|"&$SousRubrique_50)
    ElseIf $Rubrique = " Personnaliser et sécuriser Internet Explorer" Then
        GUICtrlSetState($ListeSousRubriques, $GUI_ENABLE)
        GUICtrlSetData($ListeSousRubriques, " |"&$SousRubrique_51&"|"&$SousRubrique_52&"|"&$SousRubrique_53&"|"&$SousRubrique_54&"|"&$SousRubrique_55&"|"&$SousRubrique_56&"|"&$SousRubrique_57)
    ElseIf $Rubrique = " Restrictions dans Internet Explorer" Then
        GUICtrlSetState($ListeSousRubriques, $GUI_ENABLE)
        GUICtrlSetData($ListeSousRubriques, " |"&$SousRubrique_58&"|"&$SousRubrique_59&"|"&$SousRubrique_60&"|"&$SousRubrique_61&"|"&$SousRubrique_62&"|"&$SousRubrique_63&"|"&$SousRubrique_64&"|"&$SousRubrique_65)
    ElseIf $Rubrique = " Périphériques et réseau" Then
        GUICtrlSetState($ListeSousRubriques, $GUI_ENABLE)
        GUICtrlSetData($ListeSousRubriques, " |"&$SousRubrique_66&"|"&$SousRubrique_67&"|"&$SousRubrique_68&"|"&$SousRubrique_69&"|"&$SousRubrique_70&"|"&$SousRubrique_71)
    EndIf
EndFunc

Func Filtrage($OS = -1, $Coche = -1, $Rubrique = "", $SousRubrique = "")
    ConsoleWrite("OS de départ : " & $OS & @CRLF)
    $Lecture_Windows_2000 = GUICtrlRead($Windows_2000)
    $Lecture_Windows_XP = GUICtrlRead($Windows_XP)
    $Lecture_Windows_2003 = GUICtrlRead($Windows_2003)
    $Lecture_Windows_Vista = GUICtrlRead($Windows_Vista)
    $Lecture_Windows_7 = GUICtrlRead($Windows_7)
    $Lecture_rubriques = GUICtrlRead($ListeRubriques)
    $Lecture_SousRubriques = GUICtrlRead($ListeSousRubriques)

    $NombreElements = _GUICtrlListView_GetItemCount($Tableau)
; ----------------------------------------------------------------------------------------------------
; ----------                            Ajout des éléments                                    ----------
; ----------------------------------------------------------------------------------------------------
    For $Elements In $Actions ; parcours des éléments
        $Elements_ID = _StringBetween($Elements, 'GUICtrlCreateListViewItem("', "|")
        $ConversionValeurArray = _ArrayToString($Elements_ID)

        $Verification_Windows2000 = 0
        $Verification_WindowsXP = 0

        For $i = $NombreElements -1 To 0 Step -1 ; parcours du tableau affiché

            $RubriqueTableau_ID = _GUICtrlListView_GetItem($Tableau, $i, 0) ; Récupération de l'ID des éléments du tableau
            $RubriqueTableau_OS = _GUICtrlListView_GetItem($Tableau, $i, 1) ; Récupération de l'OS des éléments du tableau

            If $Lecture_Windows_2000 = 4 Then ; Si la case "Windows 2000" est décochée
;~              ConsoleWrite('"Windows 2000" est décochée'&@CRLF&"$RubriqueTableau_OS[3] : "&$RubriqueTableau_OS[3]&@CRLF)
                If StringInStr($RubriqueTableau_OS[3], "Windows 2000") Then
                    _GUICtrlListView_DeleteItem($Tableau, $i)
                EndIf
            ElseIf $Lecture_Windows_2000 = 1 And $OS = " Windows 2000" Then ; Si la case "Windows 2000" est cochée
                $Verification_Windows2000 = 1
                If StringInStr($RubriqueTableau_ID[3], $ConversionValeurArray) Then
                    $Verification_Windows2000 += 1
                EndIf
            EndIf
            If $Lecture_Windows_XP = 4 Then ; Si la case "Windows XP" est décochée
                If StringInStr($RubriqueTableau_OS[3], "Windows XP") Then
                    _GUICtrlListView_DeleteItem($Tableau, $i)
                EndIf
            ElseIf $Lecture_Windows_XP = 1 And $OS = " Windows XP" Then ; Si la case "Windows XP" est cochée
                $Verification_WindowsXP = 1
                If StringInStr($RubriqueTableau_ID[3], $ConversionValeurArray) Then
                    $Verification_WindowsXP += 1
                EndIf
            EndIf
            If $Lecture_Windows_2003 = 4 Then ; Si la case "Windows 2003" est décochée
                If StringInStr($RubriqueTableau_OS[3], "Windows 2003") Then
                    _GUICtrlListView_DeleteItem($Tableau, $i)
                EndIf
            ElseIf $Lecture_Windows_2003 = 1 Then
            EndIf
            If $Lecture_Windows_Vista = 4 Then ; Si la case "Windows Vista" est décochée
                If StringInStr($RubriqueTableau_OS[3], "Windows vista") Then
                    _GUICtrlListView_DeleteItem($Tableau, $i)
                EndIf
            EndIf
            If $Lecture_Windows_7 = 4 Then ; Si la case "Windows 7" est décochée
                If StringInStr($RubriqueTableau_OS[3], "Windows 7") Then
                    _GUICtrlListView_DeleteItem($Tableau, $i)
                EndIf
            EndIf
        Next
        ConsoleWrite("Verif 2000 : "&$Verification_Windows2000&@CRLF&"Verif XP : "&$Verification_WindowsXP&@CRLF)
        If $Verification_Windows2000 = 1 Then
            Execute($Elements)
        ElseIf $Verification_WindowsXP = 1 Then
            Execute($Elements)
        EndIf
    Next
EndFunc
Link to comment
Share on other sites

ATR, I didn't quite understood what you mean, but I've made some changes in your script

- in the second combobox the values were added (instead replacing) based on the selection from the first one

- changed the If...ElseIf... with Switch... Case (it's faster)

#include <GUIConstantsEx.au3>
#include <ListViewConstants.au3>
#Include <GuiListView.au3>
#Include <String.au3>

;Systèmes d'exploitation :
$OS_1 = " Windows XP"
$OS_2 = " Windows 2000"
$OS_3 = " Windows 2003"
$OS_4 = " Windows vista"
$OS_5 = " Windows 7"

; Rubriques :
$Rubrique_1 = " L'éditeur d'objets de stratégie de groupe"
$Rubrique_2 = " Gesion des utilisateurs"
$Rubrique_3 = " Le bureau Windows"
$Rubrique_4 = " L'explorateur Windows"
$Rubrique_5 = " Le système"
$Rubrique_6 = " Les applications et composants Windows"
$Rubrique_7 = " Perrsonnaliser et sécuriser Internet Explorer"
$Rubrique_8 = " Restrictions dans Internet Explorer"
$Rubrique_9 = " Périphériques et réseau"

; Sous-rubriques :
; Sous-rubrique " L'éditeur d'objets de stratégie de groupe"
$SousRubrique_1 = " Les fichiers de console"
$SousRubrique_2 = " L'éditeur d'objets de stratégie de groupe"
$SousRubrique_3 = " Les stratégies de groupe"
$SousRubrique_4 = " Les fichiers de modèle"
; Sous-rubrique " Gesion des utilisateurs"
$SousRubrique_5 = " Le contrôle de compte d'utilisateur"
$SousRubrique_6 = " Paramétrer le contrôle du compte d'utilisateur"
$SousRubrique_7 = " Le contrôle parental"
$SousRubrique_8 = " L'ouverture de session interactive"
$SousRubrique_9 = " Les options de sécurité et le registre Windows"
; Sous-rubrique " Le bureau Windows"
$SousRubrique_10 = " Le bureau Windows"
$SousRubrique_11 = " Le menu Démarrer"
$SousRubrique_12 = " La barre des tâches"
$SousRubrique_13 = " Les raccourcis"
$SousRubrique_14 = " Le panneau de configuration"
$SousRubrique_15 = " L'affichage"
$SousRubrique_16 = " Les écrans de veille"
$SousRubrique_17 = " Les options régionales et linguistiques"
; Sous-rubrique " L'explorateur Windows"
$SousRubrique_18 = " Personnaliser l'explorateur Windows"
$SousRubrique_19 = " Sécuriser l'explorateur Windows"
$SousRubrique_20 = " La corbeille Windows"
$SousRubrique_21 = " Les miniatures"
$SousRubrique_22 = " Les lecteurs"
$SousRubrique_23 = " Les menus contextuels sous Windows 7"
$SousRubrique_24 = " La fonctionnalité des versions précédentes"
$SousRubrique_25 = " La fonctionnalité de recherche"
$SousRubrique_26 = " Chiffrement des ficheirs et des dossiers"
$SousRubrique_27 = " Sauvegarde des données"
; Sous-rubrique " Le système"
$SousRubrique_28 = " Personnaliser votre système"
$SousRubrique_29 = " Gérer votre licence Windows"
$SousRubrique_30 = " Les fonctionnalités système"
$SousRubrique_31 = " Le gestionnaire de tâches"
$SousRubrique_32 = " Nettoyage de disque"
$SousRubrique_33 = " Les profils d'utilisateur"
$SousRubrique_34 = " La restauration système"
$SousRubrique_35 = " Windows update"
$SousRubrique_36 = " Windows Defender"
$SousRubrique_37 = " Les quotas de disque"
; Sous-rubrique " Les applications et composants Windows"
$SousRubrique_38 = " Définir une restriction logicielle"
$SousRubrique_39 = " Programmes et fonctionnalités"
$SousRubrique_40 = " Les programmes et fonctionnalités Windows 7"
$SousRubrique_41 = " Les outils systèmes"
$SousRubrique_42 = " Compatibilité des applications"
$SousRubrique_43 = " Windows Installer"
$SousRubrique_44 = " Les composants Windows"
$SousRubrique_45 = " Windows Media Player"
$SousRubrique_46 = " Windows Mail"
$SousRubrique_47 = " Gestion des pièces jointes"
$SousRubrique_48 = " Ne pas autoriser l'éxécutioon de Windows Media Center"
$SousRubrique_49 = " Désactiver les paramètres de présentation Windows"
$SousRubrique_50 = " Les capteurs d'emplacements"
; Sous-rubrique " Personnaliser et sécuriser Internet Explorer"
$SousRubrique_51 = " Personnaliser Internet Explorer"
$SousRubrique_52 = " Les zones de sécurité"
$SousRubrique_53 = " L'onglet sécurité"
$SousRubrique_54 = " Les fonctionnalités de sécurité"
$SousRubrique_55 = " Les accélérateurs web"
$SousRubrique_56 = " L'affichage de compatibilité"
$SousRubrique_57 = " Le filtre InPrivate"
; Sous-rubrique " Restrictions dans Internet Explorer"
$SousRubrique_58 = " Paramétrer les menus d'Internet Explorer"
$SousRubrique_59 = " Le panneau de configuration d'Internet Explorer"
$SousRubrique_60 = " Options avancées"
$SousRubrique_61 = " Les barres d'outils"
$SousRubrique_62 = " Paramètres Internet"
$SousRubrique_63 = " Paramètres de navigation"
$SousRubrique_64 = " Menus du navigateur"
$SousRubrique_65 = " Les flux RSS et les Web Slices"
; Sous-rubrique " Périphériques et réseau"
$SousRubrique_66 = " Les périphériques"
$SousRubrique_67 = " Gestion de l'alimentation"
$SousRubrique_68 = " Stratégies sur le réseau"
$SousRubrique_69 = " Le pare-feu de connexion Internet"
$SousRubrique_70 = " Windows Connect Now"
$SousRubrique_71 = " Le Projecteur réseau"

GUICreate("Automatisations", 520, 700)
GUISetState(@SW_SHOW)

GUICtrlCreateGroup("Filtres", 10, 10, 500, 120)
$Windows_2000 = GUICtrlCreateCheckbox("Windows 2000", 30, 30)
$Windows_XP = GUICtrlCreateCheckbox("Windows XP", 130, 30)
$Windows_2003 = GUICtrlCreateCheckbox("Windows 2003", 220, 30)
$Windows_Vista = GUICtrlCreateCheckbox("Windows Vista", 320, 30)
$Windows_7 = GUICtrlCreateCheckbox("Windows 7", 420, 30)
GUICtrlCreateLabel("Rubriques :", 30, 65)
$ListeRubriques = GUICtrlCreateCombo("", 95, 62.5, 250)
GUICtrlSetData($ListeRubriques, $Rubrique_1 & "|" & $Rubrique_2 & "|" & $Rubrique_3 & "|" & $Rubrique_4 & "|" & $Rubrique_5 & "|" & $Rubrique_6 & "|" & $Rubrique_7 & "|" & $Rubrique_8 & "|" & $Rubrique_9)
$ListeSousRubriques = GUICtrlCreateCombo("", 95, 95, 250)
GUICtrlSetState(-1, $GUI_DISABLE)
$Tableau = GUICtrlCreateListView("ID|Systèmes|Actions|Rubrique|Sous-rubrique", 10, 145, 500, 400, -1, BitOR($LVS_EX_CHECKBOXES, $LVS_EX_GRIDLINES))
_GUICtrlListView_SetColumnWidth($Tableau, 1, 120)
_GUICtrlListView_SetColumnWidth($Tableau, 2, 376)

Dim $Actions[9]
$Actions[0] = 'GUICtrlCreateListViewItem("1|"&$OS_1&"|évènement XP R1 SR3|"& $Rubrique_1 & "|" & $SousRubrique_3, $Tableau)'
$Actions[1] = 'GUICtrlCreateListViewItem("2|"&$OS_1&"|évènement XP R1 SR1|"& $Rubrique_1 & "|" & $SousRubrique_1, $Tableau)'
$Actions[2] = 'GUICtrlCreateListViewItem("03|"&$OS_2&"|évènement XP R2 SR8|"& $Rubrique_2 & "|" & $SousRubrique_8, $Tableau)'
$Actions[3] = 'GUICtrlCreateListViewItem("4|"&$OS_2&"|évènement XP R3 SR3|"& $Rubrique_3 & "|" & $SousRubrique_3, $Tableau)'
$Actions[4] = 'GUICtrlCreateListViewItem("54|"&$OS_1&"|évènement XP R1 SR2|"& $Rubrique_1 & "|" & $SousRubrique_2, $Tableau)'
$Actions[5] = 'GUICtrlCreateListViewItem("6|"&$OS_1&"|évènement XP R2 SR7|"& $Rubrique_2 & "|" & $SousRubrique_7, $Tableau)'
$Actions[6] = 'GUICtrlCreateListViewItem("789|"&$OS_2&"|évènement XP R2 SR6|"& $Rubrique_2 & "|" & $SousRubrique_6, $Tableau)'
$Actions[7] = 'GUICtrlCreateListViewItem("8|"&$OS_1&"|évènement XP R1 SR2|"& $Rubrique_1 & "|" & $SousRubrique_2, $Tableau)'
$Actions[8] = 'GUICtrlCreateListViewItem("9|"&$OS_1&"|évènement XP R1 SR2|"& $Rubrique_1 & "|" & $SousRubrique_2, $Tableau)'

For $Elements_depart In $Actions
    Execute($Elements_depart)
Next

;~ _GUICtrlListView_HideColumn($Tableau, 0)
_GUICtrlListView_HideColumn($Tableau, 3)
_GUICtrlListView_HideColumn($Tableau, 4)
GUICtrlSetState($Windows_2000, $GUI_CHECKED)
GUICtrlSetState($Windows_XP, $GUI_CHECKED)
GUICtrlSetState($Windows_2003, $GUI_CHECKED)
GUICtrlSetState($Windows_Vista, $GUI_CHECKED)
GUICtrlSetState($Windows_7, $GUI_CHECKED)

$Appliquer = GUICtrlCreateButton("Appliquer", 20, 560, 100)
$Quitter = GUICtrlCreateButton("Quitter", 140, 560, 100)

_GUICtrlListView_RegisterSortCallBack($Tableau)

Do
    $msg = GUIGetMsg()
    Select
        Case $msg = $Tableau
            _GUICtrlListView_SortItems($Tableau, GUICtrlGetState($Tableau))
        Case $msg = $Windows_2000
            $Question_coche = GUICtrlRead($Windows_2000)
            $Lecture_rubriques = GUICtrlRead($ListeRubriques)
            $Lecture_SousRubriques = GUICtrlRead($ListeSousRubriques)
            If $Lecture_rubriques <> "" Then
                If $Lecture_SousRubriques <> "" Then
                    Filtrage($OS_2, $Question_coche, $Lecture_rubriques, $Lecture_SousRubriques)
                    ConsoleWrite("filtrage 1"&@CRLF)
                EndIf
                Filtrage($OS_2, $Question_coche, $Lecture_rubriques)
                ConsoleWrite("filtrage 2"&@CRLF)
            Else
                Filtrage($OS_2, $Question_coche)
                ConsoleWrite("filtrage 3"&@CRLF)
            EndIf
        Case $msg = $Windows_2003
            $Question_coche = GUICtrlRead($Windows_2003)
            ConsoleWrite(GUICtrlGetState($Windows_2000)&@CRLF)
            $Lecture_rubriques = GUICtrlRead($ListeRubriques)
            $Lecture_SousRubriques = GUICtrlRead($ListeSousRubriques)
            If $Lecture_rubriques <> "" Then
                If $Lecture_SousRubriques <> "" Then
                    Filtrage($OS_3, $Question_coche, $Lecture_rubriques, $Lecture_SousRubriques)
                    ConsoleWrite("filtrage 4"&@CRLF)
                EndIf
                Filtrage($OS_3, $Question_coche, $Lecture_rubriques)
                ConsoleWrite("filtrage 5"&@CRLF)
            Else
                Filtrage($OS_3, $Question_coche)
                ConsoleWrite("filtrage 6"&@CRLF)
            EndIf
        Case $msg = $Windows_XP
            $Question_coche = GUICtrlRead($Windows_XP)
            $Lecture_rubriques = GUICtrlRead($ListeRubriques)
            $Lecture_SousRubriques = GUICtrlRead($ListeSousRubriques)
            If $Lecture_rubriques <> "" Then
                If $Lecture_SousRubriques <> "" Then
                    Filtrage($OS_1, $Question_coche, $Lecture_rubriques, $Lecture_SousRubriques)
                    ConsoleWrite("filtrage 7"&@CRLF)
                EndIf
                Filtrage($OS_1, $Question_coche, $Lecture_rubriques)
                ConsoleWrite("filtrage 8"&@CRLF)
            Else
                Filtrage($OS_1, $Question_coche)
            EndIf
        Case $msg = $Windows_Vista
            $Question_coche = GUICtrlRead($Windows_Vista)
            $Lecture_rubriques = GUICtrlRead($ListeRubriques)
            $Lecture_SousRubriques = GUICtrlRead($ListeSousRubriques)
            If $Lecture_rubriques <> "" Then
                If $Lecture_SousRubriques <> "" Then
                    Filtrage($OS_4, $Question_coche, $Lecture_rubriques, $Lecture_SousRubriques)
                EndIf
                Filtrage($OS_4, $Question_coche, $Lecture_rubriques)
            Else
                Filtrage($OS_4, $Question_coche)
            EndIf
        Case $msg = $Windows_7
            $Question_coche = GUICtrlRead($Windows_7)
            $Lecture_rubriques = GUICtrlRead($ListeRubriques)
            $Lecture_SousRubriques = GUICtrlRead($ListeSousRubriques)
            If $Lecture_rubriques <> "" Then
                If $Lecture_SousRubriques <> "" Then
                    Filtrage($OS_5, $Question_coche, $Lecture_rubriques, $Lecture_SousRubriques)
                EndIf
                Filtrage($OS_5, $Question_coche, $Lecture_rubriques)
            Else
                Filtrage($OS_5, $Question_coche)
            EndIf
        Case $msg = $ListeRubriques
            $Lecture_rubriques = GUICtrlRead($ListeRubriques)
            Filtrage_Rubriques($Lecture_rubriques)
        Case $msg = $ListeSousRubriques
            $Lecture_SousRubriques = GUICtrlRead($ListeSousRubriques)
            $Lecture_rubriques = GUICtrlRead($ListeRubriques)
        Case $msg = $Quitter
            GUIDelete()
            Exit
    EndSelect
Until $msg = $GUI_EVENT_CLOSE

_GUICtrlListView_UnRegisterSortCallBack($Tableau)

Func Filtrage_Rubriques($Rubrique)
    Switch $Rubrique
        Case ""
            GUICtrlSetData($ListeSousRubriques, "")
            GUICtrlSetState($ListeSousRubriques, $GUI_DISABLE)
        Case " L'éditeur d'objets de stratégie de groupe"
            GUICtrlSetState($ListeSousRubriques, $GUI_ENABLE)
            GUICtrlSetData($ListeSousRubriques, "|"&$SousRubrique_1&"|"&$SousRubrique_2&"|"&$SousRubrique_3&"|"&$SousRubrique_4)
        Case " Gesion des utilisateurs"
            GUICtrlSetState($ListeSousRubriques, $GUI_ENABLE)
            GUICtrlSetData($ListeSousRubriques, "|"&$SousRubrique_5&"|"&$SousRubrique_6&"|"&$SousRubrique_7&"|"&$SousRubrique_8&"|"&$SousRubrique_9)
        Case " Le bureau Windows"
            GUICtrlSetState($ListeSousRubriques, $GUI_ENABLE)
            GUICtrlSetData($ListeSousRubriques, "|"&$SousRubrique_10&"|"&$SousRubrique_11&"|"&$SousRubrique_12&"|"&$SousRubrique_13&"|"&$SousRubrique_14&"|"&$SousRubrique_15&"|"&$SousRubrique_16&"|"&$SousRubrique_17)
        Case " L'explorateur Windows"
            GUICtrlSetState($ListeSousRubriques, $GUI_ENABLE)
            GUICtrlSetData($ListeSousRubriques, "|"&$SousRubrique_18&"|"&$SousRubrique_19&"|"&$SousRubrique_20&"|"&$SousRubrique_21&"|"&$SousRubrique_22&"|"&$SousRubrique_23&"|"&$SousRubrique_24&"|"&$SousRubrique_25&"|"&$SousRubrique_26&"|"&$SousRubrique_27)
        Case " Le système"
            GUICtrlSetState($ListeSousRubriques, $GUI_ENABLE)
            GUICtrlSetData($ListeSousRubriques, "|"&$SousRubrique_28&"|"&$SousRubrique_29&"|"&$SousRubrique_30&"|"&$SousRubrique_31&"|"&$SousRubrique_32&"|"&$SousRubrique_33&"|"&$SousRubrique_34&"|"&$SousRubrique_35&"|"&$SousRubrique_36&"|"&$SousRubrique_37)
        Case " Les applications et composants Windows"
            GUICtrlSetState($ListeSousRubriques, $GUI_ENABLE)
            GUICtrlSetData($ListeSousRubriques, "|"&$SousRubrique_38&"|"&$SousRubrique_39&"|"&$SousRubrique_40&"|"&$SousRubrique_41&"|"&$SousRubrique_42&"|"&$SousRubrique_43&"|"&$SousRubrique_44&"|"&$SousRubrique_45&"|"&$SousRubrique_46&"|"&$SousRubrique_47&"|"&$SousRubrique_48&"|"&$SousRubrique_49&"|"&$SousRubrique_50)
        Case " Personnaliser et sécuriser Internet Explorer"
            GUICtrlSetState($ListeSousRubriques, $GUI_ENABLE)
            GUICtrlSetData($ListeSousRubriques, "|"&$SousRubrique_51&"|"&$SousRubrique_52&"|"&$SousRubrique_53&"|"&$SousRubrique_54&"|"&$SousRubrique_55&"|"&$SousRubrique_56&"|"&$SousRubrique_57)
        Case " Restrictions dans Internet Explorer"
            GUICtrlSetState($ListeSousRubriques, $GUI_ENABLE)
            GUICtrlSetData($ListeSousRubriques, "|"&$SousRubrique_58&"|"&$SousRubrique_59&"|"&$SousRubrique_60&"|"&$SousRubrique_61&"|"&$SousRubrique_62&"|"&$SousRubrique_63&"|"&$SousRubrique_64&"|"&$SousRubrique_65)
        Case " Périphériques et réseau"
            GUICtrlSetState($ListeSousRubriques, $GUI_ENABLE)
            GUICtrlSetData($ListeSousRubriques, "|"&$SousRubrique_66&"|"&$SousRubrique_67&"|"&$SousRubrique_68&"|"&$SousRubrique_69&"|"&$SousRubrique_70&"|"&$SousRubrique_71)
    EndSwitch
EndFunc

Func Filtrage($OS = -1, $Coche = -1, $Rubrique = "", $SousRubrique = "")
    ConsoleWrite("OS de départ : " & $OS & @CRLF)
    $Lecture_Windows_2000 = GUICtrlRead($Windows_2000)
    $Lecture_Windows_XP = GUICtrlRead($Windows_XP)
    $Lecture_Windows_2003 = GUICtrlRead($Windows_2003)
    $Lecture_Windows_Vista = GUICtrlRead($Windows_Vista)
    $Lecture_Windows_7 = GUICtrlRead($Windows_7)
    $Lecture_rubriques = GUICtrlRead($ListeRubriques)
    $Lecture_SousRubriques = GUICtrlRead($ListeSousRubriques)

    $NombreElements = _GUICtrlListView_GetItemCount($Tableau)
; ----------------------------------------------------------------------------------------------------
; ----------                            Ajout des éléments                                    ----------
; ----------------------------------------------------------------------------------------------------
    For $Elements In $Actions ; parcours des éléments
        $Elements_ID = _StringBetween($Elements, 'GUICtrlCreateListViewItem("', "|")
        $ConversionValeurArray = _ArrayToString($Elements_ID)

        $Verification_Windows2000 = 0
        $Verification_WindowsXP = 0

        For $i = $NombreElements -1 To 0 Step -1 ; parcours du tableau affiché

            $RubriqueTableau_ID = _GUICtrlListView_GetItem($Tableau, $i, 0) ; Récupération de l'ID des éléments du tableau
            $RubriqueTableau_OS = _GUICtrlListView_GetItem($Tableau, $i, 1) ; Récupération de l'OS des éléments du tableau

            If $Lecture_Windows_2000 = 4 Then ; Si la case "Windows 2000" est décochée
;~              ConsoleWrite('"Windows 2000" est décochée'&@CRLF&"$RubriqueTableau_OS[3] : "&$RubriqueTableau_OS[3]&@CRLF)
                If StringInStr($RubriqueTableau_OS[3], "Windows 2000") Then
                    _GUICtrlListView_DeleteItem($Tableau, $i)
                EndIf
            ElseIf $Lecture_Windows_2000 = 1 And $OS = " Windows 2000" Then ; Si la case "Windows 2000" est cochée
                $Verification_Windows2000 = 1
                If StringInStr($RubriqueTableau_ID[3], $ConversionValeurArray) Then
                    $Verification_Windows2000 += 1
                EndIf
            EndIf
            If $Lecture_Windows_XP = 4 Then ; Si la case "Windows XP" est décochée
                If StringInStr($RubriqueTableau_OS[3], "Windows XP") Then
                    _GUICtrlListView_DeleteItem($Tableau, $i)
                EndIf
            ElseIf $Lecture_Windows_XP = 1 And $OS = " Windows XP" Then ; Si la case "Windows XP" est cochée
                $Verification_WindowsXP = 1
                If StringInStr($RubriqueTableau_ID[3], $ConversionValeurArray) Then
                    $Verification_WindowsXP += 1
                EndIf
            EndIf
            If $Lecture_Windows_2003 = 4 Then ; Si la case "Windows 2003" est décochée
                If StringInStr($RubriqueTableau_OS[3], "Windows 2003") Then
                    _GUICtrlListView_DeleteItem($Tableau, $i)
                EndIf
            ElseIf $Lecture_Windows_2003 = 1 Then
            EndIf
            If $Lecture_Windows_Vista = 4 Then ; Si la case "Windows Vista" est décochée
                If StringInStr($RubriqueTableau_OS[3], "Windows vista") Then
                    _GUICtrlListView_DeleteItem($Tableau, $i)
                EndIf
            EndIf
            If $Lecture_Windows_7 = 4 Then ; Si la case "Windows 7" est décochée
                If StringInStr($RubriqueTableau_OS[3], "Windows 7") Then
                    _GUICtrlListView_DeleteItem($Tableau, $i)
                EndIf
            EndIf
        Next
        ConsoleWrite("Verif 2000 : "&$Verification_Windows2000&@CRLF&"Verif XP : "&$Verification_WindowsXP&@CRLF)
        If $Verification_Windows2000 = 1 Then
            Execute($Elements)
        ElseIf $Verification_WindowsXP = 1 Then
            Execute($Elements)
        EndIf
    Next
EndFunc

[EDIT] Regarding the filtering, take a look at John Bailey's script:

#cs -------------------------------------------------

    Author:         John Bailey
    Modifier:       name
    Date Modified:  today's date
    ScriptFunction: description of this script's function
    AutoIt Ver:     version

    Script Version: 1.0.0 (base code).(improved/added features).(script errors corrected)

    Script Update History:
            1.1.0 - AdvFilter updated to allow for multiple filtering on single column


    To-Do List (not in importance order):
    ->  1. Contextmenu for the search input control using the SearchType options.

    -> = working on

#ce -------------------------------------------------


#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>
#include <StaticConstants.au3>
#include <GuiListView.au3>
#include <GuiComboBox.au3>
#include <File.au3>
#include <Array.au3>
#include <Date.au3>
#include <GuiEdit.au3>

;#include <ControlConstants.au3>

Opt ("GUIOnEventMode", 1)
DllCall("uxtheme.dll", "none", "SetThemeAppProperties", "int", 1)


;==== Row Entries
; Delim.
Global $SettingsIR_delimiter = '†'
; File
Global $dbRowEntriesFile = @ScriptDir&'\LV Filter - onchange expand.txt'
; Array
Global $dbRowEntriesArray
;Array 2D
Global $dbRowEntriesArray2D
;Array 2D Column Count
Global $dbRowEntriesArray2DCount
;====

Global $checkedSymbol = chr(149)
Global $unCheckedSymbol = chr(32)

Local $LVHeaders = 'First Name|Last Name|Number|Access'

$AppWin = GUICreate("Search Example", 1066, 623, -1, -1)
;GUISetBkColor(0x716F64)
$Input = GUICtrlCreateInput("", 31, 39, 240, 22)
GUICtrlSetFont(-1, 9, 800, 0, "Rockwell")
$Label1 = GUICtrlCreateLabel("Search", 31, 20, 36, 17)
GUICtrlSetColor(-1, 0xC0C0C0)
$LV_Main = GUICtrlCreateListView($LVHeaders, 31, 65, 510, 495)
GUICtrlSendMsg($LV_Main, 0x101E, 0, 120)
GUICtrlSendMsg($LV_Main, 0x101E, 1, 178)
GUICtrlSendMsg($LV_Main, 0x101E, 2, 40)
GUICtrlSendMsg($LV_Main, 0x101E, 3, 70)
;GUICtrlSetBkColor($LV_Main, 0xD4D0C8)

Global $TotalColumns = _GUICtrlListView_GetColumnCount($LV_Main)
$dbRowEntriesArray2D =  _setupRowEntries()

$Label2 = GUICtrlCreateLabel("Column To Search", 278, 19, 126, 17)
GUICtrlSetColor($Label2, 0xC0C0C0)
$ColumnToSearchCB = GUICtrlCreateCombo("All", 277, 39, 128, 25)
GUICtrlSetData($ColumnToSearchCB,$LVHeaders)

$SearchTypeCB = GUICtrlCreateCombo("Contains", 412, 39, 128, 25)
GUICtrlSetData($SearchTypeCB, "Does Not Contain|Begins With|Does Not Begin With|Equals|Not Equal|Greater Than|Greater Than or Equal|Less Than|Less Than or Equal|Is Empty|Not Empty|Checked|Not Checked")
$Label3 = GUICtrlCreateLabel("Search Type", 413, 18, 98, 17)
GUICtrlSetColor($Label3, 0xC0C0C0)

$Group1 = GUICtrlCreateGroup("", 563, 81, 457, 370)
$Label4 = GUICtrlCreateLabel("Advanced Filter Section", 639, 101, 286, 17, $SS_CENTER)
GUICtrlSetFont(-1, 8, 800, 0, "MS Sans Serif")

$Label7 = GUICtrlCreateLabel("Search", 736, 136, 36, 17)
GUICtrlSetColor(-1, 0xC0C0C0)
$Input1 = GUICtrlCreateInput("", 735, 158, 121, 21)
$Input2 = GUICtrlCreateInput("", 735, 190, 121, 21)
$Input3 = GUICtrlCreateInput("", 735, 224, 121, 21)

$Label5 = GUICtrlCreateLabel("Column To Search", 591, 136, 126, 17)
GUICtrlSetColor(-1, 0xC0C0C0)
$Combo6 = GUICtrlCreateCombo("First Name", 590, 158, 136, 25)
GUICtrlSetData(-1, $LVHeaders)
$Combo7 = GUICtrlCreateCombo("Last Name", 591, 190, 136, 25)
GUICtrlSetData(-1, $LVHeaders)
$Combo8 = GUICtrlCreateCombo("Number", 591, 224, 136, 25)
GUICtrlSetData(-1, $LVHeaders)
$Combo9 = GUICtrlCreateCombo("Access", 590, 255, 136, 25)

$Label6 = GUICtrlCreateLabel("Search Type", 864, 136, 98, 17)
GUICtrlSetColor(-1, 0xC0C0C0)
$Combo2 = GUICtrlCreateCombo("Contains", 863, 158, 128, 25)
GUICtrlSetData(-1, "Does Not Contain|Begins With|Does Not Begin With|Equals|Not Equal|Greater Than|Greater Than or Equal|Less Than|Less Than or Equal|Is Empty|Not Empty|Checked|Not Checked")
$Combo3 = GUICtrlCreateCombo("Contains", 863, 191, 128, 25)
GUICtrlSetData(-1, "Does Not Contain|Begins With|Does Not Begin With|Equals|Not Equal|Greater Than|Greater Than or Equal|Less Than|Less Than or Equal|Is Empty|Not Empty|Checked|Not Checked")
$Combo4 = GUICtrlCreateCombo("Contains", 863, 224, 128, 25)
GUICtrlSetData(-1, "Does Not Contain|Begins With|Does Not Begin With|Equals|Not Equal|Greater Than|Greater Than or Equal|Less Than|Less Than or Equal|Is Empty|Not Empty|Checked|Not Checked")
$Combo5 = GUICtrlCreateCombo("", 863, 255, 128, 25)
GUICtrlSetData(-1, "Checked|Not Checked")






$StatusBar = GUICtrlCreateLabel("", 0, 604, 1066, 17, $SS_SUNKEN)

GUIRegisterMsg($WM_COMMAND, "MY_WM_COMMAND")

GUISetOnEvent($GUI_EVENT_CLOSE, "_GUIEvents")
GUISetOnEvent($GUI_EVENT_MINIMIZE, "_GUIEvents")
GUISetOnEvent($GUI_EVENT_RESTORE, "_GUIEvents")

GUICtrlSetOnEvent($ColumnToSearchCB, "ButtonPressed")
GUICtrlSetOnEvent($Combo2, "ButtonPressed")
GUICtrlSetOnEvent($Combo3, "ButtonPressed")
GUICtrlSetOnEvent($Combo4, "ButtonPressed")
GUICtrlSetOnEvent($Combo5, "ButtonPressed")
GUICtrlSetOnEvent($SearchTypeCB, "ButtonPressed")


GUISetState(@SW_SHOW)

_loadRowEntries($LV_Main)

While 1
   Sleep(25)
WEnd


;===============================================================================
;
; Function Name:    _()
; Description:
; Parameter(s):
;                   $               -  string   - Optional:
;                                                           0 = (Default) 1
;                                                           1 = 1
;
;
; Requirement(s):
; Return Value(s):  On Success  - Returns 1
;                   On Failure  - Returns 0 and sets @ERROR
;                   @ERROR      - 0 =
;                               - 1 =
;                               - 2 =
;                               - 3 =
;                   @Extended   -
; CallTip:
; Author(s):        John Bailey
;
;===============================================================================
Func _FilterLVItems($fil_SearchType='Contains',$fil_columntoSearch=0)
    Local $LVtofilter = $LV_Main
    Local $fil_searchInput = $Input
    Local $fil_Array = $dbRowEntriesArray
    Local $fil_Array2D = $dbRowEntriesArray2D
    Local $fil_Array2DColumns = $dbRowEntriesArray2DCount
    Local $fil_SearchTypeCB = $SearchTypeCB
    Local $fil_checkedSymbol = $checkedSymbol

    Local $fil_SearchText = GUICtrlRead($fil_searchInput)
    Local $SearchCharLen = StringLen($fil_SearchText)
    _GUICtrlListView_DeleteAllItems($LVtofilter)
    If $fil_SearchText <> '' OR $fil_SearchType = 'Is Empty' OR $fil_SearchType = 'Not Empty' OR $fil_SearchType = 'Checked' OR $fil_SearchType = 'Not Checked' Then

        If $fil_SearchType = 'Contains' Then
            If $fil_columntoSearch = 0 Then
                For $a = 1 to UBound($fil_Array)-1
                    If StringInStr($fil_Array[$a],$fil_SearchText) Then
                        _FilterLV_AddtoLV($LVtofilter,$fil_Array[$a],$SettingsIR_delimiter)
                    EndIf
                Next
            Else
                For $a = 1 to UBound($fil_Array)-1
                    If StringInStr($fil_Array2D[$a][$fil_columntoSearch-1],$fil_SearchText) Then
                        _FilterLV_AddtoLV($LVtofilter,$fil_Array[$a],$SettingsIR_delimiter)
                    EndIf
                Next
            EndIf
        ElseIf  $fil_SearchType = 'Does Not Contain' Then
            If $fil_columntoSearch = 0 Then
                For $a = 1 to UBound($fil_Array)-1
                    If NOT StringInStr($fil_Array[$a],$fil_SearchText) Then
                        _FilterLV_AddtoLV($LVtofilter,$fil_Array[$a],$SettingsIR_delimiter)
                    EndIf
                Next
            Else
                For $a = 1 to UBound($fil_Array)-1
                    If NOT StringInStr($fil_Array2D[$a][$fil_columntoSearch-1],$fil_SearchText) Then
                        _FilterLV_AddtoLV($LVtofilter,$fil_Array[$a],$SettingsIR_delimiter)
                    EndIf
                Next
            EndIf
        ElseIf $fil_SearchType = 'Begins With' Then
            If $fil_columntoSearch = 0 Then
                For $a = 1 to UBound($fil_Array)-1
                    Local $String = $fil_Array[$a]
                    Local $stringlen = StringLen($String)
                    Local $result = StringTrimRight($String, $stringlen-$SearchCharLen)
                    If $result = $fil_SearchText Then
                        _FilterLV_AddtoLV($LVtofilter,$fil_Array[$a],$SettingsIR_delimiter)
                    EndIf
                Next
            Else
                For $a = 1 to UBound($fil_Array)-1
                    Local $String = $fil_Array2D[$a][$fil_columntoSearch-1]
                    Local $stringlen = StringLen($String)
                    Local $result = StringTrimRight($String, $stringlen-$SearchCharLen)

                    If $result = $fil_SearchText Then
                        _FilterLV_AddtoLV($LVtofilter,$fil_Array[$a],$SettingsIR_delimiter)
                    EndIf
                Next
            EndIf
        ElseIf $fil_SearchType = 'Does Not Begin With' Then
            If $fil_columntoSearch = 0 Then
                For $a = 1 to UBound($fil_Array)-1
                    Local $String = $fil_Array[$a]
                    Local $stringlen = StringLen($String)
                    Local $result = StringTrimRight($String, $stringlen-$SearchCharLen)
                    If $result <> $fil_SearchText Then
                        _FilterLV_AddtoLV($LVtofilter,$fil_Array[$a],$SettingsIR_delimiter)
                    EndIf
                Next
            Else
                For $a = 1 to UBound($fil_Array)-1
                    Local $String = $fil_Array2D[$a][$fil_columntoSearch-1]
                    Local $stringlen = StringLen($String)
                    Local $result = StringTrimRight($String, $stringlen-$SearchCharLen)

                    If $result <> $fil_SearchText Then
                        _FilterLV_AddtoLV($LVtofilter,$fil_Array[$a],$SettingsIR_delimiter)
                    EndIf
                Next
            EndIf
        ElseIf  $fil_SearchType = 'Equals' Then
            Local $fil_SearchText = GUICtrlRead($fil_searchInput)
            If $fil_columntoSearch = 0 Then
                For $a = 1 to UBound($fil_Array)-1
                    If $fil_SearchText = $fil_Array[$a] Then
                        _FilterLV_AddtoLV($LVtofilter,$fil_Array[$a],$SettingsIR_delimiter)
                    EndIf
                Next
            Else
                For $a = 1 to UBound($fil_Array)-1
                    If $fil_SearchText = $fil_Array2D[$a][$fil_columntoSearch-1] Then
                        _FilterLV_AddtoLV($LVtofilter,$fil_Array[$a],$SettingsIR_delimiter)
                    EndIf
                Next
            EndIf
        ElseIf  $fil_SearchType = 'Not Equal' Then
            Local $fil_SearchText = GUICtrlRead($fil_searchInput)
            If $fil_columntoSearch = 0 Then
                For $a = 1 to UBound($fil_Array)-1
                    If $fil_SearchText <> $fil_Array[$a] Then
                        _FilterLV_AddtoLV($LVtofilter,$fil_Array[$a],$SettingsIR_delimiter)
                    EndIf
                Next
            Else
                For $a = 1 to UBound($fil_Array)-1
                    If $fil_SearchText <> $fil_Array2D[$a][$fil_columntoSearch-1] Then
                        _FilterLV_AddtoLV($LVtofilter,$fil_Array[$a],$SettingsIR_delimiter)
                    EndIf
                Next
            EndIf
        ElseIf  $fil_SearchType = 'Greater Than' Then
            Local $fil_SearchText = Number(GUICtrlRead($fil_searchInput))
            If $fil_columntoSearch = 0 Then
                For $a = 1 to UBound($fil_Array)-1
                    If $fil_SearchText > $fil_Array[$a] Then
                        _FilterLV_AddtoLV($LVtofilter,$fil_Array[$a],$SettingsIR_delimiter)
                    EndIf
                Next
            Else
                For $a = 1 to UBound($fil_Array)-1
                    If $fil_SearchText > $fil_Array2D[$a][$fil_columntoSearch-1] Then
                        _FilterLV_AddtoLV($LVtofilter,$fil_Array[$a],$SettingsIR_delimiter)
                    EndIf
                Next
            EndIf
        ElseIf  $fil_SearchType = 'Greater Than or Equal' Then
            Local $fil_SearchText = Number(GUICtrlRead($fil_searchInput))
            If $fil_columntoSearch = 0 Then
                For $a = 1 to UBound($fil_Array)-1
                    If $fil_SearchText >= $fil_Array[$a] Then
                        _FilterLV_AddtoLV($LVtofilter,$fil_Array[$a],$SettingsIR_delimiter)
                    EndIf
                Next
            Else
                For $a = 1 to UBound($fil_Array)-1
                    If $fil_SearchText >= $fil_Array2D[$a][$fil_columntoSearch-1] Then
                        _FilterLV_AddtoLV($LVtofilter,$fil_Array[$a],$SettingsIR_delimiter)
                    EndIf
                Next
            EndIf
        ElseIf  $fil_SearchType = 'Less Than' Then
            Local $fil_SearchText = Number(GUICtrlRead($fil_searchInput))
            If $fil_columntoSearch = 0 Then
                For $a = 1 to UBound($fil_Array)-1
                    If $fil_SearchText < $fil_Array[$a] Then
                        _FilterLV_AddtoLV($LVtofilter,$fil_Array[$a],$SettingsIR_delimiter)
                    EndIf
                Next
            Else
                For $a = 1 to UBound($fil_Array)-1
                    If $fil_SearchText < $fil_Array2D[$a][$fil_columntoSearch-1] Then
                        _FilterLV_AddtoLV($LVtofilter,$fil_Array[$a],$SettingsIR_delimiter)
                    EndIf
                Next
            EndIf
        ElseIf  $fil_SearchType = 'Less Than or Equal' Then
            Local $fil_SearchText = Number(GUICtrlRead($fil_searchInput))
            If $fil_columntoSearch = 0 Then
                For $a = 1 to UBound($fil_Array)-1
                    If $fil_SearchText <= $fil_Array[$a] Then
                        _FilterLV_AddtoLV($LVtofilter,$fil_Array[$a],$SettingsIR_delimiter)
                    EndIf
                Next
            Else
                For $a = 1 to UBound($fil_Array)-1
                    If $fil_SearchText <= $fil_Array2D[$a][$fil_columntoSearch-1] Then
                        _FilterLV_AddtoLV($LVtofilter,$fil_Array[$a],$SettingsIR_delimiter)
                    EndIf
                Next
            EndIf


        ElseIf  $fil_SearchType = 'Is Empty' Then

            If $fil_columntoSearch = 0 Then
                For $a = 1 to UBound($fil_Array)-1
                    Local $fil_subCounter=0
                    Local $fil_add = 0
                    For $fil_subCounter=1 to $fil_Array2DColumns
                        Switch Number($fil_SearchText)
                            Case 1,2,3,4,5,6,7,8
                                If StringStripWS($fil_Array2D[$a][$fil_subCounter-1],Number($fil_SearchText)) = '' Then
                                    $fil_add = 1
                                EndIf
                            Case Else
                                If $fil_Array2D[$a][$fil_subCounter-1] = '' Then
                                    $fil_add = 1
                                EndIf
                        EndSwitch
                    Next
                    If $fil_add <> 0 Then _FilterLV_AddtoLV($LVtofilter,$fil_Array[$a],$SettingsIR_delimiter)
                Next
            Else
                For $a = 1 to UBound($fil_Array)-1
                    Switch Number($fil_SearchText)
                        Case 1,2,3,4,5,6,7,8
                            If StringStripWS($fil_Array2D[$a][$fil_columntoSearch-1],Number($fil_SearchText)) = '' Then
                                _FilterLV_AddtoLV($LVtofilter,$fil_Array[$a],$SettingsIR_delimiter)
                            EndIf
                        Case Else
                            If $fil_Array2D[$a][$fil_columntoSearch-1] = '' Then
                                _FilterLV_AddtoLV($LVtofilter,$fil_Array[$a],$SettingsIR_delimiter)
                            EndIf
                    EndSwitch
                Next
            EndIf
        ElseIf  $fil_SearchType = 'Not Empty' Then
            If $fil_columntoSearch = 0 Then
                For $a = 1 to UBound($fil_Array)-1
                    Local $fil_subCounter=0
                    Local $fil_add = 0
                    For $fil_subCounter=1 to $fil_Array2DColumns
                        Switch Number($fil_SearchText)
                            Case 1,2,3,4,5,6,7,8
                                If StringStripWS($fil_Array2D[$a][$fil_subCounter-1],Number($fil_SearchText)) <> '' Then
                                    $fil_add = 1
                                EndIf
                            Case Else
                                If $fil_Array2D[$a][$fil_subCounter-1] <> '' Then
                                    $fil_add = 1
                                EndIf
                        EndSwitch
                    Next
                    If $fil_add <> 0 Then _FilterLV_AddtoLV($LVtofilter,$fil_Array[$a],$SettingsIR_delimiter)
                Next
            Else
                For $a = 1 to UBound($fil_Array)-1
                    Switch Number($fil_SearchText)
                        Case 1,2,3,4,5,6,7,8
                            If StringStripWS($fil_Array2D[$a][$fil_columntoSearch-1],Number($fil_SearchText)) <> '' Then
                                _FilterLV_AddtoLV($LVtofilter,$fil_Array[$a],$SettingsIR_delimiter)
                            EndIf
                        Case Else
                            If $fil_Array2D[$a][$fil_columntoSearch-1] <> '' Then
                                _FilterLV_AddtoLV($LVtofilter,$fil_Array[$a],$SettingsIR_delimiter)
                            EndIf
                    EndSwitch
                Next
            EndIf
        ElseIf  $fil_SearchType = 'Checked' Then
            If $fil_columntoSearch = 0 Then
                For $a = 1 to UBound($fil_Array)-1
                    If StringInStr($fil_Array[$a],$fil_checkedSymbol) Then
                        _FilterLV_AddtoLV($LVtofilter,$fil_Array[$a],$SettingsIR_delimiter)
                    EndIf
                Next
            Else
                For $a = 1 to UBound($fil_Array)-1
                    If StringInStr($fil_Array2D[$a][$fil_columntoSearch-1],$fil_checkedSymbol) Then
                        _FilterLV_AddtoLV($LVtofilter,$fil_Array[$a],$SettingsIR_delimiter)
                    EndIf
                Next
            EndIf
        ElseIf  $fil_SearchType = 'Not Checked' Then
            If $fil_columntoSearch = 0 Then
                For $a = 1 to UBound($fil_Array)-1
                    If NOT StringInStr($fil_Array[$a],$fil_checkedSymbol) Then
                        _FilterLV_AddtoLV($LVtofilter,$fil_Array[$a],$SettingsIR_delimiter)
                    EndIf
                Next
            Else
                For $a = 1 to UBound($fil_Array)-1
                    If NOT StringInStr($fil_Array2D[$a][$fil_columntoSearch-1],$fil_checkedSymbol) Then
                        _FilterLV_AddtoLV($LVtofilter,$fil_Array[$a],$SettingsIR_delimiter)
                    EndIf
                Next
            EndIf
        Else ; Search Type is not setup
            MsgBox(0,'Search Type Error',$fil_SearchType&' is not set in the code')
            For $a = 1 to UBound($fil_Array)-1
                _FilterLV_AddtoLV($LVtofilter,$fil_Array,$SettingsIR_delimiter)
            Next
        EndIf

    ; Full List - No Filter - Blank Input Area
    Else
        For $a = 1 to UBound($fil_Array)-1
            _FilterLV_AddtoLV($LVtofilter,$fil_Array[$a],$SettingsIR_delimiter)
        Next
    EndIf
EndFunc


;===============================================================================
;
; Function Name:    _FilterAdv()
; Description:
; Parameter(s):
;                   $               -  string   - Optional:
;                                                           0 = (Default) 1
;                                                           1 = 1
;
;
; Requirement(s):
; Return Value(s):  On Success  - Returns 1
;                   On Failure  - Returns 0 and sets @ERROR
;                   @ERROR      - 0 =
;                               - 1 =
;                               - 2 =
;                               - 3 =
;                   @Extended   -
; CallTip:
; Author(s):        John Bailey
;
;===============================================================================
Func _FilterAdv($faaa_string)
    Local $fil_LVtofilter = $LV_Main
    Local $fil_Array = $dbRowEntriesArray
    Local $fil_Array2D = $dbRowEntriesArray2D
    Local $fil_checkedSymbol = $checkedSymbol

    Local $sSplit = StringSplit($faaa_string,$SettingsIR_delimiter)
    _GUICtrlListView_DeleteAllItems($fil_LVtofilter)
    For $a = 1 to UBound($fil_Array)-1
        Local $faaa_yes = 1
        Local $count
        For $count =  1 to $sSplit[0]
            Local $cSplit = StringSplit($sSplit[$count],'‡')
            Local $LVHeadersArray=StringSplit($LVHeaders,'|',1)
            Local $fil_ColumnToSearch= _ArraySearch($LVHeadersArray,$cSplit[3],1)
            Local $counter = $fil_ColumnToSearch
            If $cSplit[1] <> '' Then
                If $cSplit[2] = 'Contains' Then
                    If NOT StringInStr($fil_Array2D[$a][$counter-1],$cSplit[1]) Then
                        $faaa_yes = 0
                    EndIf
                ElseIf $cSplit[2] = 'Does Not Contain' Then
                    If StringInStr($fil_Array2D[$a][$counter-1],$cSplit[1]) Then
                        $faaa_yes = 0
                    EndIf
                ElseIf $cSplit[2] = 'Begins With' Then
                    Local $SearchCharLen = StringLen($cSplit[1])
                    Local $String = $fil_Array2D[$a][$counter-1]
                    Local $stringlen = StringLen($String)
                    Local $result = StringTrimRight($String, $stringlen-$SearchCharLen)

                    If $result <> $cSplit[1] Then
                        $faaa_yes = 0
                    EndIf
                ElseIf $cSplit[2] = 'Does Not Begin With' Then
                    Local $SearchCharLen = StringLen($cSplit[1])
                    Local $String = $fil_Array2D[$a][$counter-1]
                    Local $stringlen = StringLen($String)
                    Local $result = StringTrimRight($String, $stringlen-$SearchCharLen)

                    If $result = $cSplit[1] Then
                        $faaa_yes = 0
                    EndIf
                ElseIf $cSplit[2] = 'Equals' Then
                    If $cSplit[1] <> $fil_Array2D[$a][$counter-1] Then
                        $faaa_yes = 0
                    EndIf
                ElseIf $cSplit[2] = 'Not Equal' Then
                    If $cSplit[1] = $fil_Array2D[$a][$counter-1] Then
                        $faaa_yes = 0
                    EndIf
                ElseIf $cSplit[2] = 'Greater Than' Then
                    If Number($cSplit[1]) >= Number($fil_Array2D[$a][$counter-1]) Then
                        $faaa_yes = 0
                    EndIf
                ElseIf $cSplit[2] = 'Greater Than or Equal' Then
                    If Number($cSplit[1]) > Number($fil_Array2D[$a][$counter-1]) Then
                        $faaa_yes = 0
                    EndIf
                ElseIf $cSplit[2] = 'Less Than' Then
                    If Number($cSplit[1]) <= Number($fil_Array2D[$a][$counter-1]) Then
                        $faaa_yes = 0
                    EndIf
                ElseIf $cSplit[2] = 'Less Than or Equal' Then
                    If Number($cSplit[1]) < Number($fil_Array2D[$a][$counter-1]) Then
                        $faaa_yes = 0
                    EndIf
                ElseIf $cSplit[2] = 'Is Empty' Then
                    Switch Number($cSplit[1])
                        Case 1,2,3,4,5,6,7,8
                            If StringStripWS($fil_Array2D[$a][$counter-1],Number($cSplit[1])) <> '' Then
                                $faaa_yes = 0
                            EndIf
                        Case Else
                            If $fil_Array2D[$a][$counter-1] <> '' Then
                                $faaa_yes = 0
                            EndIf
                    EndSwitch
                ElseIf $cSplit[2] = 'Not Empty' Then
                    Switch Number($cSplit[1])
                        Case 1,2,3,4,5,6,7,8
                            If StringStripWS($fil_Array2D[$a][$counter-1],Number($cSplit[1])) = '' Then
                                $faaa_yes = 0
                            EndIf
                        Case Else
                            If $fil_Array2D[$a][$counter-1] = '' Then
                                $faaa_yes = 0
                            EndIf
                    EndSwitch
                ElseIf $cSplit[2] = 'Checked' Then
                    If NOT StringInStr($fil_Array2D[$a][$counter-1],$fil_checkedSymbol) Then
                        $faaa_yes = 0
                    EndIf
                ElseIf $cSplit[2] = 'Not Checked' Then
                    If StringInStr($fil_Array2D[$a][$counter-1],$fil_checkedSymbol) Then
                        $faaa_yes = 0
                    EndIf
                ElseIf $cSplit[2] = '' Then
                    ;
                Else
                    MsgBox(0,'Search Type Error',$cSplit[2]&' is not set in the code')
                EndIf
            EndIf
        Next

        If $faaa_yes = 1 Then
            _FilterLV_AddtoLV($fil_LVtofilter,$fil_Array[$a],$SettingsIR_delimiter)
        EndIf
    Next
EndFunc



;===============================================================================
;
; Function Name:    _()
; Description:
; Parameter(s):
;                   $               -  string   - Optional:
;                                                           0 = (Default) 1
;                                                           1 = 1
;
;
; Requirement(s):
; Return Value(s):  On Success  - Returns 1
;                   On Failure  - Returns 0 and sets @ERROR
;                   @ERROR      - 0 =
;                               - 1 =
;                               - 2 =
;                               - 3 =
;                   @Extended   -
; CallTip:
; Author(s):        John Bailey
;
;===============================================================================
Func _FilterLV_AddtoLV(ByRef $fL_LVtofilter, ByRef $fL_LinetoAdd,$fL_delimiter='†')
    Local $itemLineArray = StringSplit($fL_LinetoAdd,$fL_delimiter,1)
    Local $itemLine = ''
    Local $b
    For $b = 1 to $itemLineArray[0]
        If $b = $itemLineArray[0] Then
            $itemLine &= $itemLineArray[$b]
        Else
            $itemLine &= $itemLineArray[$b]&'|'
        EndIf
    Next
    GUICtrlCreateListViewItem($itemLine, $fL_LVtofilter)
EndFunc


Func _setupRowEntries() ;set it up after the columns are setup

    _FileReadToArray($dbRowEntriesFile,$dbRowEntriesArray)
    If @error Then
        Msgbox(0,'File not read to Array',$dbRowEntriesFile&@LF&' to $dbRowEntriesArray')
    EndIf
    Local $headerSplit = StringSplit($LVHeaders,'|',1)
    $dbRowEntriesArray2DCount = $headerSplit[0]
    Local $sre_dbRowEntriesArray2D[UBound($dbRowEntriesArray)][$dbRowEntriesArray2DCount]

    Local $x = 1
    For $x = 1 to UBound($dbRowEntriesArray)-1
        Local $readSplitArray = StringSplit($dbRowEntriesArray[$x],$SettingsIR_delimiter,1)
        Local $xx = 0
        For $xx = 1 to $readSplitArray[0]
            $sre_dbRowEntriesArray2D[$x][$xx-1] = $readSplitArray[$xx]
        Next
    Next

    Return $sre_dbRowEntriesArray2D
EndFunc

Func _loadRowEntries(ByRef $lvID)
    For $x = 1 to Ubound($dbRowEntriesArray2D)-1
        Local $itemLine = ''
        For $xx = 1 to $dbRowEntriesArray2DCount
            If $xx = $dbRowEntriesArray2DCount Then
                $itemLine &= $dbRowEntriesArray2D[$x][$xx-1]
                ;If $dbRowEntriesArray2D[$x][$xx-1] = 'true' Then
                ;   $itemLine &= $checkedSymbol
                ;ElseIf $dbRowEntriesArray2D[$x][$xx-1] = 'false' Then
                ;   $itemLine &= $checkedSymbol
                ;EndIf
            Else
                $itemLine &= $dbRowEntriesArray2D[$x][$xx-1]&'|'
            EndIf
        Next
        GUICtrlCreateListViewItem($itemLine, $lvID)
    Next
EndFunc


Func MY_WM_COMMAND($hWnd, $msg, $wParam, $lParam)
    ; gaFrost for monitoring inputfield change
    Local $nNotifyCode = BitShift($wParam, 16)
    Local $nID = BitAND($wParam, 0xFFFF)
    Local $hCtrl = $lParam

    Switch $nID
        Case $Input
            Switch $nNotifyCode
                Case $EN_CHANGE
                    _FilterLVItems(GUICtrlRead($SearchTypeCB),_GUICtrlComboBox_GetCurSel ( $ColumnToSearchCB ))
            EndSwitch
        Case $Input1, $Input2, $Input3
            Local $df = GUICtrlRead($Input1)&'‡'&GUICtrlRead($Combo2)&'‡'&GUICtrlRead($Combo6)&'†'&GUICtrlRead($Input2)&'‡'&GUICtrlRead($Combo3)&'‡'&GUICtrlRead($Combo7)&'†'&GUICtrlRead($Input3)&'‡'&GUICtrlRead($Combo4)&'‡'&GUICtrlRead($Combo8)&'†'&'blank'&'‡'&GUICtrlRead($Combo5)&'‡'&GUICtrlRead($Combo9)
            _FilterAdv($df)
    EndSwitch
    ; Proceed the default Autoit3 internal message commands.
    ; You also can complete let the line out.
    ; !!! But only 'Return' (without any value) will not proceed
    ; the default Autoit3-message in the future !!!
    Return $GUI_RUNDEFMSG
EndFunc   ;==>MY_WM_COMMAND

;==>WM_Notify_Events

Func ButtonPressed()
    Switch @GUI_CTRLID
        case $ColumnToSearchCB
            Local $CBcurrentIndex = _GUICtrlComboBox_GetCurSel ( $ColumnToSearchCB )
            _FilterLVItems(GUICtrlRead($SearchTypeCB),$CBcurrentIndex)

        Case $SearchTypeCB
            Local $CBcurrentIndex = _GUICtrlComboBox_GetCurSel ( $ColumnToSearchCB )
            _FilterLVItems(GUICtrlRead($SearchTypeCB),$CBcurrentIndex)

        Case $Combo2,$Combo3,$Combo4,$Combo5
            Local $df = GUICtrlRead($Input1)&'‡'&GUICtrlRead($Combo2)&'‡'&GUICtrlRead($Combo6)&'†'&GUICtrlRead($Input2)&'‡'&GUICtrlRead($Combo3)&'‡'&GUICtrlRead($Combo7)&'†'&GUICtrlRead($Input3)&'‡'&GUICtrlRead($Combo4)&'‡'&GUICtrlRead($Combo8)&'†'&'blank'&'‡'&GUICtrlRead($Combo5)&'‡'&GUICtrlRead($Combo9)
            _FilterAdv($df)

    EndSwitch
EndFunc

Func _GUIEvents()
    Select
        Case @GUI_CTRLID = $GUI_EVENT_CLOSE
            Exit
        Case @GUI_CTRLID = $GUI_EVENT_MINIMIZE

        Case @GUI_CTRLID = $GUI_EVENT_RESTORE

    EndSelect

EndFunc
Edited by taietel
Link to comment
Share on other sites

ATR, I didn't quite understood what you mean, but I've made some changes in your script

- in the second combobox the values were added (instead replacing) based on the selection from the first one

- changed the If...ElseIf... with Switch... Case (it's faster)

#include <GUIConstantsEx.au3>
#include <ListViewConstants.au3>
#Include <GuiListView.au3>
#Include <String.au3>

;Systèmes d'exploitation :
$OS_1 = " Windows XP"
$OS_2 = " Windows 2000"
$OS_3 = " Windows 2003"
$OS_4 = " Windows vista"
$OS_5 = " Windows 7"

; Rubriques :
$Rubrique_1 = " L'éditeur d'objets de stratégie de groupe"
$Rubrique_2 = " Gesion des utilisateurs"
$Rubrique_3 = " Le bureau Windows"
$Rubrique_4 = " L'explorateur Windows"
$Rubrique_5 = " Le système"
$Rubrique_6 = " Les applications et composants Windows"
$Rubrique_7 = " Perrsonnaliser et sécuriser Internet Explorer"
$Rubrique_8 = " Restrictions dans Internet Explorer"
$Rubrique_9 = " Périphériques et réseau"

; Sous-rubriques :
; Sous-rubrique " L'éditeur d'objets de stratégie de groupe"
$SousRubrique_1 = " Les fichiers de console"
$SousRubrique_2 = " L'éditeur d'objets de stratégie de groupe"
$SousRubrique_3 = " Les stratégies de groupe"
$SousRubrique_4 = " Les fichiers de modèle"
; Sous-rubrique " Gesion des utilisateurs"
$SousRubrique_5 = " Le contrôle de compte d'utilisateur"
$SousRubrique_6 = " Paramétrer le contrôle du compte d'utilisateur"
$SousRubrique_7 = " Le contrôle parental"
$SousRubrique_8 = " L'ouverture de session interactive"
$SousRubrique_9 = " Les options de sécurité et le registre Windows"
; Sous-rubrique " Le bureau Windows"
$SousRubrique_10 = " Le bureau Windows"
$SousRubrique_11 = " Le menu Démarrer"
$SousRubrique_12 = " La barre des tâches"
$SousRubrique_13 = " Les raccourcis"
$SousRubrique_14 = " Le panneau de configuration"
$SousRubrique_15 = " L'affichage"
$SousRubrique_16 = " Les écrans de veille"
$SousRubrique_17 = " Les options régionales et linguistiques"
; Sous-rubrique " L'explorateur Windows"
$SousRubrique_18 = " Personnaliser l'explorateur Windows"
$SousRubrique_19 = " Sécuriser l'explorateur Windows"
$SousRubrique_20 = " La corbeille Windows"
$SousRubrique_21 = " Les miniatures"
$SousRubrique_22 = " Les lecteurs"
$SousRubrique_23 = " Les menus contextuels sous Windows 7"
$SousRubrique_24 = " La fonctionnalité des versions précédentes"
$SousRubrique_25 = " La fonctionnalité de recherche"
$SousRubrique_26 = " Chiffrement des ficheirs et des dossiers"
$SousRubrique_27 = " Sauvegarde des données"
; Sous-rubrique " Le système"
$SousRubrique_28 = " Personnaliser votre système"
$SousRubrique_29 = " Gérer votre licence Windows"
$SousRubrique_30 = " Les fonctionnalités système"
$SousRubrique_31 = " Le gestionnaire de tâches"
$SousRubrique_32 = " Nettoyage de disque"
$SousRubrique_33 = " Les profils d'utilisateur"
$SousRubrique_34 = " La restauration système"
$SousRubrique_35 = " Windows update"
$SousRubrique_36 = " Windows Defender"
$SousRubrique_37 = " Les quotas de disque"
; Sous-rubrique " Les applications et composants Windows"
$SousRubrique_38 = " Définir une restriction logicielle"
$SousRubrique_39 = " Programmes et fonctionnalités"
$SousRubrique_40 = " Les programmes et fonctionnalités Windows 7"
$SousRubrique_41 = " Les outils systèmes"
$SousRubrique_42 = " Compatibilité des applications"
$SousRubrique_43 = " Windows Installer"
$SousRubrique_44 = " Les composants Windows"
$SousRubrique_45 = " Windows Media Player"
$SousRubrique_46 = " Windows Mail"
$SousRubrique_47 = " Gestion des pièces jointes"
$SousRubrique_48 = " Ne pas autoriser l'éxécutioon de Windows Media Center"
$SousRubrique_49 = " Désactiver les paramètres de présentation Windows"
$SousRubrique_50 = " Les capteurs d'emplacements"
; Sous-rubrique " Personnaliser et sécuriser Internet Explorer"
$SousRubrique_51 = " Personnaliser Internet Explorer"
$SousRubrique_52 = " Les zones de sécurité"
$SousRubrique_53 = " L'onglet sécurité"
$SousRubrique_54 = " Les fonctionnalités de sécurité"
$SousRubrique_55 = " Les accélérateurs web"
$SousRubrique_56 = " L'affichage de compatibilité"
$SousRubrique_57 = " Le filtre InPrivate"
; Sous-rubrique " Restrictions dans Internet Explorer"
$SousRubrique_58 = " Paramétrer les menus d'Internet Explorer"
$SousRubrique_59 = " Le panneau de configuration d'Internet Explorer"
$SousRubrique_60 = " Options avancées"
$SousRubrique_61 = " Les barres d'outils"
$SousRubrique_62 = " Paramètres Internet"
$SousRubrique_63 = " Paramètres de navigation"
$SousRubrique_64 = " Menus du navigateur"
$SousRubrique_65 = " Les flux RSS et les Web Slices"
; Sous-rubrique " Périphériques et réseau"
$SousRubrique_66 = " Les périphériques"
$SousRubrique_67 = " Gestion de l'alimentation"
$SousRubrique_68 = " Stratégies sur le réseau"
$SousRubrique_69 = " Le pare-feu de connexion Internet"
$SousRubrique_70 = " Windows Connect Now"
$SousRubrique_71 = " Le Projecteur réseau"

GUICreate("Automatisations", 520, 700)
GUISetState(@SW_SHOW)

GUICtrlCreateGroup("Filtres", 10, 10, 500, 120)
$Windows_2000 = GUICtrlCreateCheckbox("Windows 2000", 30, 30)
$Windows_XP = GUICtrlCreateCheckbox("Windows XP", 130, 30)
$Windows_2003 = GUICtrlCreateCheckbox("Windows 2003", 220, 30)
$Windows_Vista = GUICtrlCreateCheckbox("Windows Vista", 320, 30)
$Windows_7 = GUICtrlCreateCheckbox("Windows 7", 420, 30)
GUICtrlCreateLabel("Rubriques :", 30, 65)
$ListeRubriques = GUICtrlCreateCombo("", 95, 62.5, 250)
GUICtrlSetData($ListeRubriques, $Rubrique_1 & "|" & $Rubrique_2 & "|" & $Rubrique_3 & "|" & $Rubrique_4 & "|" & $Rubrique_5 & "|" & $Rubrique_6 & "|" & $Rubrique_7 & "|" & $Rubrique_8 & "|" & $Rubrique_9)
$ListeSousRubriques = GUICtrlCreateCombo("", 95, 95, 250)
GUICtrlSetState(-1, $GUI_DISABLE)
$Tableau = GUICtrlCreateListView("ID|Systèmes|Actions|Rubrique|Sous-rubrique", 10, 145, 500, 400, -1, BitOR($LVS_EX_CHECKBOXES, $LVS_EX_GRIDLINES))
_GUICtrlListView_SetColumnWidth($Tableau, 1, 120)
_GUICtrlListView_SetColumnWidth($Tableau, 2, 376)

Dim $Actions[9]
$Actions[0] = 'GUICtrlCreateListViewItem("1|"&$OS_1&"|évènement XP R1 SR3|"& $Rubrique_1 & "|" & $SousRubrique_3, $Tableau)'
$Actions[1] = 'GUICtrlCreateListViewItem("2|"&$OS_1&"|évènement XP R1 SR1|"& $Rubrique_1 & "|" & $SousRubrique_1, $Tableau)'
$Actions[2] = 'GUICtrlCreateListViewItem("03|"&$OS_2&"|évènement XP R2 SR8|"& $Rubrique_2 & "|" & $SousRubrique_8, $Tableau)'
$Actions[3] = 'GUICtrlCreateListViewItem("4|"&$OS_2&"|évènement XP R3 SR3|"& $Rubrique_3 & "|" & $SousRubrique_3, $Tableau)'
$Actions[4] = 'GUICtrlCreateListViewItem("54|"&$OS_1&"|évènement XP R1 SR2|"& $Rubrique_1 & "|" & $SousRubrique_2, $Tableau)'
$Actions[5] = 'GUICtrlCreateListViewItem("6|"&$OS_1&"|évènement XP R2 SR7|"& $Rubrique_2 & "|" & $SousRubrique_7, $Tableau)'
$Actions[6] = 'GUICtrlCreateListViewItem("789|"&$OS_2&"|évènement XP R2 SR6|"& $Rubrique_2 & "|" & $SousRubrique_6, $Tableau)'
$Actions[7] = 'GUICtrlCreateListViewItem("8|"&$OS_1&"|évènement XP R1 SR2|"& $Rubrique_1 & "|" & $SousRubrique_2, $Tableau)'
$Actions[8] = 'GUICtrlCreateListViewItem("9|"&$OS_1&"|évènement XP R1 SR2|"& $Rubrique_1 & "|" & $SousRubrique_2, $Tableau)'

For $Elements_depart In $Actions
    Execute($Elements_depart)
Next

;~ _GUICtrlListView_HideColumn($Tableau, 0)
_GUICtrlListView_HideColumn($Tableau, 3)
_GUICtrlListView_HideColumn($Tableau, 4)
GUICtrlSetState($Windows_2000, $GUI_CHECKED)
GUICtrlSetState($Windows_XP, $GUI_CHECKED)
GUICtrlSetState($Windows_2003, $GUI_CHECKED)
GUICtrlSetState($Windows_Vista, $GUI_CHECKED)
GUICtrlSetState($Windows_7, $GUI_CHECKED)

$Appliquer = GUICtrlCreateButton("Appliquer", 20, 560, 100)
$Quitter = GUICtrlCreateButton("Quitter", 140, 560, 100)

_GUICtrlListView_RegisterSortCallBack($Tableau)

Do
    $msg = GUIGetMsg()
    Select
        Case $msg = $Tableau
            _GUICtrlListView_SortItems($Tableau, GUICtrlGetState($Tableau))
        Case $msg = $Windows_2000
            $Question_coche = GUICtrlRead($Windows_2000)
            $Lecture_rubriques = GUICtrlRead($ListeRubriques)
            $Lecture_SousRubriques = GUICtrlRead($ListeSousRubriques)
            If $Lecture_rubriques <> "" Then
                If $Lecture_SousRubriques <> "" Then
                    Filtrage($OS_2, $Question_coche, $Lecture_rubriques, $Lecture_SousRubriques)
                    ConsoleWrite("filtrage 1"&@CRLF)
                EndIf
                Filtrage($OS_2, $Question_coche, $Lecture_rubriques)
                ConsoleWrite("filtrage 2"&@CRLF)
            Else
                Filtrage($OS_2, $Question_coche)
                ConsoleWrite("filtrage 3"&@CRLF)
            EndIf
        Case $msg = $Windows_2003
            $Question_coche = GUICtrlRead($Windows_2003)
            ConsoleWrite(GUICtrlGetState($Windows_2000)&@CRLF)
            $Lecture_rubriques = GUICtrlRead($ListeRubriques)
            $Lecture_SousRubriques = GUICtrlRead($ListeSousRubriques)
            If $Lecture_rubriques <> "" Then
                If $Lecture_SousRubriques <> "" Then
                    Filtrage($OS_3, $Question_coche, $Lecture_rubriques, $Lecture_SousRubriques)
                    ConsoleWrite("filtrage 4"&@CRLF)
                EndIf
                Filtrage($OS_3, $Question_coche, $Lecture_rubriques)
                ConsoleWrite("filtrage 5"&@CRLF)
            Else
                Filtrage($OS_3, $Question_coche)
                ConsoleWrite("filtrage 6"&@CRLF)
            EndIf
        Case $msg = $Windows_XP
            $Question_coche = GUICtrlRead($Windows_XP)
            $Lecture_rubriques = GUICtrlRead($ListeRubriques)
            $Lecture_SousRubriques = GUICtrlRead($ListeSousRubriques)
            If $Lecture_rubriques <> "" Then
                If $Lecture_SousRubriques <> "" Then
                    Filtrage($OS_1, $Question_coche, $Lecture_rubriques, $Lecture_SousRubriques)
                    ConsoleWrite("filtrage 7"&@CRLF)
                EndIf
                Filtrage($OS_1, $Question_coche, $Lecture_rubriques)
                ConsoleWrite("filtrage 8"&@CRLF)
            Else
                Filtrage($OS_1, $Question_coche)
            EndIf
        Case $msg = $Windows_Vista
            $Question_coche = GUICtrlRead($Windows_Vista)
            $Lecture_rubriques = GUICtrlRead($ListeRubriques)
            $Lecture_SousRubriques = GUICtrlRead($ListeSousRubriques)
            If $Lecture_rubriques <> "" Then
                If $Lecture_SousRubriques <> "" Then
                    Filtrage($OS_4, $Question_coche, $Lecture_rubriques, $Lecture_SousRubriques)
                EndIf
                Filtrage($OS_4, $Question_coche, $Lecture_rubriques)
            Else
                Filtrage($OS_4, $Question_coche)
            EndIf
        Case $msg = $Windows_7
            $Question_coche = GUICtrlRead($Windows_7)
            $Lecture_rubriques = GUICtrlRead($ListeRubriques)
            $Lecture_SousRubriques = GUICtrlRead($ListeSousRubriques)
            If $Lecture_rubriques <> "" Then
                If $Lecture_SousRubriques <> "" Then
                    Filtrage($OS_5, $Question_coche, $Lecture_rubriques, $Lecture_SousRubriques)
                EndIf
                Filtrage($OS_5, $Question_coche, $Lecture_rubriques)
            Else
                Filtrage($OS_5, $Question_coche)
            EndIf
        Case $msg = $ListeRubriques
            $Lecture_rubriques = GUICtrlRead($ListeRubriques)
            Filtrage_Rubriques($Lecture_rubriques)
        Case $msg = $ListeSousRubriques
            $Lecture_SousRubriques = GUICtrlRead($ListeSousRubriques)
            $Lecture_rubriques = GUICtrlRead($ListeRubriques)
        Case $msg = $Quitter
            GUIDelete()
            Exit
    EndSelect
Until $msg = $GUI_EVENT_CLOSE

_GUICtrlListView_UnRegisterSortCallBack($Tableau)

Func Filtrage_Rubriques($Rubrique)
    Switch $Rubrique
        Case ""
            GUICtrlSetData($ListeSousRubriques, "")
            GUICtrlSetState($ListeSousRubriques, $GUI_DISABLE)
        Case " L'éditeur d'objets de stratégie de groupe"
            GUICtrlSetState($ListeSousRubriques, $GUI_ENABLE)
            GUICtrlSetData($ListeSousRubriques, "|"&$SousRubrique_1&"|"&$SousRubrique_2&"|"&$SousRubrique_3&"|"&$SousRubrique_4)
        Case " Gesion des utilisateurs"
            GUICtrlSetState($ListeSousRubriques, $GUI_ENABLE)
            GUICtrlSetData($ListeSousRubriques, "|"&$SousRubrique_5&"|"&$SousRubrique_6&"|"&$SousRubrique_7&"|"&$SousRubrique_8&"|"&$SousRubrique_9)
        Case " Le bureau Windows"
            GUICtrlSetState($ListeSousRubriques, $GUI_ENABLE)
            GUICtrlSetData($ListeSousRubriques, "|"&$SousRubrique_10&"|"&$SousRubrique_11&"|"&$SousRubrique_12&"|"&$SousRubrique_13&"|"&$SousRubrique_14&"|"&$SousRubrique_15&"|"&$SousRubrique_16&"|"&$SousRubrique_17)
        Case " L'explorateur Windows"
            GUICtrlSetState($ListeSousRubriques, $GUI_ENABLE)
            GUICtrlSetData($ListeSousRubriques, "|"&$SousRubrique_18&"|"&$SousRubrique_19&"|"&$SousRubrique_20&"|"&$SousRubrique_21&"|"&$SousRubrique_22&"|"&$SousRubrique_23&"|"&$SousRubrique_24&"|"&$SousRubrique_25&"|"&$SousRubrique_26&"|"&$SousRubrique_27)
        Case " Le système"
            GUICtrlSetState($ListeSousRubriques, $GUI_ENABLE)
            GUICtrlSetData($ListeSousRubriques, "|"&$SousRubrique_28&"|"&$SousRubrique_29&"|"&$SousRubrique_30&"|"&$SousRubrique_31&"|"&$SousRubrique_32&"|"&$SousRubrique_33&"|"&$SousRubrique_34&"|"&$SousRubrique_35&"|"&$SousRubrique_36&"|"&$SousRubrique_37)
        Case " Les applications et composants Windows"
            GUICtrlSetState($ListeSousRubriques, $GUI_ENABLE)
            GUICtrlSetData($ListeSousRubriques, "|"&$SousRubrique_38&"|"&$SousRubrique_39&"|"&$SousRubrique_40&"|"&$SousRubrique_41&"|"&$SousRubrique_42&"|"&$SousRubrique_43&"|"&$SousRubrique_44&"|"&$SousRubrique_45&"|"&$SousRubrique_46&"|"&$SousRubrique_47&"|"&$SousRubrique_48&"|"&$SousRubrique_49&"|"&$SousRubrique_50)
        Case " Personnaliser et sécuriser Internet Explorer"
            GUICtrlSetState($ListeSousRubriques, $GUI_ENABLE)
            GUICtrlSetData($ListeSousRubriques, "|"&$SousRubrique_51&"|"&$SousRubrique_52&"|"&$SousRubrique_53&"|"&$SousRubrique_54&"|"&$SousRubrique_55&"|"&$SousRubrique_56&"|"&$SousRubrique_57)
        Case " Restrictions dans Internet Explorer"
            GUICtrlSetState($ListeSousRubriques, $GUI_ENABLE)
            GUICtrlSetData($ListeSousRubriques, "|"&$SousRubrique_58&"|"&$SousRubrique_59&"|"&$SousRubrique_60&"|"&$SousRubrique_61&"|"&$SousRubrique_62&"|"&$SousRubrique_63&"|"&$SousRubrique_64&"|"&$SousRubrique_65)
        Case " Périphériques et réseau"
            GUICtrlSetState($ListeSousRubriques, $GUI_ENABLE)
            GUICtrlSetData($ListeSousRubriques, "|"&$SousRubrique_66&"|"&$SousRubrique_67&"|"&$SousRubrique_68&"|"&$SousRubrique_69&"|"&$SousRubrique_70&"|"&$SousRubrique_71)
    EndSwitch
EndFunc

Func Filtrage($OS = -1, $Coche = -1, $Rubrique = "", $SousRubrique = "")
    ConsoleWrite("OS de départ : " & $OS & @CRLF)
    $Lecture_Windows_2000 = GUICtrlRead($Windows_2000)
    $Lecture_Windows_XP = GUICtrlRead($Windows_XP)
    $Lecture_Windows_2003 = GUICtrlRead($Windows_2003)
    $Lecture_Windows_Vista = GUICtrlRead($Windows_Vista)
    $Lecture_Windows_7 = GUICtrlRead($Windows_7)
    $Lecture_rubriques = GUICtrlRead($ListeRubriques)
    $Lecture_SousRubriques = GUICtrlRead($ListeSousRubriques)

    $NombreElements = _GUICtrlListView_GetItemCount($Tableau)
; ----------------------------------------------------------------------------------------------------
; ----------                            Ajout des éléments                                    ----------
; ----------------------------------------------------------------------------------------------------
    For $Elements In $Actions ; parcours des éléments
        $Elements_ID = _StringBetween($Elements, 'GUICtrlCreateListViewItem("', "|")
        $ConversionValeurArray = _ArrayToString($Elements_ID)

        $Verification_Windows2000 = 0
        $Verification_WindowsXP = 0

        For $i = $NombreElements -1 To 0 Step -1 ; parcours du tableau affiché

            $RubriqueTableau_ID = _GUICtrlListView_GetItem($Tableau, $i, 0) ; Récupération de l'ID des éléments du tableau
            $RubriqueTableau_OS = _GUICtrlListView_GetItem($Tableau, $i, 1) ; Récupération de l'OS des éléments du tableau

            If $Lecture_Windows_2000 = 4 Then ; Si la case "Windows 2000" est décochée
;~              ConsoleWrite('"Windows 2000" est décochée'&@CRLF&"$RubriqueTableau_OS[3] : "&$RubriqueTableau_OS[3]&@CRLF)
                If StringInStr($RubriqueTableau_OS[3], "Windows 2000") Then
                    _GUICtrlListView_DeleteItem($Tableau, $i)
                EndIf
            ElseIf $Lecture_Windows_2000 = 1 And $OS = " Windows 2000" Then ; Si la case "Windows 2000" est cochée
                $Verification_Windows2000 = 1
                If StringInStr($RubriqueTableau_ID[3], $ConversionValeurArray) Then
                    $Verification_Windows2000 += 1
                EndIf
            EndIf
            If $Lecture_Windows_XP = 4 Then ; Si la case "Windows XP" est décochée
                If StringInStr($RubriqueTableau_OS[3], "Windows XP") Then
                    _GUICtrlListView_DeleteItem($Tableau, $i)
                EndIf
            ElseIf $Lecture_Windows_XP = 1 And $OS = " Windows XP" Then ; Si la case "Windows XP" est cochée
                $Verification_WindowsXP = 1
                If StringInStr($RubriqueTableau_ID[3], $ConversionValeurArray) Then
                    $Verification_WindowsXP += 1
                EndIf
            EndIf
            If $Lecture_Windows_2003 = 4 Then ; Si la case "Windows 2003" est décochée
                If StringInStr($RubriqueTableau_OS[3], "Windows 2003") Then
                    _GUICtrlListView_DeleteItem($Tableau, $i)
                EndIf
            ElseIf $Lecture_Windows_2003 = 1 Then
            EndIf
            If $Lecture_Windows_Vista = 4 Then ; Si la case "Windows Vista" est décochée
                If StringInStr($RubriqueTableau_OS[3], "Windows vista") Then
                    _GUICtrlListView_DeleteItem($Tableau, $i)
                EndIf
            EndIf
            If $Lecture_Windows_7 = 4 Then ; Si la case "Windows 7" est décochée
                If StringInStr($RubriqueTableau_OS[3], "Windows 7") Then
                    _GUICtrlListView_DeleteItem($Tableau, $i)
                EndIf
            EndIf
        Next
        ConsoleWrite("Verif 2000 : "&$Verification_Windows2000&@CRLF&"Verif XP : "&$Verification_WindowsXP&@CRLF)
        If $Verification_Windows2000 = 1 Then
            Execute($Elements)
        ElseIf $Verification_WindowsXP = 1 Then
            Execute($Elements)
        EndIf
    Next
EndFunc

[EDIT] Regarding the filtering, take a look at John Bailey's script:

#cs -------------------------------------------------

    Author:         John Bailey
    Modifier:       name
    Date Modified:  today's date
    ScriptFunction: description of this script's function
    AutoIt Ver:     version

    Script Version: 1.0.0 (base code).(improved/added features).(script errors corrected)

    Script Update History:
            1.1.0 - AdvFilter updated to allow for multiple filtering on single column


    To-Do List (not in importance order):
    ->  1. Contextmenu for the search input control using the SearchType options.

    -> = working on

#ce -------------------------------------------------


#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>
#include <StaticConstants.au3>
#include <GuiListView.au3>
#include <GuiComboBox.au3>
#include <File.au3>
#include <Array.au3>
#include <Date.au3>
#include <GuiEdit.au3>

;#include <ControlConstants.au3>

Opt ("GUIOnEventMode", 1)
DllCall("uxtheme.dll", "none", "SetThemeAppProperties", "int", 1)


;==== Row Entries
; Delim.
Global $SettingsIR_delimiter = '†'
; File
Global $dbRowEntriesFile = @ScriptDir&'\LV Filter - onchange expand.txt'
; Array
Global $dbRowEntriesArray
;Array 2D
Global $dbRowEntriesArray2D
;Array 2D Column Count
Global $dbRowEntriesArray2DCount
;====

Global $checkedSymbol = chr(149)
Global $unCheckedSymbol = chr(32)

Local $LVHeaders = 'First Name|Last Name|Number|Access'

$AppWin = GUICreate("Search Example", 1066, 623, -1, -1)
;GUISetBkColor(0x716F64)
$Input = GUICtrlCreateInput("", 31, 39, 240, 22)
GUICtrlSetFont(-1, 9, 800, 0, "Rockwell")
$Label1 = GUICtrlCreateLabel("Search", 31, 20, 36, 17)
GUICtrlSetColor(-1, 0xC0C0C0)
$LV_Main = GUICtrlCreateListView($LVHeaders, 31, 65, 510, 495)
GUICtrlSendMsg($LV_Main, 0x101E, 0, 120)
GUICtrlSendMsg($LV_Main, 0x101E, 1, 178)
GUICtrlSendMsg($LV_Main, 0x101E, 2, 40)
GUICtrlSendMsg($LV_Main, 0x101E, 3, 70)
;GUICtrlSetBkColor($LV_Main, 0xD4D0C8)

Global $TotalColumns = _GUICtrlListView_GetColumnCount($LV_Main)
$dbRowEntriesArray2D =  _setupRowEntries()

$Label2 = GUICtrlCreateLabel("Column To Search", 278, 19, 126, 17)
GUICtrlSetColor($Label2, 0xC0C0C0)
$ColumnToSearchCB = GUICtrlCreateCombo("All", 277, 39, 128, 25)
GUICtrlSetData($ColumnToSearchCB,$LVHeaders)

$SearchTypeCB = GUICtrlCreateCombo("Contains", 412, 39, 128, 25)
GUICtrlSetData($SearchTypeCB, "Does Not Contain|Begins With|Does Not Begin With|Equals|Not Equal|Greater Than|Greater Than or Equal|Less Than|Less Than or Equal|Is Empty|Not Empty|Checked|Not Checked")
$Label3 = GUICtrlCreateLabel("Search Type", 413, 18, 98, 17)
GUICtrlSetColor($Label3, 0xC0C0C0)

$Group1 = GUICtrlCreateGroup("", 563, 81, 457, 370)
$Label4 = GUICtrlCreateLabel("Advanced Filter Section", 639, 101, 286, 17, $SS_CENTER)
GUICtrlSetFont(-1, 8, 800, 0, "MS Sans Serif")

$Label7 = GUICtrlCreateLabel("Search", 736, 136, 36, 17)
GUICtrlSetColor(-1, 0xC0C0C0)
$Input1 = GUICtrlCreateInput("", 735, 158, 121, 21)
$Input2 = GUICtrlCreateInput("", 735, 190, 121, 21)
$Input3 = GUICtrlCreateInput("", 735, 224, 121, 21)

$Label5 = GUICtrlCreateLabel("Column To Search", 591, 136, 126, 17)
GUICtrlSetColor(-1, 0xC0C0C0)
$Combo6 = GUICtrlCreateCombo("First Name", 590, 158, 136, 25)
GUICtrlSetData(-1, $LVHeaders)
$Combo7 = GUICtrlCreateCombo("Last Name", 591, 190, 136, 25)
GUICtrlSetData(-1, $LVHeaders)
$Combo8 = GUICtrlCreateCombo("Number", 591, 224, 136, 25)
GUICtrlSetData(-1, $LVHeaders)
$Combo9 = GUICtrlCreateCombo("Access", 590, 255, 136, 25)

$Label6 = GUICtrlCreateLabel("Search Type", 864, 136, 98, 17)
GUICtrlSetColor(-1, 0xC0C0C0)
$Combo2 = GUICtrlCreateCombo("Contains", 863, 158, 128, 25)
GUICtrlSetData(-1, "Does Not Contain|Begins With|Does Not Begin With|Equals|Not Equal|Greater Than|Greater Than or Equal|Less Than|Less Than or Equal|Is Empty|Not Empty|Checked|Not Checked")
$Combo3 = GUICtrlCreateCombo("Contains", 863, 191, 128, 25)
GUICtrlSetData(-1, "Does Not Contain|Begins With|Does Not Begin With|Equals|Not Equal|Greater Than|Greater Than or Equal|Less Than|Less Than or Equal|Is Empty|Not Empty|Checked|Not Checked")
$Combo4 = GUICtrlCreateCombo("Contains", 863, 224, 128, 25)
GUICtrlSetData(-1, "Does Not Contain|Begins With|Does Not Begin With|Equals|Not Equal|Greater Than|Greater Than or Equal|Less Than|Less Than or Equal|Is Empty|Not Empty|Checked|Not Checked")
$Combo5 = GUICtrlCreateCombo("", 863, 255, 128, 25)
GUICtrlSetData(-1, "Checked|Not Checked")






$StatusBar = GUICtrlCreateLabel("", 0, 604, 1066, 17, $SS_SUNKEN)

GUIRegisterMsg($WM_COMMAND, "MY_WM_COMMAND")

GUISetOnEvent($GUI_EVENT_CLOSE, "_GUIEvents")
GUISetOnEvent($GUI_EVENT_MINIMIZE, "_GUIEvents")
GUISetOnEvent($GUI_EVENT_RESTORE, "_GUIEvents")

GUICtrlSetOnEvent($ColumnToSearchCB, "ButtonPressed")
GUICtrlSetOnEvent($Combo2, "ButtonPressed")
GUICtrlSetOnEvent($Combo3, "ButtonPressed")
GUICtrlSetOnEvent($Combo4, "ButtonPressed")
GUICtrlSetOnEvent($Combo5, "ButtonPressed")
GUICtrlSetOnEvent($SearchTypeCB, "ButtonPressed")


GUISetState(@SW_SHOW)

_loadRowEntries($LV_Main)

While 1
   Sleep(25)
WEnd


;===============================================================================
;
; Function Name:    _()
; Description:
; Parameter(s):
;                   $               -  string   - Optional:
;                                                           0 = (Default) 1
;                                                           1 = 1
;
;
; Requirement(s):
; Return Value(s):  On Success  - Returns 1
;                   On Failure  - Returns 0 and sets @ERROR
;                   @ERROR      - 0 =
;                               - 1 =
;                               - 2 =
;                               - 3 =
;                   @Extended   -
; CallTip:
; Author(s):        John Bailey
;
;===============================================================================
Func _FilterLVItems($fil_SearchType='Contains',$fil_columntoSearch=0)
    Local $LVtofilter = $LV_Main
    Local $fil_searchInput = $Input
    Local $fil_Array = $dbRowEntriesArray
    Local $fil_Array2D = $dbRowEntriesArray2D
    Local $fil_Array2DColumns = $dbRowEntriesArray2DCount
    Local $fil_SearchTypeCB = $SearchTypeCB
    Local $fil_checkedSymbol = $checkedSymbol

    Local $fil_SearchText = GUICtrlRead($fil_searchInput)
    Local $SearchCharLen = StringLen($fil_SearchText)
    _GUICtrlListView_DeleteAllItems($LVtofilter)
    If $fil_SearchText <> '' OR $fil_SearchType = 'Is Empty' OR $fil_SearchType = 'Not Empty' OR $fil_SearchType = 'Checked' OR $fil_SearchType = 'Not Checked' Then

        If $fil_SearchType = 'Contains' Then
            If $fil_columntoSearch = 0 Then
                For $a = 1 to UBound($fil_Array)-1
                    If StringInStr($fil_Array[$a],$fil_SearchText) Then
                        _FilterLV_AddtoLV($LVtofilter,$fil_Array[$a],$SettingsIR_delimiter)
                    EndIf
                Next
            Else
                For $a = 1 to UBound($fil_Array)-1
                    If StringInStr($fil_Array2D[$a][$fil_columntoSearch-1],$fil_SearchText) Then
                        _FilterLV_AddtoLV($LVtofilter,$fil_Array[$a],$SettingsIR_delimiter)
                    EndIf
                Next
            EndIf
        ElseIf  $fil_SearchType = 'Does Not Contain' Then
            If $fil_columntoSearch = 0 Then
                For $a = 1 to UBound($fil_Array)-1
                    If NOT StringInStr($fil_Array[$a],$fil_SearchText) Then
                        _FilterLV_AddtoLV($LVtofilter,$fil_Array[$a],$SettingsIR_delimiter)
                    EndIf
                Next
            Else
                For $a = 1 to UBound($fil_Array)-1
                    If NOT StringInStr($fil_Array2D[$a][$fil_columntoSearch-1],$fil_SearchText) Then
                        _FilterLV_AddtoLV($LVtofilter,$fil_Array[$a],$SettingsIR_delimiter)
                    EndIf
                Next
            EndIf
        ElseIf $fil_SearchType = 'Begins With' Then
            If $fil_columntoSearch = 0 Then
                For $a = 1 to UBound($fil_Array)-1
                    Local $String = $fil_Array[$a]
                    Local $stringlen = StringLen($String)
                    Local $result = StringTrimRight($String, $stringlen-$SearchCharLen)
                    If $result = $fil_SearchText Then
                        _FilterLV_AddtoLV($LVtofilter,$fil_Array[$a],$SettingsIR_delimiter)
                    EndIf
                Next
            Else
                For $a = 1 to UBound($fil_Array)-1
                    Local $String = $fil_Array2D[$a][$fil_columntoSearch-1]
                    Local $stringlen = StringLen($String)
                    Local $result = StringTrimRight($String, $stringlen-$SearchCharLen)

                    If $result = $fil_SearchText Then
                        _FilterLV_AddtoLV($LVtofilter,$fil_Array[$a],$SettingsIR_delimiter)
                    EndIf
                Next
            EndIf
        ElseIf $fil_SearchType = 'Does Not Begin With' Then
            If $fil_columntoSearch = 0 Then
                For $a = 1 to UBound($fil_Array)-1
                    Local $String = $fil_Array[$a]
                    Local $stringlen = StringLen($String)
                    Local $result = StringTrimRight($String, $stringlen-$SearchCharLen)
                    If $result <> $fil_SearchText Then
                        _FilterLV_AddtoLV($LVtofilter,$fil_Array[$a],$SettingsIR_delimiter)
                    EndIf
                Next
            Else
                For $a = 1 to UBound($fil_Array)-1
                    Local $String = $fil_Array2D[$a][$fil_columntoSearch-1]
                    Local $stringlen = StringLen($String)
                    Local $result = StringTrimRight($String, $stringlen-$SearchCharLen)

                    If $result <> $fil_SearchText Then
                        _FilterLV_AddtoLV($LVtofilter,$fil_Array[$a],$SettingsIR_delimiter)
                    EndIf
                Next
            EndIf
        ElseIf  $fil_SearchType = 'Equals' Then
            Local $fil_SearchText = GUICtrlRead($fil_searchInput)
            If $fil_columntoSearch = 0 Then
                For $a = 1 to UBound($fil_Array)-1
                    If $fil_SearchText = $fil_Array[$a] Then
                        _FilterLV_AddtoLV($LVtofilter,$fil_Array[$a],$SettingsIR_delimiter)
                    EndIf
                Next
            Else
                For $a = 1 to UBound($fil_Array)-1
                    If $fil_SearchText = $fil_Array2D[$a][$fil_columntoSearch-1] Then
                        _FilterLV_AddtoLV($LVtofilter,$fil_Array[$a],$SettingsIR_delimiter)
                    EndIf
                Next
            EndIf
        ElseIf  $fil_SearchType = 'Not Equal' Then
            Local $fil_SearchText = GUICtrlRead($fil_searchInput)
            If $fil_columntoSearch = 0 Then
                For $a = 1 to UBound($fil_Array)-1
                    If $fil_SearchText <> $fil_Array[$a] Then
                        _FilterLV_AddtoLV($LVtofilter,$fil_Array[$a],$SettingsIR_delimiter)
                    EndIf
                Next
            Else
                For $a = 1 to UBound($fil_Array)-1
                    If $fil_SearchText <> $fil_Array2D[$a][$fil_columntoSearch-1] Then
                        _FilterLV_AddtoLV($LVtofilter,$fil_Array[$a],$SettingsIR_delimiter)
                    EndIf
                Next
            EndIf
        ElseIf  $fil_SearchType = 'Greater Than' Then
            Local $fil_SearchText = Number(GUICtrlRead($fil_searchInput))
            If $fil_columntoSearch = 0 Then
                For $a = 1 to UBound($fil_Array)-1
                    If $fil_SearchText > $fil_Array[$a] Then
                        _FilterLV_AddtoLV($LVtofilter,$fil_Array[$a],$SettingsIR_delimiter)
                    EndIf
                Next
            Else
                For $a = 1 to UBound($fil_Array)-1
                    If $fil_SearchText > $fil_Array2D[$a][$fil_columntoSearch-1] Then
                        _FilterLV_AddtoLV($LVtofilter,$fil_Array[$a],$SettingsIR_delimiter)
                    EndIf
                Next
            EndIf
        ElseIf  $fil_SearchType = 'Greater Than or Equal' Then
            Local $fil_SearchText = Number(GUICtrlRead($fil_searchInput))
            If $fil_columntoSearch = 0 Then
                For $a = 1 to UBound($fil_Array)-1
                    If $fil_SearchText >= $fil_Array[$a] Then
                        _FilterLV_AddtoLV($LVtofilter,$fil_Array[$a],$SettingsIR_delimiter)
                    EndIf
                Next
            Else
                For $a = 1 to UBound($fil_Array)-1
                    If $fil_SearchText >= $fil_Array2D[$a][$fil_columntoSearch-1] Then
                        _FilterLV_AddtoLV($LVtofilter,$fil_Array[$a],$SettingsIR_delimiter)
                    EndIf
                Next
            EndIf
        ElseIf  $fil_SearchType = 'Less Than' Then
            Local $fil_SearchText = Number(GUICtrlRead($fil_searchInput))
            If $fil_columntoSearch = 0 Then
                For $a = 1 to UBound($fil_Array)-1
                    If $fil_SearchText < $fil_Array[$a] Then
                        _FilterLV_AddtoLV($LVtofilter,$fil_Array[$a],$SettingsIR_delimiter)
                    EndIf
                Next
            Else
                For $a = 1 to UBound($fil_Array)-1
                    If $fil_SearchText < $fil_Array2D[$a][$fil_columntoSearch-1] Then
                        _FilterLV_AddtoLV($LVtofilter,$fil_Array[$a],$SettingsIR_delimiter)
                    EndIf
                Next
            EndIf
        ElseIf  $fil_SearchType = 'Less Than or Equal' Then
            Local $fil_SearchText = Number(GUICtrlRead($fil_searchInput))
            If $fil_columntoSearch = 0 Then
                For $a = 1 to UBound($fil_Array)-1
                    If $fil_SearchText <= $fil_Array[$a] Then
                        _FilterLV_AddtoLV($LVtofilter,$fil_Array[$a],$SettingsIR_delimiter)
                    EndIf
                Next
            Else
                For $a = 1 to UBound($fil_Array)-1
                    If $fil_SearchText <= $fil_Array2D[$a][$fil_columntoSearch-1] Then
                        _FilterLV_AddtoLV($LVtofilter,$fil_Array[$a],$SettingsIR_delimiter)
                    EndIf
                Next
            EndIf


        ElseIf  $fil_SearchType = 'Is Empty' Then

            If $fil_columntoSearch = 0 Then
                For $a = 1 to UBound($fil_Array)-1
                    Local $fil_subCounter=0
                    Local $fil_add = 0
                    For $fil_subCounter=1 to $fil_Array2DColumns
                        Switch Number($fil_SearchText)
                            Case 1,2,3,4,5,6,7,8
                                If StringStripWS($fil_Array2D[$a][$fil_subCounter-1],Number($fil_SearchText)) = '' Then
                                    $fil_add = 1
                                EndIf
                            Case Else
                                If $fil_Array2D[$a][$fil_subCounter-1] = '' Then
                                    $fil_add = 1
                                EndIf
                        EndSwitch
                    Next
                    If $fil_add <> 0 Then _FilterLV_AddtoLV($LVtofilter,$fil_Array[$a],$SettingsIR_delimiter)
                Next
            Else
                For $a = 1 to UBound($fil_Array)-1
                    Switch Number($fil_SearchText)
                        Case 1,2,3,4,5,6,7,8
                            If StringStripWS($fil_Array2D[$a][$fil_columntoSearch-1],Number($fil_SearchText)) = '' Then
                                _FilterLV_AddtoLV($LVtofilter,$fil_Array[$a],$SettingsIR_delimiter)
                            EndIf
                        Case Else
                            If $fil_Array2D[$a][$fil_columntoSearch-1] = '' Then
                                _FilterLV_AddtoLV($LVtofilter,$fil_Array[$a],$SettingsIR_delimiter)
                            EndIf
                    EndSwitch
                Next
            EndIf
        ElseIf  $fil_SearchType = 'Not Empty' Then
            If $fil_columntoSearch = 0 Then
                For $a = 1 to UBound($fil_Array)-1
                    Local $fil_subCounter=0
                    Local $fil_add = 0
                    For $fil_subCounter=1 to $fil_Array2DColumns
                        Switch Number($fil_SearchText)
                            Case 1,2,3,4,5,6,7,8
                                If StringStripWS($fil_Array2D[$a][$fil_subCounter-1],Number($fil_SearchText)) <> '' Then
                                    $fil_add = 1
                                EndIf
                            Case Else
                                If $fil_Array2D[$a][$fil_subCounter-1] <> '' Then
                                    $fil_add = 1
                                EndIf
                        EndSwitch
                    Next
                    If $fil_add <> 0 Then _FilterLV_AddtoLV($LVtofilter,$fil_Array[$a],$SettingsIR_delimiter)
                Next
            Else
                For $a = 1 to UBound($fil_Array)-1
                    Switch Number($fil_SearchText)
                        Case 1,2,3,4,5,6,7,8
                            If StringStripWS($fil_Array2D[$a][$fil_columntoSearch-1],Number($fil_SearchText)) <> '' Then
                                _FilterLV_AddtoLV($LVtofilter,$fil_Array[$a],$SettingsIR_delimiter)
                            EndIf
                        Case Else
                            If $fil_Array2D[$a][$fil_columntoSearch-1] <> '' Then
                                _FilterLV_AddtoLV($LVtofilter,$fil_Array[$a],$SettingsIR_delimiter)
                            EndIf
                    EndSwitch
                Next
            EndIf
        ElseIf  $fil_SearchType = 'Checked' Then
            If $fil_columntoSearch = 0 Then
                For $a = 1 to UBound($fil_Array)-1
                    If StringInStr($fil_Array[$a],$fil_checkedSymbol) Then
                        _FilterLV_AddtoLV($LVtofilter,$fil_Array[$a],$SettingsIR_delimiter)
                    EndIf
                Next
            Else
                For $a = 1 to UBound($fil_Array)-1
                    If StringInStr($fil_Array2D[$a][$fil_columntoSearch-1],$fil_checkedSymbol) Then
                        _FilterLV_AddtoLV($LVtofilter,$fil_Array[$a],$SettingsIR_delimiter)
                    EndIf
                Next
            EndIf
        ElseIf  $fil_SearchType = 'Not Checked' Then
            If $fil_columntoSearch = 0 Then
                For $a = 1 to UBound($fil_Array)-1
                    If NOT StringInStr($fil_Array[$a],$fil_checkedSymbol) Then
                        _FilterLV_AddtoLV($LVtofilter,$fil_Array[$a],$SettingsIR_delimiter)
                    EndIf
                Next
            Else
                For $a = 1 to UBound($fil_Array)-1
                    If NOT StringInStr($fil_Array2D[$a][$fil_columntoSearch-1],$fil_checkedSymbol) Then
                        _FilterLV_AddtoLV($LVtofilter,$fil_Array[$a],$SettingsIR_delimiter)
                    EndIf
                Next
            EndIf
        Else ; Search Type is not setup
            MsgBox(0,'Search Type Error',$fil_SearchType&' is not set in the code')
            For $a = 1 to UBound($fil_Array)-1
                _FilterLV_AddtoLV($LVtofilter,$fil_Array,$SettingsIR_delimiter)
            Next
        EndIf

    ; Full List - No Filter - Blank Input Area
    Else
        For $a = 1 to UBound($fil_Array)-1
            _FilterLV_AddtoLV($LVtofilter,$fil_Array[$a],$SettingsIR_delimiter)
        Next
    EndIf
EndFunc


;===============================================================================
;
; Function Name:    _FilterAdv()
; Description:
; Parameter(s):
;                   $               -  string   - Optional:
;                                                           0 = (Default) 1
;                                                           1 = 1
;
;
; Requirement(s):
; Return Value(s):  On Success  - Returns 1
;                   On Failure  - Returns 0 and sets @ERROR
;                   @ERROR      - 0 =
;                               - 1 =
;                               - 2 =
;                               - 3 =
;                   @Extended   -
; CallTip:
; Author(s):        John Bailey
;
;===============================================================================
Func _FilterAdv($faaa_string)
    Local $fil_LVtofilter = $LV_Main
    Local $fil_Array = $dbRowEntriesArray
    Local $fil_Array2D = $dbRowEntriesArray2D
    Local $fil_checkedSymbol = $checkedSymbol

    Local $sSplit = StringSplit($faaa_string,$SettingsIR_delimiter)
    _GUICtrlListView_DeleteAllItems($fil_LVtofilter)
    For $a = 1 to UBound($fil_Array)-1
        Local $faaa_yes = 1
        Local $count
        For $count =  1 to $sSplit[0]
            Local $cSplit = StringSplit($sSplit[$count],'‡')
            Local $LVHeadersArray=StringSplit($LVHeaders,'|',1)
            Local $fil_ColumnToSearch= _ArraySearch($LVHeadersArray,$cSplit[3],1)
            Local $counter = $fil_ColumnToSearch
            If $cSplit[1] <> '' Then
                If $cSplit[2] = 'Contains' Then
                    If NOT StringInStr($fil_Array2D[$a][$counter-1],$cSplit[1]) Then
                        $faaa_yes = 0
                    EndIf
                ElseIf $cSplit[2] = 'Does Not Contain' Then
                    If StringInStr($fil_Array2D[$a][$counter-1],$cSplit[1]) Then
                        $faaa_yes = 0
                    EndIf
                ElseIf $cSplit[2] = 'Begins With' Then
                    Local $SearchCharLen = StringLen($cSplit[1])
                    Local $String = $fil_Array2D[$a][$counter-1]
                    Local $stringlen = StringLen($String)
                    Local $result = StringTrimRight($String, $stringlen-$SearchCharLen)

                    If $result <> $cSplit[1] Then
                        $faaa_yes = 0
                    EndIf
                ElseIf $cSplit[2] = 'Does Not Begin With' Then
                    Local $SearchCharLen = StringLen($cSplit[1])
                    Local $String = $fil_Array2D[$a][$counter-1]
                    Local $stringlen = StringLen($String)
                    Local $result = StringTrimRight($String, $stringlen-$SearchCharLen)

                    If $result = $cSplit[1] Then
                        $faaa_yes = 0
                    EndIf
                ElseIf $cSplit[2] = 'Equals' Then
                    If $cSplit[1] <> $fil_Array2D[$a][$counter-1] Then
                        $faaa_yes = 0
                    EndIf
                ElseIf $cSplit[2] = 'Not Equal' Then
                    If $cSplit[1] = $fil_Array2D[$a][$counter-1] Then
                        $faaa_yes = 0
                    EndIf
                ElseIf $cSplit[2] = 'Greater Than' Then
                    If Number($cSplit[1]) >= Number($fil_Array2D[$a][$counter-1]) Then
                        $faaa_yes = 0
                    EndIf
                ElseIf $cSplit[2] = 'Greater Than or Equal' Then
                    If Number($cSplit[1]) > Number($fil_Array2D[$a][$counter-1]) Then
                        $faaa_yes = 0
                    EndIf
                ElseIf $cSplit[2] = 'Less Than' Then
                    If Number($cSplit[1]) <= Number($fil_Array2D[$a][$counter-1]) Then
                        $faaa_yes = 0
                    EndIf
                ElseIf $cSplit[2] = 'Less Than or Equal' Then
                    If Number($cSplit[1]) < Number($fil_Array2D[$a][$counter-1]) Then
                        $faaa_yes = 0
                    EndIf
                ElseIf $cSplit[2] = 'Is Empty' Then
                    Switch Number($cSplit[1])
                        Case 1,2,3,4,5,6,7,8
                            If StringStripWS($fil_Array2D[$a][$counter-1],Number($cSplit[1])) <> '' Then
                                $faaa_yes = 0
                            EndIf
                        Case Else
                            If $fil_Array2D[$a][$counter-1] <> '' Then
                                $faaa_yes = 0
                            EndIf
                    EndSwitch
                ElseIf $cSplit[2] = 'Not Empty' Then
                    Switch Number($cSplit[1])
                        Case 1,2,3,4,5,6,7,8
                            If StringStripWS($fil_Array2D[$a][$counter-1],Number($cSplit[1])) = '' Then
                                $faaa_yes = 0
                            EndIf
                        Case Else
                            If $fil_Array2D[$a][$counter-1] = '' Then
                                $faaa_yes = 0
                            EndIf
                    EndSwitch
                ElseIf $cSplit[2] = 'Checked' Then
                    If NOT StringInStr($fil_Array2D[$a][$counter-1],$fil_checkedSymbol) Then
                        $faaa_yes = 0
                    EndIf
                ElseIf $cSplit[2] = 'Not Checked' Then
                    If StringInStr($fil_Array2D[$a][$counter-1],$fil_checkedSymbol) Then
                        $faaa_yes = 0
                    EndIf
                ElseIf $cSplit[2] = '' Then
                    ;
                Else
                    MsgBox(0,'Search Type Error',$cSplit[2]&' is not set in the code')
                EndIf
            EndIf
        Next

        If $faaa_yes = 1 Then
            _FilterLV_AddtoLV($fil_LVtofilter,$fil_Array[$a],$SettingsIR_delimiter)
        EndIf
    Next
EndFunc



;===============================================================================
;
; Function Name:    _()
; Description:
; Parameter(s):
;                   $               -  string   - Optional:
;                                                           0 = (Default) 1
;                                                           1 = 1
;
;
; Requirement(s):
; Return Value(s):  On Success  - Returns 1
;                   On Failure  - Returns 0 and sets @ERROR
;                   @ERROR      - 0 =
;                               - 1 =
;                               - 2 =
;                               - 3 =
;                   @Extended   -
; CallTip:
; Author(s):        John Bailey
;
;===============================================================================
Func _FilterLV_AddtoLV(ByRef $fL_LVtofilter, ByRef $fL_LinetoAdd,$fL_delimiter='†')
    Local $itemLineArray = StringSplit($fL_LinetoAdd,$fL_delimiter,1)
    Local $itemLine = ''
    Local $b
    For $b = 1 to $itemLineArray[0]
        If $b = $itemLineArray[0] Then
            $itemLine &= $itemLineArray[$b]
        Else
            $itemLine &= $itemLineArray[$b]&'|'
        EndIf
    Next
    GUICtrlCreateListViewItem($itemLine, $fL_LVtofilter)
EndFunc


Func _setupRowEntries() ;set it up after the columns are setup

    _FileReadToArray($dbRowEntriesFile,$dbRowEntriesArray)
    If @error Then
        Msgbox(0,'File not read to Array',$dbRowEntriesFile&@LF&' to $dbRowEntriesArray')
    EndIf
    Local $headerSplit = StringSplit($LVHeaders,'|',1)
    $dbRowEntriesArray2DCount = $headerSplit[0]
    Local $sre_dbRowEntriesArray2D[UBound($dbRowEntriesArray)][$dbRowEntriesArray2DCount]

    Local $x = 1
    For $x = 1 to UBound($dbRowEntriesArray)-1
        Local $readSplitArray = StringSplit($dbRowEntriesArray[$x],$SettingsIR_delimiter,1)
        Local $xx = 0
        For $xx = 1 to $readSplitArray[0]
            $sre_dbRowEntriesArray2D[$x][$xx-1] = $readSplitArray[$xx]
        Next
    Next

    Return $sre_dbRowEntriesArray2D
EndFunc

Func _loadRowEntries(ByRef $lvID)
    For $x = 1 to Ubound($dbRowEntriesArray2D)-1
        Local $itemLine = ''
        For $xx = 1 to $dbRowEntriesArray2DCount
            If $xx = $dbRowEntriesArray2DCount Then
                $itemLine &= $dbRowEntriesArray2D[$x][$xx-1]
                ;If $dbRowEntriesArray2D[$x][$xx-1] = 'true' Then
                ;   $itemLine &= $checkedSymbol
                ;ElseIf $dbRowEntriesArray2D[$x][$xx-1] = 'false' Then
                ;   $itemLine &= $checkedSymbol
                ;EndIf
            Else
                $itemLine &= $dbRowEntriesArray2D[$x][$xx-1]&'|'
            EndIf
        Next
        GUICtrlCreateListViewItem($itemLine, $lvID)
    Next
EndFunc


Func MY_WM_COMMAND($hWnd, $msg, $wParam, $lParam)
    ; gaFrost for monitoring inputfield change
    Local $nNotifyCode = BitShift($wParam, 16)
    Local $nID = BitAND($wParam, 0xFFFF)
    Local $hCtrl = $lParam

    Switch $nID
        Case $Input
            Switch $nNotifyCode
                Case $EN_CHANGE
                    _FilterLVItems(GUICtrlRead($SearchTypeCB),_GUICtrlComboBox_GetCurSel ( $ColumnToSearchCB ))
            EndSwitch
        Case $Input1, $Input2, $Input3
            Local $df = GUICtrlRead($Input1)&'‡'&GUICtrlRead($Combo2)&'‡'&GUICtrlRead($Combo6)&'†'&GUICtrlRead($Input2)&'‡'&GUICtrlRead($Combo3)&'‡'&GUICtrlRead($Combo7)&'†'&GUICtrlRead($Input3)&'‡'&GUICtrlRead($Combo4)&'‡'&GUICtrlRead($Combo8)&'†'&'blank'&'‡'&GUICtrlRead($Combo5)&'‡'&GUICtrlRead($Combo9)
            _FilterAdv($df)
    EndSwitch
    ; Proceed the default Autoit3 internal message commands.
    ; You also can complete let the line out.
    ; !!! But only 'Return' (without any value) will not proceed
    ; the default Autoit3-message in the future !!!
    Return $GUI_RUNDEFMSG
EndFunc   ;==>MY_WM_COMMAND

;==>WM_Notify_Events

Func ButtonPressed()
    Switch @GUI_CTRLID
        case $ColumnToSearchCB
            Local $CBcurrentIndex = _GUICtrlComboBox_GetCurSel ( $ColumnToSearchCB )
            _FilterLVItems(GUICtrlRead($SearchTypeCB),$CBcurrentIndex)

        Case $SearchTypeCB
            Local $CBcurrentIndex = _GUICtrlComboBox_GetCurSel ( $ColumnToSearchCB )
            _FilterLVItems(GUICtrlRead($SearchTypeCB),$CBcurrentIndex)

        Case $Combo2,$Combo3,$Combo4,$Combo5
            Local $df = GUICtrlRead($Input1)&'‡'&GUICtrlRead($Combo2)&'‡'&GUICtrlRead($Combo6)&'†'&GUICtrlRead($Input2)&'‡'&GUICtrlRead($Combo3)&'‡'&GUICtrlRead($Combo7)&'†'&GUICtrlRead($Input3)&'‡'&GUICtrlRead($Combo4)&'‡'&GUICtrlRead($Combo8)&'†'&'blank'&'‡'&GUICtrlRead($Combo5)&'‡'&GUICtrlRead($Combo9)
            _FilterAdv($df)

    EndSwitch
EndFunc

Func _GUIEvents()
    Select
        Case @GUI_CTRLID = $GUI_EVENT_CLOSE
            Exit
        Case @GUI_CTRLID = $GUI_EVENT_MINIMIZE

        Case @GUI_CTRLID = $GUI_EVENT_RESTORE

    EndSelect

EndFunc

Thanks to Taietel for your improvement.

I'm looking the code of John Bailey, but I don't see how to adapt his script to mine..

Link to comment
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
 Share

  • Recently Browsing   0 members

    • No registered users viewing this page.
×
×
  • Create New...