Увидел на DelphiMaster, решил сохранить себе
Вот несколько принципов, соблюдая которые навсегда избавишься от проблем “видимости”:
1. Объекты, переменные, методы ОБЩЕГО ПОЛЬЗОВАНИЯ всегда размещать в датамодуле, причем сам код датамодуля не должен “ведать” ни о каких переменных извне – все, что ему надо, должно передаваться в параметрах.
Ссылку на датамодуль располагать в инфтерфейсной части всех юнитов – “клиентов”, там, где перечисляются VCL-ные юниты. Датамодуль так же, как и гл.формы, должен быть включен в список автосоздаваемых.2. Главная форма не должна обращаться ни к какому юниту, кроме датамодуля, ПО ИМЕНИ. Только по явной ссылке, используя разыменование типа. Уместно иногда вместо прямых вызовов внешних процедур использовать сообщения – при этом нет необходимости делать методы сторонних юнитов видимыми (uses в implementation) – такая технология удобна, например, при реализации общего функционала в MDI – приложениях.
3. “Дочерние” формы могут обращаться к переменным и методам Главной формы так же, как к датамодулю, для чего имя инита гл.формы также располагается в интерфейсной части uses. Все “дочерние” формы должны быть исключены из списка автосоздаваемых.
4. Не следует хранить данные, относящиеся к какому-то объекту (например, доч.форме), вне этого объекта. В сторонние методы, обрарабывающие объект, адрес на него передавать параметром.
5. Объекты уничтожает тот, что его создает.
6. Объект никогда не уничтожается в процедуре (функции), которой он передается как параметр (точнее, ссылка на него)
7. Объект, созданный в процедуре, не должен никуда передаваться, а используется лишь как временный участок памяти, очвобождаемый по выходу из процедуры.
Это схема, конечно, не является догмой, но новичкам позволяет избежать массу ошибок.