I find the TStringGrid a very powerful tool but it's giving me some grief at the moment

I'm using it to store a history of inputs to my Triangle program so that I can go back to previous solutions by simply [clicking] on the [row] to re-enter the original values and then either re-solve or modify as required. The option to [Delete] has also been incorporated - I just click on a paricular column and test for that to determine 'select' or 'delete' - naturally I check that 'Delete' is intentional!
Early on I found that the procedure was being activated whilst the 'History' was being read and I could get around that with a simple 'If Reading' flag. It was also being triggered when the grid was hidden - again that needed a flag gleaned from the state of the activation button.
All seemed to be working well - ie. clicking on a row inserted the data correctly and clicking on the particular column offered the [Delete] option BUT after a 'delete' and without further mouse activity near the Grid the [Delete?] option repeatedly appears.
In addition, the [Hint] - which simple reminds the user which column to click for a 'Delete' - doesn't show when a mouse pointer is hovering - I HAVE made [ShowHint] True !

What I cannot understand is why the 'OnSelectCell' event is triggered when the Grid isn't visible - and as such there cannot be a 'select' event.
During debugging I've found that at the start of the program the proc is called 5 times before the form is even created ?????
There must be something that I'm missing - but it's beyond my feable brain !
Here is the Proc :-
procedure TTriangleSolution.HistorySelectCell(Sender: TObject; aCol, aRow: Integer; var CanSelect: Boolean);
var
S : TStringArray;
R,Q : Word;
// Select or Delete the row dependinig upon which column is [clicked]
begin
if Reading or (ShowHistory.Caption[1] = 'S') then Exit
else
begin
If aCol = 3 then
begin
if MessageDlg('', 'DELETE this line ?', mtConfirmation,
[mbYes, mbNo],0) = mrYes
then
begin
R := aRow;
While R < History.RowCount-1 do
begin
Q := R+1;
with History do
begin
Cells[0,R] := Cells[0,Q];
Cells[1,R] := Cells[1,Q];
Cells[2,R] := Cells[2,Q];
Cells[3,R] := Cells[3,Q];
Cells[4,R] := Cells[4,Q];
Cells[5,R] := Cells[5,Q];
Cells[6,R] := Cells[6,Q];
end;
inc(R);
end;
History.RowCount := History.RowCount-2;
MaxHist := History.RowCount;
end;
end
else
begin
with TriangleSolution do
begin
S :=History.Cells[0,aRow].Split(['·']);
Val_A.Caption := S[0]; Val_A1.Caption := S[1];
S :=History.Cells[1,aRow].Split(['·']);
Val_B.Caption := S[0]; Val_B1.Caption := S[1];
S :=History.Cells[2,aRow].Split(['·']);
Val_C.Caption := S[0]; Val_C1.Caption := S[1];
S :=History.Cells[4,aRow].Split(['·']);
Val_Alpha.Caption := S[0]; Val_Alpha1.Caption := S[1];
S :=History.Cells[5,aRow].Split(['·']);
Val_Beta.Caption := S[0]; Val_Beta1.Caption := S[1];
S :=History.Cells[6,aRow].Split(['·']);
Val_Gamma.Caption := S[0]; Val_Gamma1.Caption := S[1];
end;
HistSelect := true;
end;
end;
end;
I know I could use a loop for the delete part but there's only 7 items.