You must do something like this:

[pascal]

//---------------
// game loop code
//----------------
var
PrevIsColliding, IsColliding: boolean;
HitCount: integer;
begin
//save previous collision state
PrevIsColliding := IsColliding;

//somewhere in main game loop
IsColliding := false;

//check the collision for each sprite, so that IsColliding might change to true
checkCollision;

//compare old collision state with new one
if PrevIsColliding <> IsColliding then
if IsColliding then Inc(HitCount);
end;

procedure TMySprite.DoCollision( blablabla )
begin
isColliding := true;
end;
[/pascal]

I hope you understand this code. If not, i will explain it now.

You must keep track of the Collision state with the "IsCollision" variabele. You must also save the collision state from the last game loop execution. When "PrevIsCollision" and "IsCollision" are not equal, something has happened. e.g The collision has started, or the collision has stopped.

You only have to check, which one of the two things happened. When IsCollision is true, PrevIsCollision should be false, which means that the collision has just begun, because during the last game loop, no collision was detected (PrevIsCollision = false).

Hope you understand this.

Good luck