I was having my usual stroll around and bumped on some frames discussions.
I\'m mainly a Delphi hobbyist and not a professional, so I had to learn how to use TFrames my o
This is more a negative answer, but I tried a route that included reparenting TFrames for a bit complex GUI.
At first it went fine, but when the application matured and more events started flying, I had to disable and then process messages for a while (20ms) before changing, and then still occasionally had crashes when changing frame.
One of the culprits I eventually found, TPopmenu also registers itself in global datastructures. This reduced the problems, but they were still there, so I move away from the concept.
The only problem with your approach is that you cannot add multiple instances of the same frame to a given form:
Frame1 := TMyFrame.Create(Self);
Frame1.Parent := Self;
// ...
Frame2 := TMyFrame.Create(Self); // bombs out with "a component with the name MyFrame already exists"
The workaround for his is to assign a different name for each instance:
Frame1 := TMyFrame.Create(Self)
Frame1.Parent := Self;
Frame1.Name := "FirstFrame";
// ...
Frame2 := TMyFrame.Create(Self); // works now, there is no name conflict
You can even go a step further, by registering your frames as components.
That disallows you to edit properties of components on the Frame as soon as the Frame component is on the form. But I think that is a good thing.
You need to one more thing than registering your frame as a component, as I explain in this article about Delphi – Frames as visual Components – don’t forget your Sprig!.
That knowledge is not mine: I got it from Ray Konopka during one of his sessions at the Delphi Live conference in San Jose earlier this year.
That's one way, and there is nothing wrong with it. Another way, is to to do it visually. So you can basically add the frame to a form. to do this you :