Jump to content

Case Statement Question


Recommended Posts

I'm trying to get this to work or maybe someone knows a better way when I left mouse click on a item in a Treeview.

I want it to know it coming from Treeview1

Case _IsPressed(01) And _GUICtrlTreeView_GetSelected($TreeView1,_GUICtrlTreeView_GetSelection($TreeView1)) = True

msgbox(0,"Here1", _GUICtrlTreeView_GetFocused($TreeView1, _GUICtrlTreeView_GetSelection($TreeView1)) & " : " & _GUICtrlTreeView_GetSelected($TreeView1,_GUICtrlTreeView_GetSelection($TreeView1)))

_WHRead()

Case _IsPressed(01) And _GUICtrlTreeView_GetSelected($TreeView2,_GUICtrlTreeView_GetSelection($TreeView2)) = True

msgbox(0,"Here2", _GUICtrlTreeView_GetFocused($TreeView2, _GUICtrlTreeView_GetSelection($TreeView2)) & " : " & _GUICtrlTreeView_GetSelected($TreeView2,_GUICtrlTreeView_GetSelection($TreeView2)))

_WHRead()

But no matter if I clisk on Treeview1 or Treeview2 the message box still responds that I clicked on Treeview1 ????

Link to comment
Share on other sites

  • Moderators

Ghost21,

It is easiest to intercept the mouseclick like this: :x

#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>
#include <GuiTreeView.au3>

; Set a flag to show which TreeView was clicked
Global $fTV = 0

$hGUI = GUICreate("Test", 500, 500)

$hTV_1 = GUICtrlCreateTreeView(10, 10, 200, 200)
$hWndTV_1 = GUICtrlGetHandle(-1)
For $i = 1 To 5
    GUICtrlCreateTreeViewItem("Item 1" & $i, $hTV_1)
Next

$hTV_2 = GUICtrlCreateTreeView(260, 10, 200, 200)
$hWndTV_2 = GUICtrlGetHandle(-1)
For $i = 1 To 5
    GUICtrlCreateTreeViewItem("Item 2" & $i, $hTV_2)
Next

GUISetState()

; Intercept click messages
GUIRegisterMsg($WM_NOTIFY, "WM_NOTIFY")

While 1

    Switch GUIGetMsg()
        Case $GUI_EVENT_CLOSE
            Exit
    EndSwitch

    ; Is the flag set?
    If $fTV <> 0 Then
        Switch $fTV
        ; Announce it
        MsgBox(0, "Click!", "You clicked in TreeView " & $fTV)
        ; Clear flag
        $fTV = 0
    EndIf

WEnd

Func WM_NOTIFY($hWnd, $iMsg, $wParam, $lParam)

    #forceref $hWnd, $iMsg, $wParam
    Local $hWndFrom, $iIDFrom, $iCode, $tNMHDR, $hWndTreeview

    $tNMHDR = DllStructCreate($tagNMHDR, $lParam)
    $hWndFrom = HWnd(DllStructGetData($tNMHDR, "hWndFrom"))
    $iCode = DllStructGetData($tNMHDR, "Code")

    ; Has a click occured?
    Switch $iCode
        Case $NM_CLICK
            ; Which TreeView
            Switch $hWndFrom
                Case $hWndTV_1
                    ; It was TV_1
                    $fTV = 1
                Case $hWndTV_2
                    ; It was TV_2
                    $fTV = 2
            EndSwitch
    EndSwitch
    Return $GUI_RUNDEFMSG
EndFunc   ;==>WM_NOTIFY

If you are not used to coding with GUIRegisterMsg and message handlers in general, I recommend the GUIRegisterMsg tutorial in the Wiki. :P

M23

Public_Domain.png.2d871819fcb9957cf44f4514551a2935.png Any of my own code posted anywhere on the forum is available for use by others without any restriction of any kind

Open spoiler to see my UDFs:

Spoiler

ArrayMultiColSort ---- Sort arrays on multiple columns
ChooseFileFolder ---- Single and multiple selections from specified path treeview listing
Date_Time_Convert -- Easily convert date/time formats, including the language used
ExtMsgBox --------- A highly customisable replacement for MsgBox
GUIExtender -------- Extend and retract multiple sections within a GUI
GUIFrame ---------- Subdivide GUIs into many adjustable frames
GUIListViewEx ------- Insert, delete, move, drag, sort, edit and colour ListView items
GUITreeViewEx ------ Check/clear parent and child checkboxes in a TreeView
Marquee ----------- Scrolling tickertape GUIs
NoFocusLines ------- Remove the dotted focus lines from buttons, sliders, radios and checkboxes
Notify ------------- Small notifications on the edge of the display
Scrollbars ----------Automatically sized scrollbars with a single command
StringSize ---------- Automatically size controls to fit text
Toast -------------- Small GUIs which pop out of the notification area

 

