Delphi, во время разработки, в каком состоянии находится ComponentState, ControlState при создании с нулевым владельцем? - PullRequest
2 голосов
/ 04 апреля 2020

Если функция выполняется во время разработки и создает потомка TComponent / TControl с нулевым владельцем, следующий код в System.Classes не будет вызывать InsertComponent:

constructor TComponent.Create(AOwner: TComponent);
begin
  FComponentStyle := [csInheritable];
  if AOwner <> nil then AOwner.InsertComponent(Self);
end;

Таким образом, наш Новый объект не будет наследовать ComponentState. Что происходит с условиями, которые полагаются на флаг csDesigning для этого компонента?

if csDesigning in ComponentState

1 Ответ

2 голосов
/ 04 апреля 2020

Условие будет отображать False.

Это означает, что для вас, как для компонента-строителя, когда вы, очевидно, намеренно создаете (под) компонент без владельца, любая зависимость от того, разрабатывается ли этот компонент конечный пользователь просто не должен существовать . Если это произойдет, вам придется реализовать пользовательскую систему «находится в стадии разработки», но тогда вам лучше пересмотреть свои требования.

Для переопределенных компонентов вы можете вызвать защищенный метод SetDesigning самостоятельно.

Все это предполагает, что вы полностью осведомлены о создании подкомпонентов времени разработки без владельца, как правило, следует избегать, если у вас нет веских причин не делать этого. Помните, что компоненты на палитре компонентов всегда должны следовать механизму владельца по умолчанию.

...