property Grid.ItemFromPoint (X as OLE_XPOS_PIXELS, Y as OLE_YPOS_PIXELS, ColIndex as Long, HitTestInfo as HitTestInfoEnum) as HITEM
Retrieves the item given a point.

 TypeDescription 
   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 Sub

The 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

 

 


Send comments on this topic.
© 1999-2008 Exontrol Inc, Software. All rights reserved.