Некоторые мысли о привычках развития кажутся застрявшими у вас в горле, и вы не сможете их выплюнуть. Глядя на мотивацию публикации, я, конечно, не исключаю возможности мошенничества для получения очков за участие, но, с другой стороны, я также надеюсь предоставить некоторые предложения или ссылки на соучеников (Нянь Син) (надеюсь, я не вводите других в заблуждение). В то же время я также надеюсь, что вы сможете высказать свое мнение по поводу этих моих вредных привычек, а также внести критику и исправления. Спасибо.
один. Создать каталог проекта
Прежде всего, первым шагом, конечно же, является создание отдельного каталога для нового проекта (не смейтесь). Имя каталога должно совпадать с именем проекта, либо можно использовать другое имя, если оно ясное и краткое. Затем создайте в этом каталоге каждый из следующих каталогов:
<Doc>: используется для хранения документации по разработке, связанной с проектом (описание требований, эскизный проект, рабочий проект и т. д.);
<Источник>: используется для хранения файлов «.DPR», «.Pas», «.Dfm» и других файлов в исходной программе Delphi;
<Dcu>: в этом каталоге хранятся файлы «.Dcu». Цель хранения файлов «.Pas» и «.Dcu» отдельно — сделать содержимое исходного каталога более понятным;
<Bin>: хранит выходные файлы проекта, такие как «.Exe», «.Dll» или «.Ocx» и т. д.;
<Журнал>: используется для хранения файлов журналов; обычно в этот каталог я помещаю файл «<Имя проекта>Programmer Log.Txt».
<Images>: Конечно, это каталог, в котором хранятся изображения, используемые в проекте. В обычных обстоятельствах этот каталог незаменим. Если используются и другие ресурсы, то создайте и свои каталоги, например Wav, Avi и т.д.
два. Установить параметры проекта
Создайте новый проект в Delphi, сохраните этот проект в каталоге Source и одновременно:
а. В качестве значка для этого проекта выберите привлекательный значок, который каким-то образом связан с проектом. Конечно, этот значок можно использовать только временно, но он должен быть лучше, чем тот уродливый значок, который установлен в Delphi. Иначе как можно быть достойным себя?
б. Установите в качестве выходного каталога на странице «Параметры проекта» -> «Каталоги/условия» каталог Bin;
c. Установите выходной каталог устройства в каталог Dcu.
три. Добавить постоянную единицу
Добавьте новый модуль и сохраните его как «unt<имя проекта> Consts.Pas», чтобы сохранить константы, используемые в проекте.
Четыре. О форме и единице измерения
Назовите форму в соответствии с венгерским соглашением об именах. Форма, используемая для входа в систему, может называться «FrmLogin», а имя ее устройства — «untLogin». Как правило, названия двух соответствующих форм и единиц должны быть одинаковыми, за исключением сокращений «Frm» или «unt».
Добавьте комментарий к этому модулю в заголовке Модуля. Формат комментария может относиться к исходному коду Delphi, но он должен включать как минимум следующие элементы: описание автора функции; история модификаций и т.д.
Установите в качестве заголовка вновь созданной формы имя класса формы вместо имени по умолчанию в Delphi. Например, после переименования Form1 в FrmLogin мы получаем новый класс формы TFrmLogin, и Delphi автоматически обновляет заголовок формы до FrmLogin. По моему мнению, заголовок должен быть «TFrmLogin», потому что мы разрабатываем класс формы TFrmLogin, а не просто работаем с FrmLogin.
Для класса формы с четкими функциями, такого как TFrmLogin, многие люди имеют привычку на этапе проектирования присваивать его заголовку такое имя, как «Вход оператора». Моя привычка состоит в том, что константы, такие как «вход оператора», обычно хранятся в unt<имя проекта>Consts.Pas и определяются с помощью ResourceString или Const. Что касается именования заголовка формы, это должна быть задача времени выполнения. Поэтому я часто использую Caption только тогда, когда срабатывает событие TForm.OnCreate, например:
процедура TFrmLogin.FormCreate(Отправитель: TObject);
начинать
Заголовок: = csLoginTitle;
....
конец;
пять. Об использовании функции форматирования
Есть три данных: iYear, iMonth и iDay. Что вы обычно делаете, чтобы отобразить такую информацию, как «День рождения: 1976/3/18»? Используйте s := 'Birthday:'+IntToStr(iYear)+'.'+IntToStr(iMonth)+'.'+IntToStr(iDay);? Это действительно утомительно. Моя привычка — добавлять константу csBirthDayFormat = 'Birthday: %d/%d/%d' в unt<имя проекта>Consts.Pas, чтобы сохранить формат отображения, а затем использовать s := Format(csBirthDayFormat, [iYear, iMonth , iDay]); Такие операторы завершают сбор данных. Преимущество этого очевидно, то есть вам нужно поддерживать формат отображения данных только в одном месте.
Функция «Форматирование» очень мощная, и я очень рекомендую ее. А вы?
шесть. О хранении реестра или Ini-файлов
Первоначально я обычно использовал TRegistry для доступа к реестру и TIniFile для доступа к файлам Ini. Эти два класса используются по-разному, поэтому практически невозможно использовать один и тот же код для доступа как к реестру, так и к INI-файлу. Какая головная боль!
Наконец я нашел спасителя — это класс TRegistryIniFile. Глядя на блок реестра, мы обнаруживаем, что TRegistryIniFile наследует от TCusomIniFile. TIniFile также наследуется от TCusomIniFile. Поэтому использование абстрактного класса TCusomIniFile для получения доступа к реестру или INI-файлу — это убийство двух зайцев одним выстрелом. например:
вар
csmIniFile:TCusomIniFile;
начинать
if blUseIniFile then//Если используется файл Ini
csmIniFile:= TIniFile.Create(csRootKey)
еще
csmIniFile:= TRegistryIniFile.Create(csRootKey);
//Затем вы можете использовать csmIniFile для доступа к INI-файлу.
//Или получить доступ к реестру аналогично доступу к файлу Ini.
Семь. О потоках TStream и TFileStream, TMemoryStream и т. д.
И TFileStream, и TMemoryStream наследуют от абстрактного класса TStream, а это означает, что мы можем использовать набор кодов для выполнения операций доступа к файлам и памяти. Поэтому при определении некоторых интерфейсов я склонен определять типы параметров как абстрактные классы, а не как конкретные классы. Например, функция для завершения функции сохранения определяется как
функция Save(AStream: TStream): Boolean;
чем определено как
функция Save(AStream: TFileStream): Boolean;
Будьте гораздо более гибкими.
Первое определение является перспективным, поскольку его можно применять к новым типам потоков, которые могут появиться в будущем. Последнее определение применимо только к таким потокам, как TFileStream (включая, конечно, подклассы TFileStream), что гораздо более жестко.
Моя привычка: если есть абстрактный класс, попробуйте определить в качестве параметров тип абстрактного класса. Ведь мы не можем предвидеть будущее.
восемь. Используйте TAction больше
В Delphi 4 и более поздних версиях появилась концепция Action и добавлен компонент TActionList на панель стандартных компонентов. Преимущество использования Action заключается в том, что вам больше не придется беспокоиться о синхронизации состояний управления!
Еще статьи
Musicwind®@HangZhou.Zj.Китай