我要疯了!

fzymr 2001-12-13 09:28:22
在下拉数据窗口中如何能够触发键盘上下键,我自定义了pbm_dwnkey事件,但是不能触发上下键!
...全文
103 2 打赏 收藏 举报
写回复
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
PBVC 2001-12-13
  • 打赏
  • 举报
回复
学习
killerdanny 2001-12-13
  • 打赏
  • 举报
回复
在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 -
发帖
PowerBuilder

1028

社区成员

PowerBuilder 相关问题讨论
社区管理员
  • 基础类社区
  • WorldMobile
加入社区
帖子事件
创建了帖子
2001-12-13 09:28
社区公告
暂无公告