1. You could use TPageControl.
2. Each component should have BringToFront method, to change Z-order.
- Problem with this would be, that you can still tab-cycle through the components that are visible behind, enter-click the buttons and type text in hidden edits.
3. You can save into variable the component that was currently active, and hide only that one, when new one is set. Then change the active variable again.