Блог. Двадцать пять лет Делфи-практики
В этом блоге я буду публиковать ответы на вопросы, которые постоянно приходится повторять на форуме.
Здесь можно это сделать более развернуто и спокойно.
Все, что здесь написано, не является истиной в последней инстанции, скорее, это результат моих размышлений над архитектурой проектов, маленьких и больших, которых я сделал на Делфи более дюжины.
Начав с Делфи-2 двадцать пять лет назад, я прошел все версии, испробовал массу технологий, включая работу с БД, с графикой DirectX, связью с серверами и интернетом, разработку на Андроид и IOS, и многое, многое другое.
________________________________________________________________________________ ____
P.S. все, о чем здесь написано, всего лишь измышления из головы.
совпадения с реальными людьми и фактами случайны.
В этом блоге я буду публиковать ответы на вопросы, которые постоянно приходится повторять на форуме.
Здесь можно это сделать более развернуто и спокойно.
Все, что здесь написано, не является истиной в последней инстанции, скорее, это результат моих размышлений над архитектурой проектов, маленьких и больших, которых я сделал на Делфи более дюжины.
Начав с Делфи-2 двадцать пять лет назад, я прошел все версии, испробовал массу технологий, включая работу с БД, с графикой DirectX, связью с серверами и интернетом, разработку на Андроид и IOS, и многое, многое другое.
________________________________________________________________________________ ____
P.S. все, о чем здесь написано, всего лишь измышления из головы.
совпадения с реальными людьми и фактами случайны.
Что не так с Form1.Caption
Запись от krapotkin размещена 18.09.2018 в 22:19
Очень распространенная ошибка новичков это обращение в методах класса к переменным этого же класса Почему это распространено - да потому что Delphi с доисторических времен при создании формы создает не только класс, ее описывающий, но и переменную этого класса, и даже автоматически создает объект и хранит его в этой переменной
Я думаю, как раз наоборот, если бы этого не было, огромного количества ошибок архитектурных и всяких других можно было бы избежать... Немного про формы я писал тут https://www.cyberforum.ru/blog... g4873.html Очень подходит аналогия, что TForm1 - это комплект чертежей некоего автомобиля а Form1 - это готовый созданный автомобиль с личным номером. Если мы в чертежах используем этот личный номер, то все работает только пока этот объект выпускается в единственном экземпляре. Формы у начинающих примерно так и работают. Одна форма - одна переменная. На самом деле это вовсе не так. Мы должны помнить, что поля и методы класса доступны в других методах этого же класса
желательно еще и не используя глобальные переменные (опять посылаю прочитать статью о формах)
А если он создан, то на форуме появляются темы. Я ставлю Width := 800 а форма не меняется При этом форма создана заново, а все изменения уходят в Form1, которая например, не видна сейчас... |
Всего комментариев 3
Комментарии
-
Запись от Jlovenpk1 размещена 21.09.2018 в 13:54 -
Цитата:Очень распространенная ошибка новичков это обращение в методах класса к переменным этого же класса
Потому как, когда я прочитал исходное предложение, то не сразу понял, что в этом плохого.
Что же касается глобальных переменных типаvar Form1: TForm1
, то проблема не в этой переменной, а в головах новичков. Любой инструмент можно использовать во благо, а можно (как топором) вместо ветки палец оттяпать. Смысл использования объектной переменной внутри класса, к которой этот объект относится, нормальному человеку непонятен (зачем писать Form1.Caption, когда можно написать просто Caption?) С этим всё понятно. И если бы не было этих глобальных объектных переменных, то и проблем таких тоже не было бы – с этим тоже всё понятно. Но если ножом можно порезаться, это не значит, что все ножи нужно выкинуть. Обычно всё же приложения имеют конкретный набор форм, и необходимости создавать новые (тем более, такие же) нет, поэтому эта проблема новичкам неведома (да и она реально не возникает, как правило даже при использовании Form1.Caption). Другое дело, что это неправильно концептуально. Но! Если бы переменных Form1, Form2 и т.д. не было, взаимодействие между формами было бы сложнее. Как вы вызовете из какого-нибудь TForm1.Button1Click форму Form2, если не через Form2.Show? Как передадите какие-либо данные в другую форму? Да, есть способы (даже у вас описанные: https://www.cyberforum.ru/blog... g4873.html). Но что если я хочу сохранить все данные формы между закрытием и повторным открытием (к примеру, список прочитанный из файла или сети, либо выбранные пункты, набранные тексты и пр)? Если делать это через Create/Free, то сохранение/восстановление всех этих данных – лишнее усложнение. Для большого проекта, может, это и оправдано, но для небольшого – вряд ли.
Короче говоря, если множество способов сделать одно и то же. Не всегда есть смысл городить универсальный вариант на все случаи жизни (которые пока неактуальны, но так, на всякий случай, на будущее), усложняя тем самым проект. И каждый из способов нужно использовать с умом, т.к. напортачить можно даже при использовании самой простой функцииЗапись от Jin X размещена 27.10.2018 в 10:32
Обновил(-а) Jin X 27.10.2018 в 11:31 -
Я всегда говорил и говорю: класс
TForm*
должен штатно работать даже если вообще удалить переменнуюForm*
из кода. Да и вообще все глобальные переменные (с отдельными допущениями).
Если лезут ошибки/проблемы/глюки - вы что-то сделали не так.
Также я против злоупотребления Self. Если сSelf
и безSelf
происходит одно и то же - зачем вы его написали?Запись от GoodWeather размещена 01.12.2019 в 16:13