What causes the behavior is the VCL parental control mechanism. I donโt know the exact reason, it will take some time to understand this, I think, since this is a somewhat complicated mechanism.
You can get the desired behavior using parental control using api:
procedure TForm1.Button1Click(Sender: TObject); var Frm : TForm; begin Frm := TForm3.Create( Self );
You will probably lose some synchronization with VCL, such as parent dependent properties, binding, ownership, etc. This can even be problematic with regards to api, for example, the missing WS_CHILD flag ... Try this and see if it works for your needs.
To have more than one active form, you can tell each of them: "/ p>
SendMessage(Frm.Handle, WM_NCACTIVATE, WPARAM(True), 0);
When any form receives this message, it will redraw its non-client area to reflect its (presumably) activated status. Passing false for wParam will do the opposite.
source share