Link to comment
Share on other sites

Ghost21,

It is easiest to intercept the mouseclick like this: :P

#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>
#include <GuiTreeView.au3>

; Set a flag to show which TreeView was clicked
Global $fTV = 0

$hGUI = GUICreate("Test", 500, 500)

$hTV_1 = GUICtrlCreateTreeView(10, 10, 200, 200)
$hWndTV_1 = GUICtrlGetHandle(-1)
For $i = 1 To 5
    GUICtrlCreateTreeViewItem("Item 1" & $i, $hTV_1)
Next

$hTV_2 = GUICtrlCreateTreeView(260, 10, 200, 200)
$hWndTV_2 = GUICtrlGetHandle(-1)
For $i = 1 To 5
    GUICtrlCreateTreeViewItem("Item 2" & $i, $hTV_2)
Next

GUISetState()

; Intercept click messages
GUIRegisterMsg($WM_NOTIFY, "WM_NOTIFY")

While 1

    Switch GUIGetMsg()
        Case $GUI_EVENT_CLOSE
            Exit
    EndSwitch

    ; Is the flag set?
    If $fTV <> 0 Then
        Switch $fTV
        ; Announce it
        MsgBox(0, "Click!", "You clicked in TreeView " & $fTV)
        ; Clear flag
        $fTV = 0
    EndIf

WEnd

Func WM_NOTIFY($hWnd, $iMsg, $wParam, $lParam)

    #forceref $hWnd, $iMsg, $wParam
    Local $hWndFrom, $iIDFrom, $iCode, $tNMHDR, $hWndTreeview

    $tNMHDR = DllStructCreate($tagNMHDR, $lParam)
    $hWndFrom = HWnd(DllStructGetData($tNMHDR, "hWndFrom"))
    $iCode = DllStructGetData($tNMHDR, "Code")

    ; Has a click occured?
    Switch $iCode
        Case $NM_CLICK
            ; Which TreeView
            Switch $hWndFrom
                Case $hWndTV_1
                    ; It was TV_1
                    $fTV = 1
                Case $hWndTV_2
                    ; It was TV_2
                    $fTV = 2
            EndSwitch
    EndSwitch
    Return $GUI_RUNDEFMSG
EndFunc   ;==>WM_NOTIFY

If you are not used to coding with GUIRegisterMsg and message handlers in general, I recommend the GUIRegisterMsg tutorial in the Wiki. :shifty:

M23

NOT WORKING.... :x

Link to comment
Share on other sites

  • Moderators

Ghost21,

When you reply please use the "Add Reply" button at the top and bottom of the page rather then the "Reply" button in the post itself. That way you do not get the contents of the previous post quoted in your reply and the whole thread becomes easier to read.

A debugging line was left in, sorry. This should work: :x

#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>
#include <GuiTreeView.au3>

; Set a flag to show which TreeView was clicked
Global $fTV = 0

$hGUI = GUICreate("Test", 500, 500)

$hTV_1 = GUICtrlCreateTreeView(10, 10, 200, 200)
$hWndTV_1 = GUICtrlGetHandle(-1)
For $i = 1 To 5
    GUICtrlCreateTreeViewItem("Item 1" & $i, $hTV_1)
Next

$hTV_2 = GUICtrlCreateTreeView(260, 10, 200, 200)
$hWndTV_2 = GUICtrlGetHandle(-1)
For $i = 1 To 5
    GUICtrlCreateTreeViewItem("Item 2" & $i, $hTV_2)
Next

GUISetState()

; Intercept click messages
GUIRegisterMsg($WM_NOTIFY, "WM_NOTIFY")

While 1

    Switch GUIGetMsg()
        Case $GUI_EVENT_CLOSE
            Exit
    EndSwitch

    ; Is the flag set?
    If $fTV <> 0 Then
        ; Announce it
        MsgBox(0, "Click!", "You clicked in TreeView " & $fTV)
        ; Clear flag
        $fTV = 0
    EndIf

WEnd

