What is the accepted way to use frames in Delphi?

后端 未结 4 751
轻奢々
轻奢々 2021-02-14 23:55

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

相关标签:
4条回答
  • 2021-02-15 00:36

    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.

    0 讨论(0)
  • 2021-02-15 00:38

    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
    
    0 讨论(0)
  • 2021-02-15 00:42

    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.

    0 讨论(0)
  • 2021-02-15 00:44

    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 :

    • Create your Frame.
    • Go to the form you wish to put your frame on.
    • Add a Frames component (Standard Tab)
    • Choose your frame from the drop down.
    • That's it!
    0 讨论(0)
提交回复
热议问题