![]() | 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. If the X parameter is -1 and Y parameter is -1 the ItemFromPoint property determines the handle of the item from the cursor. 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 following 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 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(X / Screen.TwipsPerPixelX, Y / Screen.TwipsPerPixelY, c, hit)
If Not (h = 0) Then
Debug.Print .Items.CellValue(h, c)
End If
End With
End SubThe 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(X / Screen.TwipsPerPixelX, Y / Screen.TwipsPerPixelY, 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 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(X / Screen.TwipsPerPixelX, Y / Screen.TwipsPerPixelY, 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 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( X, Y, &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( X, Y, &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(e.x, e.y, 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( e.x, e.y, 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( x, y, @c, @hit ) if ( .Items.DefaultItem <> 0 ) or ( c <> 0 ) wait window nowait .Items.CellValue( 0, c ) + " " + Str( hit ) endif endwith