An access violation is typically accessing something that is not assigned. I see the following code:
Edit1.Text:= GetCellObject(MakeCell(0,SelectedRow[0])).Text;
Edit2.Text:= GetCellObject(MakeCell(1,SelectedRow[0])).Text;
I suppose GetCellObject returns an empty object?