⒈所有对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
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