Почему действие по умолчанию для формы является caHide? - PullRequest
0 голосов
/ 08 февраля 2020

Почему, когда пользователь нажимает кнопку закрытия формы, действием по умолчанию является caHide, а не caFree?
С точки зрения программирования это кажется настолько интуитивно понятным.
Существует скрытая причина такого поведения?

1 Ответ

2 голосов
/ 09 февраля 2020

Как сказал Serta c, это происходит потому, что IDE Delphi ожидает, что формы будут созданы в начале вашего приложения и сохраняться там, пока приложение живо. То есть, когда вы создаете новую форму, в единице формы создается глобальная переменная для этой формы. Эта переменная инициализируется новой формой в главном блоке проекта с использованием Application.CreateForm(...). Там нет явных вызовов бесплатно, эти формы уничтожаются в конце приложения во время TApplication.Destroy. С действием по умолчанию caHide это работает просто отлично - вы получаете действительный экземпляр формы в начале, и этот экземпляр остается действительным до конца приложения. Если бы действием по умолчанию было caFree, содержимое глобальной переменной было бы недействительным при первом закрытии формы (поскольку нет способа узнать, какое место должно быть установлено на nil), и вы получили бы указатель, который выглядит допустимо, но может вызвать различные проблемы (EAccessViolation, если вам повезет, "случайная" перезапись памяти, если нет) при использовании.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...