【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 列表:
Event Event ID 备注
Clicked 1281  
RowFocusChanged 2048  
RightMouseButtonDown 2314  
Left Button Up 2313  
Retreive End 769  
MouseMove 2311  
RowFocusChanged 2048 至于问题中的上下滚动,倘为键盘,将导致行焦点改变(此外,还导致一个ID=2049的事件)
PageUp/PageDown 2339 鼠标点击滚动条上下按钮

  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

你可能感兴趣的:(【PB】如何捕捉DropDownDW列的上下键事件)