Capturar el OnMouseDown (esto es, redefinir el método MouseDown) del formulario base no te sirve porque sólo captarías los mensajes directos sobre la forma y no sobre componentes que estén en la forma.
La manera que se me ocurre (probada aunque no comprobada) es colocar una componente TApplicationEvents en el formulario base y en su evento OnMessage poner:
Código:
if
((Msg.message >= WM_MOUSEFIRST) and (Msg.message <= WM_MOUSELAST)) and
((Msg.hwnd = Handle) or IsChild(Handle, Msg.hwnd))
then
begin
{ Aquí el código que quieras }
end;
ApplicationEvents captura
todos los mensajes dirigidos a la aplicación, incluídos mesajes a otras ventanas no heredadas de tu formulario base. Por ello debes verificar que Msg.hwnd es el "handle" de la ventana o de algún componente dentro de ella.
Ten en cuenta sin embargo, que el código que pongas para manejar los mensajes debe ser lo más rápido posible, de lo contrario tu aplicación se puede alentar bastante.
// Saludos