понедельник, 28 июля 2008 г.

Свойства объектов

Итак, как вы уже знаете, язык который мы изучаем называется Object Pascal. И это значит, что вся работа сводится на управление этими самыми объектами.

Каждый компонент, который вы помещаете на форму, имеет свое отражение в окне Инспектора Объектов (Object Inspector). Как вы помните, Object Inspector имеет две “странички” - “Properties” (Свойства) и “Events” (События). Создание программы в Delphi сводится к “нанесению” компонентов на форму (которая, кстати, также является компонентом) и настройке взаимодействия между ними путем:

1. изменения значения свойств этих компонентов.

2. написания адекватных реакций на события.

Как Вы уже успели, наверное, заметить, свойство является важным атрибутом компонента. Для пользователя (программиста) свойство выглядит как простое поле какой-либо структуры, содержащее некоторое значение. Однако, в отличие от “просто” поля, любое изменение значения некоторого свойства любого компонента сразу же приводит к изменению визуального представления этого компонента. Свойства служат двум главным целям. Во-первых, они определяют внешний вид формы или компонента. А во-вторых, свойства определяет поведение формы или компонента.

Существует несколько типов свойств, в зависимости от их “природы”, т.е. внутреннего устройства.

  • Простые свойства - это те, значения которых являются числами или строками. Например, свойства Left и Top принимают целые значения, определяющие положение левого верхнего угла компонента или формы. Свойства Caption и Name (из примера прошлого урока) представляют собой строки и определяют заголовок и имя компонента или формы.

  • Перечислимые свойства - это те, которые могут принимать значения из предопределенного набора (списка). Простейший пример - это свойство типа Boolean, которое может принимать значения True или False (истинно или ложно). Например свойство Enabled для кнопки Button будет означать, может ли пользователь или нет нажать на нее. Если установлено False, то кнопка становится серой, недоступной. Т.е. свойство кнопки Enabled может принитать только два значения и не более.

  • Вложенные свойства - это те, которые поддерживают вложенные значения (или объекты). Object Inspector изображает знак “+” слева от названия таких свойств. Имеется два вида таких свойств: множества и комбинированные значения. Object Inspector изображает множества в квадратных скобках. Если множество пусто, оно отображается как []. Установки для вложенных свойств вида “множество” обычно имеют значения типа Boolean. Наиболее распространенным примером такого свойства является свойство Style с вложенным множеством булевых значений. Комбинированные значения отображаются в Инспекторе Объектов как коллекция некоторых величин, каждый со своим типом данных. Некоторые свойства, например, Font, для изменения своих значений имеют возможность вызвать диалоговое окно. Для этого достаточно щелкнуть маленькую кнопку с тремя точками в правой части строки Инспектора Объектов, показывающей данное свойство.

Delphi позволяет легко манипулировать свойствами компонента как в режиме проектирования, так и в режиме выполнения программы соответственно программно.

1.gif (2924 bytes)В режиме проектирования манипулирование свойствами осуществляется с помощью Дизайнера Форм (Forms Designer или как говорилось выше проектировщик форм) или, как Вы уже видели, на страничке “Properties” Инспектора Объектов. Например, для того чтобы изменить свойства Height (высоту) и Width (ширину) кнопки, достаточно “зацепить” мышкой за любой ее угол и раздвинуть до нужного представления. Того же результата можно добиться, просто подставив новые значения свойств Height и Width в окне Object Inspector.

С другой стороны, в режиме выполнения пользователь (программист) имеет возможность не только манипулировать всеми свойствами, отображаемыми в Инспекторе Объектов, но и управлять более обширным их списком. В следующем разделе мы рассмотрим, как это делается.

Управление свойствами визуальных компонентов в режиме выполнения

Все изменения значений свойств компонент в режиме выполнения должны осуществляться путем прямой записи строк кода на языке Паскаль. В режиме выполнения невозможно использовать Object Inspector. Хотя добраться до него возможно и возможно поменять его, но изменения вступят в силу только после перекомпиляции проекта.

Компиляция - это процесс перевода вашей программы в машинный код. В данном случае это процесс создания исполняемого EXE файла.

Однако, доступ к свойствам компонентов довольно легко получить программным путем. Все, что вы должны сделать для изменения какого-либо свойства - это написать простую строчку кода в редакторе кода аналогично следующей:

Component.Width := 40;

где Component - интересующий вас компонент. Например Button1. Название компонента указано в свойстве Name.

Вышеприведенная строка устанавливает ширину (Width) компонента в значение 40 пикселей. Если свойство Width компонента еще не было равно 40 к моменту выполнения данной строки программы, Вы увидите, как компонент визуально изменит свою ширину.

Естественно, что изменить просто так свойство нельзя. Его надо изменять только в ответ на какое-либо событие. Например на клик мышкой по кнопке. Для этого создается одноименная процедура обработки события. Рассмотрим пример.

Разместим в проектировщике форм Form1 кнопку Button1. Напишем реакцию на событие нажатия по этой кнопке.

Запускаем Delphi. В меню File выбираем New Application. Открывается новый проект. В проектировщике форм устанавливаем кнопку Button. Выделяем ее одинарным щелчком мыши. Здесь и далее для того, чтобы добраться до свойств необходимого объекта, нужно выделить его. Свойства выделенного немедленно отображаются в Object Inspector. Установим свойство Width для кнопки Button1 равное 200. Кнопка немедленно расширяется на заданную ширину. Теперь установим другую ширину для этой же кнопки, но уже программно. Переключаем Object Inspector на страницу Events (события). Мы видим полный перечень доступных во время выполнения событий для этой кнопки. Нас интересует реакция на событие нажатия On Click. Необходимо создать процедуру обработки этого нажатия, иначе это действие будет проигнорировано программой. Дважды щелкаем мышкой в поле, правее надписи On Click или нажимаем на Ctrl+Enter. Delphi автоматически создает заголовок процедуры обработки события.

procedure TForm1.Button1Click(Sender: TObject);
begin

end;
Курсор установлен между операторными скобками begin и end. Это означает, что весь текст программы, относящийся к реакции на данное событие должно быть размещено только между ними.

Набираем строку:

Button1.Width:=40;

Запускаем программу на выполнение (F9). Смотрим на результат своей работы.

Object Inspector является удобным способом выполнения в режиме проектирования того, что может быть осуществлено программным путем в режиме выполнения. Заданные свойства объектов считаются начальными и присутствуют на момент запуска программы. Более того, как уже было сказано выше, у компонента могут быть свойства, не отображаемые в окне Инспектора Объектов, которые доступны только в момент выполнения программы.