我要疯了!
在下拉数据窗口中如何能够触发键盘上下键,我自定义了pbm_dwnkey事件,但是不能触发上下键! 问题点数:38、回复次数:2Top
1 楼killerdanny(堕落的瓦拉斯塔兹)回复于 2001-12-13 22:01:24 得分 38
在PB的数据窗口中,如何捕捉dropdowndw列的上下键事件
Posted by janjun on August 13, 1999 at 08:57:45:
In Reply to: 在PB的数据窗口中,如何捕捉dropdowndw列的上下键事件!
■ DDDW 事件概述
⒈所有对DDDW的操作都通过触发pbm_command事件完成
① 在PB的用户事件中,大多数事件对应的Windows 事件都有两个参数:lparam 和 wparam,而在PB5.0中,pbm_command没有参数,但可以通过message对象的两个属性取得Windows事件对应的Event ID,这两个属性就是: LongParm 和 WordParm。
LongParm 包含DDDW的Handle,用intLow()可取得其Handle
WordParm 包含对DDDW的操作,用intHigh()可取得其Event ID
② 在PB6.0(^)中,pbm_command带3个参数,其中hwndchild(long)与notificationcode(unsignedinteger)即DDDW的Handle和Event ID。
⒉DDDW 的Event ID 列表:
Event Event ID
-------------------------------
Clicked 1281
RowFocusChanged 2048
RightMouseButtonDown 2314
Left Button Up 2313
Retreive End 769
MouseMove 2311
...
至于问题中的上下滚动,倘为键盘,将导致行焦点改变(此外,还导致一个ID = 2049的事件):
RowFocusChanged 2048
倘为鼠标点击滚动条上下按钮:
PageUp/PageDown 2339
⒊根据上述列表,就可以在 pbm_command 事件中判断对DDDW做了何种操作:
DataWindowChild ldwc_Child
GetChild( "Column", ldwc_Child )
IF IntLow( Message.Longparm ) = Handle( ldwc_Child ) THEN
CHOOSE CASE IntHigh( Message.Wordparm )
CASE 2048 // RowFocusChanged on DDDW
CASE 1281 // Clicked
CASE 2314 // Right Mouse Button Clicked
CASE 2311 // MouseMove
END CHOOSE
END IF
* PB 6.0(^)可以直接使用其参数hwndchild、notificationcode代替其中的intLow(Message.LongParm)和intHigh(Message.WordParm)。
■ 一个简单例子 -- 自动选择DDDW
DataWindowChild ldwc_Child
String ls_Pointer
Long ll_Row, ll_Lparam, ll_Lparam
ll_Lparam = Message.LongParm
ll_Lparam = Message.WordParm
GetChild( "status", ldwc_Child ) // Replace the column name "status" as you needed
IF IntLow( ll_Lparam) = Handle( ldwc_Child ) THEN
CHOOSE CASE IntHigh( ll_Lparam )
CASE 2311 // MouseMove
// Get the object at pointer and parse out the Row #
ls_Pointer = ldwc_Child.GetObjectAtPointer()
ll_Row=Long( Mid( ls_Pointer, Pos( ls_Pointer, "~t" ) + 1 ))
// If the Row is different then highlight it
IF ldwc_Child.GetRow() <> ll_Row AND ll_Row > 0 THEN
ldwc_Child.ScrollToRow( ll_Row )
END IF
END CHOOSE
END IF
■ 相关文档
- 据说在《January 1995 PBDJ》(PowerBuilder Developer Journal)有揭露dddw这方面的内容, 遗憾的是很需要一些美元。
http://www.sys-con.com/pbdj/index2.html
- 第二个地方是 Steve Benfield的主页
http://www.stevebenfield.com/
本文上述分析和样例即主要根据Steve Benfield的应用实例而来。
- 另外Powersoft用户年会(Powersoft Conference) '97似乎也有相关的一些应用例子。
上述链接中,有的似乎已经丢失了关于DDDW的链接,但对于PB开发者来说,无论如何还是值得去lou上一眼的.
- PBDevs, 1999 -
Top
2 楼PBVC(圆砣)回复于 2001-12-13 22:13:16 得分 0
学习Top




