Realmente no tienes que esconder todos los
frames cada vez, sino únicamente el que estuviere visible al momento de activar otro. Una solución podrías ser la de llevar una variable
que apunte al frame activo. Cuando muestres un frame pondrías algo como:
Código Delphi
[-]
FrameActivo.Hide;
FrameAMostrar.Show;
FrameActivo := FrameAMostrar;
// Saludos