Func WM_NOTIFY($hWnd, $iMsg, $wParam, $lParam)

    #forceref $hWnd, $iMsg, $wParam
    Local $hWndFrom, $iIDFrom, $iCode, $tNMHDR, $hWndTreeview

    $tNMHDR = DllStructCreate($tagNMHDR, $lParam)
    $hWndFrom = HWnd(DllStructGetData($tNMHDR, "hWndFrom"))
    $iCode = DllStructGetData($tNMHDR, "Code")

    ; Has a click occured?
    Switch $iCode
        Case $NM_CLICK
            ; Which TreeView
            Switch $hWndFrom
                Case $hWndTV_1
                    ; It was TV_1
                    $fTV = 1
                Case $hWndTV_2
                    ; It was TV_2
                    $fTV = 2
            EndSwitch
    EndSwitch
    Return $GUI_RUNDEFMSG
EndFunc   ;==>WM_NOTIFY

M23

Public_Domain.png.2d871819fcb9957cf44f4514551a2935.png Any of my own code posted anywhere on the forum is available for use by others without any restriction of any kind

Open spoiler to see my UDFs:

Spoiler

ArrayMultiColSort ---- Sort arrays on multiple columns
ChooseFileFolder ---- Single and multiple selections from specified path treeview listing
Date_Time_Convert -- Easily convert date/time formats, including the language used
ExtMsgBox --------- A highly customisable replacement for MsgBox
GUIExtender -------- Extend and retract multiple sections within a GUI
GUIFrame ---------- Subdivide GUIs into many adjustable frames
GUIListViewEx ------- Insert, delete, move, drag, sort, edit and colour ListView items
GUITreeViewEx ------ Check/clear parent and child checkboxes in a TreeView
Marquee ----------- Scrolling tickertape GUIs
NoFocusLines ------- Remove the dotted focus lines from buttons, sliders, radios and checkboxes
Notify ------------- Small notifications on the edge of the display
Scrollbars ----------Automatically sized scrollbars with a single command
StringSize ---------- Automatically size controls to fit text
Toast -------------- Small GUIs which pop out of the notification area

 

Link to comment
Share on other sites

  • Moderators

Ghost21,

Your code fails because there is always a selected item in TreeView1 even when you click on the TreeView2 - so your test is always true. :P

If you do not want to use the message code, then you could test for focus like this: :shifty:

#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>
#include <GuiTreeView.au3>
#include <Misc.au3>
#include <WinAPI.au3>

$dll = DllOpen("user32.dll")

; Set a flag to show which TreeView was clicked
Global $fTV = 0

$hGUI = GUICreate("Test", 500, 500)

$hTV_1 = GUICtrlCreateTreeView(10, 10, 200, 200)
$hWndTV_1 = GUICtrlGetHandle(-1)
For $i = 1 To 5
    GUICtrlCreateTreeViewItem("Item 1" & $i, $hTV_1)
Next

$hTV_2 = GUICtrlCreateTreeView(260, 10, 200, 200)
$hWndTV_2 = GUICtrlGetHandle(-1)
For $i = 1 To 5
    GUICtrlCreateTreeViewItem("Item 2" & $i, $hTV_2)
Next

GUISetState()

While 1

    Switch GUIGetMsg()
        Case $GUI_EVENT_CLOSE
            DllClose($dll)
            Exit
    EndSwitch

    If _IsPressed(01, $dll) Then

        Switch _WinAPI_GetFocus()
            Case $hWndTV_1
                MsgBox(0, "TV 1", "")
            Case $hWndTV_2
                MsgBox(0, "TV 2", "")
        EndSwitch
        While _IsPressed(01, $dll)
            Sleep(10)
        WEnd

    EndIf

WEnd

Any use? :x

M23

Public_Domain.png.2d871819fcb9957cf44f4514551a2935.png Any of my own code posted anywhere on the forum is available for use by others without any restriction of any kind

Open spoiler to see my UDFs:

Spoiler

