# Function Reference

# _GUICtrlHeader_EditFilter

Starts editing the specified filter

#include <GuiHeader.au3>
_GUICtrlHeader_EditFilter ( $hWnd, $iIndex [, $bDiscard = True] )

## Parameters

$hWnd | Handle to the control
$iIndex | 0-based item index
$bDiscard | [optional] Flag that specifies how to handle the user's editing changes. Use this flag to specify what to do if the user is in the process of editing the filter when the message is sent: True - Discard the changes made by the user False - Accept the changes made by the user

## Return Value

Success: | True.
Failure: | False.

## Related

_GUICtrlHeader_ClearFilter, _GUICtrlHeader_ClearFilterAll, _GUICtrlHeader_GetFilterText

## Example

### Example 1

    #include "Extras\HelpFileInternals.au3"
    #include "Extras\WM_NOTIFY.au3"

    #include <GUIConstantsEx.au3>
    #include <GuiHeader.au3>
    #include <StructureConstants.au3>
    #include <WindowsStylesConstants.au3>

    Global $g_hHeader

    Example()

    Func Example()
        ; Create GUI
        Local $hGUI = GUICreate("Header Edit/Get Filter (v" & @AutoItVersion & ")", 450, 300, 100, 100)
        $g_hHeader = _GUICtrlHeader_Create($hGUI, $HDS_FILTERBAR)
        _MemoCreate(2, 52, 444, 220)

        GUISetState(@SW_SHOW)

    ; ANSI Format
    ;~  _GUICtrlHeader_SetUnicodeFormat($g_hHeader, False)

        ; Add columns
        _GUICtrlHeader_AddItem($g_hHeader, "Column 0", 100)
        _GUICtrlHeader_AddItem($g_hHeader, "Column 1", 100)
        _GUICtrlHeader_AddItem($g_hHeader, "Column 2", 100)
        _GUICtrlHeader_AddItem($g_hHeader, "Column 3", 100)

        ; Set up filters
        _GUICtrlHeader_EditFilter($g_hHeader, 0)
        ControlSend("[ACTIVE]", "", "", "Filter 0{ENTER}")
        _MemoMsgBox($MB_SYSTEMMODAL, "Information", "Filter 0 Changed")

        Local $sFilter = _GUICtrlHeader_GetFilterText($g_hHeader, 0)
        ConsoleWrite('@@ Debug(' & @ScriptLineNumber & ') : $sFilter = ' & $sFilter & @CRLF & '>Error code: ' & @error & '    Extended code: ' & @extended & ' (0x' & Hex(@extended) & ')' & @CRLF)

        _GUICtrlHeader_EditFilter($g_hHeader, 1)
        ControlSend("[ACTIVE]", "", "", "Filter 1{ENTER}")
        _MemoMsgBox($MB_SYSTEMMODAL, "Information", "Filter 1 Changed")

        _MemoWrite("Filter Text of Column 1 : " & _GUICtrlHeader_GetFilterText($g_hHeader, 1))

        ; Clear first filter
        _GUICtrlHeader_ClearFilter($g_hHeader, 0)
        _MemoMsgBox($MB_SYSTEMMODAL, "Information", "Filter 0 Cleared")

        ;Register WM_NOTIFY to handle $HDN_FILTERBTNCLICK messages
        _WM_NOTIFY_Register($_g_idLst_Memo)

        _MemoMsgBoxStatus("", -1, $hGUI) ; no more action, wait GUI for closing

    EndFunc   ;==>Example

    Func WM_NOTIFY($hWnd, $iMsg, $wParam, $lParam)
        #forceref $hWnd, $iMsg, $wParam
        Local $tNMHDFILTERBTNCLICK

        Local $tNMHDR = DllStructCreate($tagNMHDR, $lParam)
        Local $hWndFrom = HWnd(DllStructGetData($tNMHDR, "hWndFrom"))
        Local $iCode = DllStructGetData($tNMHDR, "Code")
        Local $iColumn, $sText
        Switch $hWndFrom
            Case $g_hHeader
                Switch $iCode
                Case $HDN_FILTERBTNCLICK ; Notifies the header control's parent window when the filter button is clicked or in response to an $HDM_SETITEM message
                        $tNMHDFILTERBTNCLICK = DllStructCreate($tagNMHDFILTERBTNCLICK, $lParam)
                        $iColumn = DllStructGetData($tNMHDFILTERBTNCLICK, "Item")

                        $sText = " Text = " & _GUICtrlHeader_GetFilterText($g_hHeader, $iColumn)
                        _WM_NOTIFY_DebugEvent("$HDN_FILTERBTNCLICK", $tagNMHDFILTERBTNCLICK, $lParam, "IDFrom,,Item", $sText)

                        ;Return True  ; An $HDN_FILTERCHANGE notification will be sent to the header control's parent window
                        ; This notification gives the parent window an opportunity to synchronize its user interface elements
                        Return False ; If you do not want the notification sent

                    Case $HDN_FILTERCHANGE ; Notifies the header control's parent window that the attributes of a header control filter are being changed or edited
                        $tNMHDFILTERBTNCLICK = DllStructCreate($tagNMHDFILTERBTNCLICK, $lParam)
                        $iColumn = DllStructGetData($tNMHDFILTERBTNCLICK, "Item")

                        $sText = " Text = " & _GUICtrlHeader_GetFilterText($g_hHeader, $iColumn)
                        _WM_NOTIFY_DebugEvent("$HDN_FILTERCHANGE", $tagNMHDFILTERBTNCLICK, $lParam, "IDFrom,,Item", $sText)

                        ; no return value
                EndSwitch
        EndSwitch
        Return $GUI_RUNDEFMSG
    EndFunc   ;==>WM_NOTIFY

### Example 2 : Header Edit/Get EditFilter to an External process

    #include "Extras\HelpFileInternals.au3"

    #include <GuiHeader.au3>

    Example()

    Func Example()
        Local $sFromTo
        Local $hWin = _MemoRunAU3OutProcess($sFromTo, True)

        Local $hHeader = _MemoCreateOutProcess($hWin, "SysHeader32", 3, $sFromTo)

        _MemoWrite("<<< Start Edit Filter 2" & @CRLF)

        _GUICtrlHeader_EditFilter($hHeader, 2)
        Send("<<< Filter 2")
        Send("{ENTER}")
        _MemoWrite("Filter 2 Changed" & @CRLF)

        _GUICtrlHeader_GetFilterText($hHeader, 2)
        If @error Then _MemoWrite("_GUICtrlHeader_GetFilterText()" & " @error = " & @error & @CRLF & _
                @TAB & "cannot be retrieved by an external process")

        _MemoMsgBoxStatus("", Default, $hWin) ; no more action, wait GUI for closing, close also OutProcess GUI

    EndFunc   ;==>Example