Type | Description | |||
X as OLE_XPOS_PIXELS | A single that specifies the current X location of the mouse pointer. The x values is always expressed in client coordinates. | |||
Y as OLE_YPOS_PIXELS | A single that specifies the current X location of the mouse pointer. The x values is always expressed in client coordinates. | |||
ColIndex as Long | A long expression that indicates on return the column where the point belongs. | |||
HitTestInfo as HitTestInfoEnum | A HitTestInfoEnum expression that determines on return the position of the cursor within the cell. | |||
HITEM | An item's handle where the point is. |
Use the ItemFromPoint property to get the item from the point specified by the {X,Y}. The X and Y coordinates are expressed in client coordinates, so a conversion must be done in case your coordinates are relative to the screen or to other window.
The ItemFromPoint property returns:
Use the ColumnFromPoint property to get the column from point ( when the control's header is visible ). Use the SelectableItem property to specify the user can select an item. The WordFromPoint property determines the word from the cursor.
The following VB sample prints the cell's value from the cursor:
Private Sub Grid1_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single) ' Prints the cell over the cursor ( it doesn't include the inner cells ) With Grid1 Dim c As Long, hit As Long Dim h As HITEM h = .ItemFromPoint(-1, -1, c, hit) If Not (h = 0) Then Debug.Print .Items.CellCaption(h, c) End If End With End Sub
The following VB sample prints the cell's value from the cursor ( the sample doesn't print the inner cells that are created using the SplitCell property of the Items object ) :
Private Sub Grid1_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single) ' Prints the cell over the cursor ( it doesn't include the inner cells ) With Grid1 Dim c As Long, hit As Long Dim h As HITEM h = .ItemFromPoint(-1, -1, c, hit) If Not (h = 0) Then Debug.Print .Items.CellValue(h, c) End If End With End Sub
The following VB sample prints the cell's value from the cursor ( the sample prints the caption of the inner cells too ):
Private Sub Grid1_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single) ' Prints the cell over the cursor ( it includes the inner cells ) With Grid1 Dim c As Long, hit As Long Dim h As HITEM h = .ItemFromPoint(-1, -1, c, hit) If Not (h = 0) Or Not (c = 0) Then Debug.Print .Items.CellValue(h, c) End If End With End Sub
The following VB sample displays the index of the icon being clicked, when the cell contains multiple icons:
Private Sub Grid1_MouseUp(Button As Integer, Shift As Integer, X As Single, Y As Single) Dim i As HITEM, h As HitTestInfoEnum, c As Long With Grid1 i = .ItemFromPoint(-1, -1, c, h) End With If Not (i = 0) Or Not (c = 0) Then If exHTCellIcon = (h And exHTCellIcon) Then Debug.Print "The index of icon being clicked is: " & (h And &HFFFF0000) / 65536 End If End If End Sub
The following VB sample displays the cell's value from the cursor when hovering the inner controls ( exgrid ) too:
Private Function InsideItem(ByRef gObject As Object, ByRef c As Long, ByRef hit As HitTestInfoEnum) As Long Dim i As Long i = gObject.ItemFromPoint(-1, -1, c, hit) If (i <> 0) Then If (IsEmpty(gObject.Items.ItemObject(i))) Then InsideItem = i Exit Function End If Set gObject = gObject.Items.ItemObject(i) With gObject i = gObject.ItemFromPoint(-1, -1, c, hit) InsideItem = i End With End If End FunctionAnd the MouseMove/ItemOLEEvent should look such as:
Private Sub Grid1_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single) Dim c As Long, hit As HitTestInfoEnum, i As Long Dim g As Object Set g = Grid1.Object i = InsideItem(g, c, hit) Debug.Print g.Items.CellValue(i, c) End Sub Private Sub Grid1_ItemOleEvent(ByVal Item As EXGRIDLibCtl.HITEM, ByVal Ev As EXGRIDLibCtl.IOleEvent) If (Ev.ID = -606) Then ' Inside Mouse Move Dim c As Long, hit As HitTestInfoEnum, i As Long Dim g As Object Set g = Grid1.Object i = InsideItem(g, c, hit) Debug.Print g.Items.CellValue(i, c) End If End Sub
The following C++ sample displays the cell's from the point:
void OnMouseMoveGrid1(short Button, short Shift, long X, long Y) { long c = 0, hit = 0; long h = m_grid.GetItemFromPoint( -1, -1, &c, &h ); if ( ( h != 0 ) || ( c != 0 ) ) { COleVariant vtItem( h ), vtColumn( c ); CItems items = m_grid.GetItems(); CString strOutput; strOutput.Format( "Cell: %s\n" , items.GetCellCaption( vtItem, vtColumn ) ); OutputDebugString( strOutput ); } }
The following C++ sample displays the cell's from the point:
#include "Items.h" static CString V2S( VARIANT* pv, LPCTSTR szDefault = _T("") ) { if ( pv ) { if ( pv->vt == VT_ERROR ) return szDefault; COleVariant vt; vt.ChangeType( VT_BSTR, pv ); return V_BSTR( &vt ); } return szDefault; } void OnMouseMoveGrid1(short Button, short Shift, long X, long Y) { long c = 0, hit = 0, hItem = m_grid.GetItemFromPoint( -1, -1, &c, &hit ); if ( ( hItem != 0 ) || ( c != 0 ) ) { CItems items = m_grid.GetItems(); COleVariant vtItem( hItem ), vtColumn( c ); CString strCaption = V2S( &items.GetCellValue( vtItem, vtColumn ) ), strOutput; strOutput.Format( "Cell: '%s', Hit = %08X\n", strCaption, hit ); OutputDebugString( strOutput ); } }
The following VB.NET sample displays the cell's from the point:
Private Sub AxGrid1_MouseMoveEvent(ByVal sender As Object, ByVal e As AxEXGRIDLib._IGridEvents_MouseMoveEvent) Handles AxGrid1.MouseMoveEvent With AxGrid1 Dim i As Integer, c As Integer, hit As EXGRIDLib.HitTestInfoEnum i = .get_ItemFromPoint(-1, -1, c, hit) If (Not (i = 0) Or Not (c = 0)) Then Debug.WriteLine("Cell: " & .Items.CellValue(i, c) & " Hit: " & hit.ToString()) End If End With End Sub
The following C# sample displays the cell's from the point:
private void axGrid1_MouseMoveEvent(object sender, AxEXGRIDLib._IGridEvents_MouseMoveEvent e) { int c = 0; EXGRIDLib.HitTestInfoEnum hit; int i = axGrid1.get_ItemFromPoint( -1, -1, out c,out hit ); if ( ( i != 0 ) || ( c != 0 ) ) { object cap = axGrid1.Items.get_CellValue(i, c); string s = cap != null ? cap.ToString() : ""; s = "Cell: " + s + ", Hit: " + hit.ToString(); System.Diagnostics.Debug.WriteLine(s); } }
The following VFP sample displays the cell's from the point:
*** ActiveX Control Event *** LPARAMETERS button, shift, x, y local c, hit c = 0 hit = 0 with thisform.Grid1 .Items.DefaultItem = .ItemFromPoint( -1, -1, @c, @hit ) if ( .Items.DefaultItem <> 0 ) or ( c <> 0 ) wait window nowait .Items.CellValue( 0, c ) + " " + Str( hit ) endif endwith