Primero aclarar que ya me parece bien como lo propones, pero como pides si alguien sabe alguna otra forma te digo como lo hice yo.Lo hice mediante un TTimer.
1- Declaro una función con lo que quiero que haga el botón.
2- En el evento OnMouseDown del botón llamo a esa función y activo el timer con un intervalo inicial.
3- En el evento OnTimer cambio el intervalo del timer para las repeticiones y llamo a la función que realiza la acción.
4- En el evento OnMouseUp desactivo el timer.
Bueno ahí va otra manera.