We expose TUIState.DesignUrl (and some friends) as a more comfortable alternative to the TUIState.InsertUserInterface method. InsertUserInterface
was a method used by many CGE applications to load a designed UI into a TUIState. Advantages of the new TUIState.DesignUrl
approach:
-
It looks simpler. You do not need to think about
UiOwner
andFreeAtStop
parameters passed toInsertUserInterface
. You haveTUIState.DesignedComponent
to replace previousUiOwner.FindRequiredComponent
. -
It allows to trivially use new DesignPreload property, a powerful way to load state data in the constructor (instead of at start), which is sometimes desirable — this way state can later start instantly, albeit at the cost of longer application initialization time and larger memory usage (e.g. textures and images used by state are preloaded in memory).
All of CGE examples and templates have been adjusted to use the new approach.
Previous code looked like this:
procedure TStateMenu.Start; var UiOwner: TComponent; begin inherited; { Load designed user interface } InsertUserInterface('castle-data:/gamestatemenu.castle-user-interface', FreeAtStop, UiOwner); { Find components, by name, that we need to access from code } MyButton := UiOwner.FindRequiredComponent('MyButton') as TCastleButton; end;
New code looks like this:
constructor TStateMenu.Create(AOwner: TComponent); begin inherited; DesignUrl := 'castle-data:/gamestatemenu.castle-user-interface'; // DesignPreload := true; // use this to preload design in constructor end; procedure TStateMenu.Start; begin inherited; { Find components, by name, that we need to access from code } MyButton := DesignedComponent('MyButton') as TCastleButton; end;