Hola elbilla.
Para publicar trozos de código, te recomiendo el uso de la etiqueta [ delphi ], del que podes aprender en el mensaje inicial de este foro.
Creo que lo que está fallando, es que desactivas el timer despues del showmessage, que no retorna hasta que el usuario presione ok. Si el usuario tarda mas del intervalo del timer, pues el evento se disparará por lo menos otra vez. Considero que basta invertir esas líneas para encontrar el comportamiento adecuado.
Código Delphi
[-]
else begin
Timer1.Enabled := False;
ShowMessage('mensaje');
..
end;
Notas la diferencia con el uso de la etiqueta?
Hasta luego.