You can achieve this(in VFP8 natively, with AllowCellSelection property), but is complicated with versions lower than 8. You can put a transparent shape over a grid and determine with grid's GridHitTest method where the user has clicked. The code must be in shape click or double click method. Then you can call ActivateCell() method of grid or whatever.
It will be nice if grid row can be highlighted.
Look at the code below, it is a very simple way to have grid row highlighted.
In your grid Init put code like...
grid_hgl_prepare(this,rgb(0,0,0),rgb(187,233,255),'')
grid_highlight(this)
and in grid AfterRowColChange only
grid_highlight(this)
Procedure grid_hgl_prepare
parameters toGridRef,tnSelForeColor,tnSelBackColor,tcPreservedColumns
local lnForeColor,lnBackColor,i
toGridRef.addproperty('GridRecno',0)
lnForeColor = toGridRef.ForeColor
lnBackColor = toGridRef.BackColor
tcPreservedColumns = IIF(VARTYPE(tcPreservedColumns)#'C','',tcPreservedColumns)
FOR i=1 TO toGridRef.ColumnCount
IF !toGridRef.Columns(i).name $ tcPreservedColumns
toGridRef.Columns(i).DynamicBackColor = ;
"iif(this.GridRecno = RECNO(),"+alltrim(str(tnSelBackColor))+","+alltrim(str(lnBackColor))+"

"
toGridRef.Columns(i).DynamicForeColor = ;
"iif(this.GridRecno = RECNO(),"+alltrim(str(tnSelforeColor))+","+alltrim(str(lnForeColor))+"

"
ENDIF
ENDFOR
RETURN
Procedure Grid_highlight
parameters toGridRef
if recno()# toGridRef.GridRecno
toGridRef.GridRecno = recno()
toGridRef.visible = .t.
endif