ArrayMultiColSort ---- Sort arrays on multiple columns
ChooseFileFolder ---- Single and multiple selections from specified path treeview listing
Date_Time_Convert -- Easily convert date/time formats, including the language used
ExtMsgBox --------- A highly customisable replacement for MsgBox
GUIExtender -------- Extend and retract multiple sections within a GUI
GUIFrame ---------- Subdivide GUIs into many adjustable frames
GUIListViewEx ------- Insert, delete, move, drag, sort, edit and colour ListView items
GUITreeViewEx ------ Check/clear parent and child checkboxes in a TreeView
Marquee ----------- Scrolling tickertape GUIs
NoFocusLines ------- Remove the dotted focus lines from buttons, sliders, radios and checkboxes
Notify ------------- Small notifications on the edge of the display
Scrollbars ----------Automatically sized scrollbars with a single command
StringSize ---------- Automatically size controls to fit text
Toast -------------- Small GUIs which pop out of the notification area

 

Link to comment
Share on other sites

This is the code I have right now and everytime I click it seems like its one click behind showing what I'm looking for

Func _WM_NOTIFY($hWnd, $iMsg, $iwParam, $ilParam)
    #forceref $hWnd, $iMsg, $iwParam
    Local $hWndFrom, $iCode, $tNMHDR, $hWndListView, $hWndListView2, $hWndTreeview
    $hWndListView = $Listview
    $hWndListView2 = $Listview2
    If Not IsHWnd($hWndListView) Then $hWndListView = GUICtrlGetHandle($Listview)
    If Not IsHWnd($hWndListView2) Then $hWndListView2 = GUICtrlGetHandle($Listview2)
    $tNMHDR = DllStructCreate($tagNMHDR, $ilParam)
    $hWndFrom = HWnd(DllStructGetData($tNMHDR, "hWndFrom"))
    $iCode = DllStructGetData($tNMHDR, "Code")
Switch $iCode
        Case $NM_CLICK
            Switch $hWndFrom
                Case $TreeView1_Handle
                    $Selected = _GUICtrlTreeView_GetSelection($TreeView1)
                    $pc = _GUICtrlTreeView_GetText($TreeView1, $Selected)
                    _WHRead($pc)
                    $fTV = 1
                Case $TreeView2_Handle
                    $Selected = _GUICtrlTreeView_GetSelection($TreeView2)
                    $pc = _GUICtrlTreeView_GetText($TreeView2, $Selected)
                    _WHRead($pc)
                    $fTV = 2
            EndSwitch
    Switch $hWndFrom
        Case $hWndListView
            Switch $iCode
                Case $LVN_COLUMNCLICK
                    Local $tInfo = DllStructCreate($tagNMLISTVIEW, $ilParam)
                    _GUICtrlListView_SortItems($hWndFrom, DllStructGetData($tInfo, "SubItem"))
            EndSwitch
        Case $hWndListView2
            Switch $iCode
                Case $LVN_COLUMNCLICK
                    Local $tInfo = DllStructCreate($tagNMLISTVIEW, $ilParam)
                    _GUICtrlListView_SortItems($hWndFrom, DllStructGetData($tInfo, "SubItem"))
            EndSwitch
        EndSwitch
        EndSwitch
Return $__LISTVIEWCONSTANT_GUI_RUNDEFMSG
    Return $GUI_RUNDEFMSG
EndFunc   ;==>_WM_NOTIFY

Any help would be great ...

Link to comment
Share on other sites

  • Moderators

Ghost21,

Where did the ListViews come from? :x

If you want help with the WM_NOTIFY handler, please post all your code that generates the GUI and the controls. You cannot expect anyone to produce all that as well as debugging. :P

M23

Public_Domain.png.2d871819fcb9957cf44f4514551a2935.png Any of my own code posted anywhere on the forum is available for use by others without any restriction of any kind

Open spoiler to see my UDFs:

Spoiler

ArrayMultiColSort ---- Sort arrays on multiple columns
ChooseFileFolder ---- Single and multiple selections from specified path treeview listing
Date_Time_Convert -- Easily convert date/time formats, including the language used
ExtMsgBox --------- A highly customisable replacement for MsgBox
GUIExtender -------- Extend and retract multiple sections within a GUI
GUIFrame ---------- Subdivide GUIs into many adjustable frames
GUIListViewEx ------- Insert, delete, move, drag, sort, edit and colour ListView items
GUITreeViewEx ------ Check/clear parent and child checkboxes in a TreeView
Marquee ----------- Scrolling tickertape GUIs
NoFocusLines ------- Remove the dotted focus lines from buttons, sliders, radios and checkboxes
Notify ------------- Small notifications on the edge of the display
Scrollbars ----------Automatically sized scrollbars with a single command
StringSize ---------- Automatically size controls to fit text
Toast -------------- Small GUIs which pop out of the notification area

 

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...