Yes, I encountered the same problem...Took me a few hours to find solution. Problem with OnSelection is that it already starts actions on mousedown. When you have some time consuming procedures it seems to get messed up. I noticed when you pause long enough between mousedown and mouseup, the problem goes away. But that is not how a normal user clicks. So we need a solution....
My solution was to use the MouseUp event and translate X,Y to a row number with aStringrid.MouseToCell(X, Y, Col, Row), then execute the actions. (declare variables Col, Row before using the procedure).
Remember you also have to do this for KeyUp, because when not using OnSelection this also needs a handler. Just call your action with aStringrid.Row, that variable holds the selected row.