Середовище програмування Delphi
После размещения компонента на форме система Delphi автоматически вносит изменения в файлы модуля и описания. В описание класса формы (файл модуля) для каждого нового компонента добавляется строчка формата
Создание интерфейса приложения
Розробка додатка
Delphi відноситься до систем візуального програмування, що називаються також системами RAD (Rapid Application Development — швидка розробка додатків). Розробка додатка в Delphi включає два взаємозалежних етапи:
Об створення інтерфейсу додатка;
П визначення функціональності додатка.
Інтерфейс додатка визначає спосіб взаємодії користувача і додатки, тобто зовнішній вигляд форми (форм) при виконанні додатка і те, яким образом користувач керує додатком. Інтерфейс конструюється шляхом розміщення на формі компонентів, називаних интерфейсными або керуючими компонентами (елементами). Створюється інтерфейс додатка за допомогою Конструктора форми.
Функціональність додатка визначається процедурами, що виконуються при виникненні визначених подій, наприклад, що відбуваються при діях користувача з керуючими елементами форми.
Таким чином, у процесі розробки додатка на форму містяться компоненти і для них установлюються необхідні властивості і створюються оброблювачі подій.
Интерфейс приложения составляют компоненты, которые разработчик выбирает из Палитры компонентов и размещает на форме, т. е. компоненты являются своего рода строительными блоками. При конструировании интерфейса приложения действует принцип WYSIWYG (What You See Is What You Get — что видите, то и получите), и разработчик при создании приложения видит форму почти такой же, как и при его выполнении.
Компоненты являются структурными единицами и делятся на визуальные (видимые) и невизуальные (системные). При этом понятия "видимый" и "невидимый" относятся только к этапу выполнения, на этапе проектирования видны все компоненты приложения.
К визуальным компонентам относятся, например, кнопки, списки или переключатели, а также форма. Так как визуальные компоненты используются пользователем для управления приложением, то их также называют управляющими компонентами или элементами управления. Именно визуальные компоненты образуют интерфейс приложения.
К невизуальным компонентам относятся компоненты, выполняющие вспомогательные, но не менее важные действия, например, таймер Timer или набор данных Table (компонент Timer позволяет отсчитывать интервалы времени, а компонент Table представляет собой записи таблицы базы данных).
При создании интерфейса приложения для каждого компонента выполняются следующие операции:
П выбор компонента в Палитре компонентов и размещение его на форме; П изменение свойств компонента.
Разработчик выполняет эти операции в окне Конструктора формы, используя Палитру компонентов и Инспектор объектов. При этом действия разработчика похожи на работу в среде графического редактора, а сам процесс создания интерфейса приложения больше напоминает конструирование или рисование, чем традиционное программирование. В связи с этим часто работу по созданию интерфейса называют не программированием, а конструированием.
Выбор компонента в Палитре выполняется щелчком мыши на нужном компоненте, например кнопке Button, в результате чего его пиктограмма принимает утопленный вид. Если после этого щелкнуть на свободном месте формы, то на ней появляется выбранный компонент, а его пиктограмма в Палитре принимает обычный вид. Пиктограммы компонентов отражают назначение компонентов, и при наличии небольших практических навыков выбор нужного компонента происходит достаточно быстро. Кроме того, при наведении на каждый компонент указателя мыши отображается текст с информацией о его назначении.
Обозначения типов объектов в Delphi, в том числе и компонентов, начинаются с буквы т. Иногда типы используются вместо названий для обозначения компонентов. Мы же в данной книге будем использовать для компонентов именно названия, а не типы, т. е. Button, а не TButton, Label, а не
TLabel.
<Название компонентам <Тип компонентам
Название нового компонента является значением его свойства Name, а тип совпадает с типом выбранного из Палитры компонента. Например, для кнопки Button эта строчка первоначально будет иметь вид:
Buttonl: TButton;
В файле описания для кнопки Button может быть записан следующий код:
object Buttonl: TButton
Left = 88
Top = 120
Width =75
Height = 25
Caption = 'Buttonl'
TabOrder = 0 end
Для размещения на форме нескольких одинаковых компонентов удобно перед выбором компонента в Палитре компонентов нажать и удерживать клавишу <Shift>. В этом случае после щелчка мыши в области формы и размещения там выбранного компонента его пиктограмма в Палитре остается утопленной, и каждый последующий щелчок на форме приводит к появлению на ней еще одного такого же компонента. Для отмены выбора данного компонента достаточно выбрать другой компонент или щелкнуть мышью на изображении стрелки в левом углу Палитры компонентов.
После размещения компонента на форме можно с помощью мыши изменять его положение и размеры. В случае нескольких компонентов можно выполнять выравнивание или перевод того или иного компонента на передний или задний план. При этом действия разработчика не отличаются от действий в среде обычного графического редактора. Одновременное выделение на форме нескольких компонентов можно выполнить щелчком мыши при нажатой клавише <Shift>.
По умолчанию компоненты выравниваются на форме по линиям сетки, что определяет флажок Snap to grid (Выравнивать по сетке), входящий в набор параметров интегрированной среды разработки. В ряде случаев этот флажок приходится отключать, например, при плотном размещении компонентов на форме. По умолчанию шаг сетки равен восьми пикселам, а сетка при проектировании отображается на поверхности формы. Необходимость выравнивания по сетке, видимость сетки (переключатель Display grid(Отображать сетку)) и размер шага сетки по горизонтали и вертикали устанавливаются на вкладке Preferences(Параметры) диалогового окна Environment Options(Параметры среды), вызываемого одноименной командой меню Tools(Средства).
Внешний вид компонента определяется его свойствами, которые становятся доступными в окне Инспектора объектов, когда компонент выделен на форме и вокруг него появились маркеры выделения (рис. ). Доступ к свойствам самой формы осуществляется аналогично, однако в выбранном состоянии форма не выделяется маркерами. Для выделения (выбора) формы достаточно щелкнуть в любом ее месте, свободном от других компонентов.
Рис.Доступ к свойствам компонента
В ниспадающем списке, расположенном в верхней части окна Инспектора объектов, отображается название компонента и его тип. Выбрать тот или иной компонент и, соответственно, получить доступ к его свойствам можно также через список Инспектора объектов. Такой способ выбора удобен в случаях, когда компонент полностью закрыт другими объектами.
В левой части окна Инспектора объектов приводятся названия всех свойств компонента, которые доступны на этапе разработки приложения. Справа для каждого свойства стоит его значение. Отметим, что кроме этих свойств компонент может иметь и свойства, которые доступны только во время выполнения приложения.
Свойства представляют собой атрибуты, определяющие способ отображения и функционирования компонентов при выполнении приложения. Каждый компонент имеет значения свойств, задаваемые по умолчанию. После помещения компонента на форму его свойства можно изменять в процессе проектирования или в ходе выполнения приложения.
Управление свойствами в процессе проектирования заключается в изменении значений свойств компонентов непосредственно в окне Конструктора формы ("рисование") или с помощью Инспектора объектов.
Разработчик может изменить значение свойства компонента, введя или выбрав нужное значение. При этом одновременно изменяется соответствующий компонент, т. е. уже при проектировании видны результаты сделанных изменений. Например, при изменении названия кнопки (свойство caption) оно сразу же отображается на ее поверхности.
Для подтверждения нового значения свойства достаточно нажать клавишу <Enter> или перейти к другому свойству или компоненту. Отмена изменений производится клавишей <Esc>. Если свойству введено недопустимое значение, то выдается предупреждающее сообщение, а изменение значения
отвергается. Изменения свойств автоматически учитываются в файле описания формы, используемом компилятором при создании формы, а при изменении свойства Name изменения вносятся и в описание класса формы.
Каждый компонент для большинства своих свойств, например, color (цвет), Caption (название) и visible (видимость), имеет значения по умолчанию.
Для обращения к компоненту в приложении предназначено свойство Name, которое образуется автоматически следующим образом: к названию компонента добавляется его номер в порядке помещения на форму. Например, первая кнопка Button получает имя Buttonl, вторая — Button2 и т. д. Первоначально от свойства Name получает свое значение и свойство Caption.
Обычно разработчик дает компонентам более информативные имена, чем имена по умолчанию. При этом целесообразно включать в имя данные о типе компонента и его назначении в приложении. Так, кнопке типа TButton, предназначенной для закрытия окна, может быть присвоено имя btnciose или ButtonCiose. Каждый разработчик самостоятельно устанавливает удобные правила именования компонентов. В данной книге для простоты мы будем часто использовать имена по умолчанию, например, Formi, Buttonl ИЛИ Editl.
Свойства, связанные с размерами и положением компонента (например, Left и Тор), автоматически изменяют свои значения при перемещении компонента мышью и смене его размеров.
Если на форме выделено несколько компонентов, то в Инспекторе объектов доступны свойства, общие для всех этих компонентов. При этом сделанные в Инспекторе объектов изменения действуют для всех выделенных компонентов.
Для установки значений свойств в Инспекторе объектов используются подключающиеся автоматически редакторы свойств:
П Простой (текстовый) — значение свойства вводится или редактируется как обычная строка символов, которая интерпретируется как числовой или строковый тип Delphi; используется для таких свойств, как Caption, Left, Height И Hint.
П Перечисляемый — значение свойства выбирается из раскрывающегося списка. Список раскрывается щелчком на стрелке, которая появляется при установке курсора в области значения свойства. Можно не выбирать, а ввести с помощью клавиатуры нужное значение, однако на практике это обычно не делается, т. к. допускаются только предлагаемые значения. Кроме того, возрастает трудоемкость и увеличивается вероятность ошибки. Используется для таких свойств, как Formstyle, visible и ModalResult.
О Множественный — значение свойства представляет собой комбинацию значений из предлагаемого множества. В Инспекторе объектов слева от названия свойства множественного типа стоит знак "+". Формирование значения свойства выполняется с помощью дополнительного списка, раскрываемого двойным щелчком на названии свойства. Этот список содержит перечень всех допустимых значений свойства, справа от каждого значения можно указать True или False. Выбор True означает, что данное значение включается в комбинацию значений, a False — нет. Используется ДЛЯ таких СВОЙСТВ, как Borderlcons И Anchors.
П Объекта — свойство является объектом и, в свою очередь, содержит другие свойства (подсвойства), каждое из которых можно редактировать отдельно. Используется для таких свойств, как Font, items и Lines. В области значения свойства-объекта в скобках указывается тип объекта, например, (т-Font) или (TSrings). Для свойства-объекта слева от названия может стоять знак "+", в этом случае управление его свойствами выполняется так же, как и для свойства множественного типа, т. е. через раскрывающийся список. Этот список в левой части содержит названия подсвойств, а в правой — значения, редактируемые обычным способом. В области значения может отображаться кнопка с тремя точками. Это означает, что для данного свойства имеется специальный редактор, который вызывается нажатием на эту кнопку. Так, для свойства Font открывается стандартное окно Windows для установки параметров шрифта.
При выполнении приложения значения свойств компонентов (доступных в окне Инспектора объектов) можно изменять с помощью операторов присваивания, например, в обработчике события создания формы. Так, изменение заголовка кнопки Buttoni можно выполнить следующим образом:
Buttonl.Caption := 'Закрыть';
Такой способ требует, однако, большего объема работ, чем в случае использования Инспектора объектов, кроме того, подобные установки вступают в силу только во время выполнения приложения и на этапе разработки не видны, что в ряде случаев затрудняет управление визуальными компонентами. Тем не менее, для наглядности во многих примерах значения отдельных свойств мы будем устанавливать с помощью операторов присваивания, а не через Инспектор объектов.
Отметим, что существуют свойства времени выполнения, недоступные через Инспектор объектов и с которыми можно работать только во время выполнения приложения. К таким свойствам относятся, например, число записей RecordCount набора данных или поверхность рисования canvas визуального компонента.