找回密码
 加入
搜索
查看: 9267|回复: 11

[AU3基础] [已解决]ListView控件项目怎样通过键盘上下键来触发事件

  [复制链接]
发表于 2013-4-10 20:35:03 | 显示全部楼层 |阅读模式
本帖最后由 Darren_Lin 于 2013-4-11 21:07 编辑

大家好,有一个问题请教大家。
如下窗口:


当光标在ListView的选项中时,按键盘上下键来触发读取高度选项的数据,每移动一次,读取一次,弹出msgbox窗口,显示当然高亮的项目为哪个。望大家支招解决。

找到以下函数,但不知道是否能用上。
Func WM_NOTIFY($hWndGUI, $MsgID, $WParam, $LParam)
        Local $tagNMHDR, $Event, $hWndFrom, $IDFrom
        Local $tagNMHDR = DllStructCreate("int;int;int", $LParam)
        If @error Then Return $GUI_RUNDEFMSG
        $IDFrom = DllStructGetData($tagNMHDR, 2)
        $Event = DllStructGetData($tagNMHDR, 3)
        $tagNMHDR = 0
        Switch $IDFrom;选择产生事件的控件
                Case $gu_ListView1
                        Switch $Event; 选择产生的事件
                                Case $NM_CLICK ; 左击
                                        
                                Case $NM_DBLCLK ; 双击
                                        
                                Case $NM_RCLICK ; 右击
                                        
                                Case $LVN_HOTTRACK ;鼠标移到Listview项目上方
                                        
                              Case $LVN_KEYDOWN

                        EndSwitch
        EndSwitch
        Return $GUI_RUNDEFMSG
EndFunc   ;==>WM_NOTIFY
上面函数Case $LV_HEYDOWN产生事件是按键被按下,请问可以指定哪个按键被键下才产生此事件吗?

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?加入

×
发表于 2013-4-10 21:28:21 | 显示全部楼层
#include <GuiListView.au3>
$GUI = GUICreate('Test', 400, 300)
$hl = GUICtrlCreateListView('项目', 5, 5, 390, 290)
For $i = 1 To 5
        GUICtrlCreateListViewItem('item' & $i, $hl)
Next
$c_index = -1
GUISetState()
Do
        _Msg()
Until GUIGetMsg() = -3

Func _Msg()
        $index = _GUICtrlListView_GetSelectedIndices($hl, False)
        If $index <> '' And $c_index <> $index Then
                ConsoleWrite($index & @CRLF)
                MsgBox(0, '', _GUICtrlListView_GetItemText($hl, Number($index)), 0, $GUI)
                $c_index = $index
        EndIf
EndFunc
发表于 2013-4-10 21:39:03 | 显示全部楼层
Case  $LVN_ITEMCHANGED
 楼主| 发表于 2013-4-10 21:56:19 | 显示全部楼层
回复 2# user3000


    User3000晚上好,谢谢你提供的答案,让我找到了问题解决的思路。
  我有一个函数ConsoleWrite不懂,看了帮助文档也不清楚,“STDOUT 流”是什么来的。如果你有空的话,烦请你解释一下,谢谢。
 楼主| 发表于 2013-4-10 22:01:51 | 显示全部楼层
回复 3# afan


    版本晚上好,再请问一下,如何可以判断在Listview框中鼠标左键松开,或右键松开时的事件。
   鼠标左键松开是Case ?;鼠标右键松开是Case ?。还是根本就没有这两个事件的判断,谢谢。
发表于 2013-4-10 22:12:45 | 显示全部楼层
回复 5# Darren_Lin


    一般就是使用
Case $NM_CLICK ; 左击
Case $NM_RCLICK ; 右击
不必纠结弹起消息,貌似它们都是在弹起后才触发
 楼主| 发表于 2013-4-10 22:49:25 | 显示全部楼层
回复 6# afan


    原来是这样,谢谢版本。
发表于 2013-4-11 06:25:54 | 显示全部楼层
回复 4# Darren_Lin

我的"方案"是幼稚的思考方法,3楼A大的才是正解思路.

“STDOUT 流” ?  可以看作计算机处理数据时即时向外输出的数据,只能当时'抓取',错过就没有了.

为什么多一个 ConsoleWrite ?  因为之前我没加 Number 函数, 得不到正确结果, 就用它来检测获取的索引值.( 当然你可以用MSGBOX来作这个工作)
其实....是我忘删除了,更是我AU3功夫落下了!
 楼主| 发表于 2013-4-11 07:04:14 | 显示全部楼层
回复 8# user3000


    谢谢你的解答,虽然你说是幼稚的思考方法,但我觉得可以解决问题就是正确的方法,不分幼稚或不稚,因为当程序编译出来使用,使用者又不知道编写的代码是怎样的。你们都很厉害。
发表于 2013-4-15 17:39:06 | 显示全部楼层
学习了,谢谢。
发表于 2013-4-27 20:59:49 | 显示全部楼层
值得学习。。。。控件怎么把握才好啊。。
发表于 2014-4-6 17:56:31 | 显示全部楼层
这个实现虽然感觉不是很正规,但很巧妙。
您需要登录后才可以回帖 登录 | 加入

本版积分规则

QQ|手机版|小黑屋|AUTOIT CN ( 鲁ICP备19019924号-1 )谷歌 百度

GMT+8, 2024-11-17 01:42 , Processed in 0.079778 second(s), 24 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表