Cтраница 2
Сведения из вида Diagram сохраняются в отдельном файле, а не как часть DFM-файла. [16]
Другое переопределенное свойство, Items, устанавливается как свойство, которое вообще не должно сохранятся в DFM-файл, независимо от текущего значения. [17]
Фрейм и два его экземпляра в ходе разработки ( пример Frames2. [18] |
Обратите также внимание на то, что оставшиеся без изменения компоненты класса фрейма не представлены в DFM-файле формы, использующей данный фрейм; форма может иметь два фрейма с различными именами, но компоненты двух фреймов могут иметь одинаковые имена. Эти компоненты не принадлежат данной форме, их владельцем является фрейм. [19]
Каждый раз при добавлении компонента в форму Delphi, наряду с некоторыми из его свойств, добавляет в DFM-файл связанный с ним пункт. В Pascal-файл Delphi добавляет соответствующее поле в объявление класса формы. Это поле формы - ссылка на соответствующий объект, как и любая переменная типа класса. Далее среда Delphi подключает новый объект к полю формы, соответствующему его свойству Name. [20]
Последовательно щелкая на этих кнопках ( или изменяя данную форму программы), вы сможете сравнить форму, сохраненную в DFM-файл с текущим объектом времени выполнения. [21]
Если были внесены некорректные изменения, компиляция прекратится сообщением об ошибке; перед повторным открытием формы вам придется исправить содержание DFM-файла. [22]
Другое различие заключается в том, что Delphi, вместо того чтобы ссылаться на внешние файлы, внедряет графические элементы компонента в DFM-файл. Это упрощает установку готовой программы ( потому что в конечном итоге все содержится в исполняемом файле), но приводит к увеличению ее размеров. [23]
В отличие от созданного ранее компонента clock, нет необходимости устанавливать свойства таймера или вручную подключать событие таймера к функции-обработчику, поскольку это производится визуально и сохраняется в DFM-файл фрейма. [24]
Ввиду этого вы, как разработчик компонентов, должны в общем случае распространять ( предоставлять заказчику) по меньшей мере BPL-файл, DCP-файл и DCU-файл модулей, входящих в пакет и все соответствующие DFM-файлы плюс файл справки. [25]
Методы, используемые для обработки событий в IDE ( и в DFM файлах), должны быть опубликованы, и поля, соответствующие компонентам в форме, также должны быть опубликованы для того, чтобы автоматически подсоединяться к объектам, описанным в DFM-файле и созданным вместе с формой. [26]
Четыре другие функции с одинаковыми параметрами и именами, содержащими имя Resource вместо Binary ( например, ObjectResourceToText), осуществляют преобразование формата ресурса, получаемого с помощью WriteComponentRes. Последний метод, TestStreamFormat, указывает хранится ли DFM-файл в двоичном или текстовом представлении. [27]
Еще одно преимущество этого подхода по сравнению с использованием DFM-файлов для создания форм в ходе разработки состоит в том, что в этом случае внешнему программисту гораздо сложнее захватить информацию о структуре приложения. В главе 5 рассматривалось, как можно извлекать DFM-файл из текущего исполняемого файла Delphi; то же самое можно легко сделать с любым компилируемым в Delphi исполняемым файлом, исходный код которого отсутствует. Если нужно наряду с заданными по умолчанию значениями свойств сохранить для себя определенный набор используемых вами компонентов ( например, в специальной форме), возможно, следует написать Дополнительный код. [28]
Вы видели, что почти каждый компонент имеет владельца. Когда компонент создан на этапе разработки ( или из результирующего DFM-файла), его владельцем неизменно будет его форма. При создании компонента во время выполнения владелец указывается конструктору Create в качестве параметра. [29]
И, наконец, FieldAddress, метод класса TObject, который возвращает местоположение в памяти опубликованного поля по его имени. Delphi использует этот метод для подсоединения компонентов, созданных на основе DFM-файла, вместе с их полями ( например, формой), имеющими то же имя. [30]