I have a little question (intellectual curiosity), I have noticed that if a control (of a form) is declared as private and create it dinamically, you can access outside the class with FindComponent.
Is it logically correct?
That happens because when the control is created, it registers itself into its owners list of owned components. And hence there are multiple references to the control.
The reference to the control in the form's class is indeed private. But the reference to the control that the form holds in its Components list is public.
Logically this is very similar to exposing the private variable through a property:
property MyPublicProp: TMyControl read FMyPrivateField;
Although you don't directly expose the private field like this, the control does so indirectly by registering with the owning form.