【PB】如何捕捉DropDownDW列的上下键事件

DDDW 事件概述
  1、所有对DDDW的操作都通过触发pbm_command事件完成
  1)、在PB的用户事件中,大多数事件对应的Windows 事件都有两个参数:lparam 和 wparam,而在PB中,pbm_command没有参数,但可以通过message对象的两个属性取得Windows事件对应的Event ID,这两个属性就是: LongParm 和 WordParm。
  LongParm 包含DDDW的Handle,用intLow()可取得其Handle
  WordParm 包含对DDDW的操作,用intHigh()可取得其Event ID
  2)、在PB中,pbm_command带3个参数,其中hwndchild(long)与notificationcode(unsignedinteger)即DDDW的Handle和Event ID。

  2、DDDW 的Event ID 列表:
EventEvent ID备注
Clicked1281 
RowFocusChanged2048 
RightMouseButtonDown2314 
Left Button Up2313 
Retreive End769 
MouseMove2311 
RowFocusChanged2048至于问题中的上下滚动,倘为键盘,将导致行焦点改变(此外,还导致一个ID=2049的事件)
PageUp/PageDown2339鼠标点击滚动条上下按钮

  3、根据上述列表,就可以在 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可以直接使用其参数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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值