Использование процедур и функций в Delphi

Еремин Андрей

Что такое свойства? Что является свойствами в реальной жизни? Например, в физике это температура плавления, температура кипения, вязкость, плотность, растворимость и т.д. Аналогично и объектно-ориентированном программировании. Каждый объект имеет какие-либо свойства. Свойства отвечают либо за внешний вид объекта, либо за его поведение в программе во время её выполнения. Рассмотрим свойства в Delphi .

Где найти свойства

Каждый компонент, помещённый на форму, имеет своё отражение в Инспекторе объектов (Object Inspector). Попробуйте, к примеру, поместить на форму кнопку TButton и текстовое поле TEdit и выделить по очереди сначала один объект, а затем другой, наблюдая при этом за Инспектором объектов. Вы заметите, что содержимое его окна изменяется. Это связано с тем, что каждый объект имеет свои свойства. Свойство может быть у одного объекта, но его может не быть у другого. Например, у поля ввода (TEdit) есть свойство ReadOnly , отвечающее за возможность изменения текста в этом поле. Совершенно логично, что у кнопки (TButton) этого свойства нет и быть не может.

Как создаются программы

Чтобы научиться создавать программы, для начала нужно понять основные принципы их создания. Коротко на этом остановимся. Итак, Вы уже научились помещать компоненты на форму, управлять ими и просматривать свойства. Размещение компонентов на форме - один из первых этапов разработки программы. Однако, просто поместив компоненты никаких действий происходить не будет - по кнопке можно будет щёлкнуть, но при этом ничего не произойдёт. В поле ввода можно ввести текст, но этот текст никуда не отправится и никак не обработается. Поэтому совершенно логичным этапом является настройка взаимодействий между компонентами. Некоторые простые взаимодействия уже "встроены" в стандартные компоненты и легко изменяются через Инспектор объектов. Всё остальное нужно создавать и программировать вручную. Практически основным методом создания взаимодействий компонентов является написание реакций на события. Но об этом чуть позже.

Типы свойств

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

Простыми являются те свойства, значения которых являются числами, либо строками (текстом). Примерами таких свойств могут служить Left и Top формы. Эти свойства определяют положение формы на экране (в частности, её левого верхнего угла). Значения этих свойств - числа. Пример свойства со значением-строкой - Caption формы. Это свойство хранит заголовок формы и задаётся в виде обычного текста.

2. Перечислимые свойства. Такими являются свойства, задать значения которым в явном виде нельзя, а можно только выбрать из списка. Список возможных значений определяется заранее. Пример такого свойства - свойство AutoSize формы. Оно отвечает за то, будет ли форма автоматически изменять свой размер, чтобы отобразить все размещённые на ней компоненты. Значение - либо истина (True), либо ложь (False). Другой пример - свойство BorderStyle . Это свойство отвечает за внешний вид формы, а также за поведение её границ, т.е. можно ли изменять размеры формы во время работы программы. Это свойство принимает одно из 6 значений.

3. Вложенные свойства. Это те свойства, которые имеют внутри несколько других свойств. В Инспекторе объектов слева от названий таких свойств отображается маленькая кнопка со знаком "+ ", нажатие на которую раскрывает данное свойство (знак при этом меняется на "- "). Повторный щелчок "сворачивает" свойство обратно. Вложенные свойства бывают двух основных типов - это множества и комбинированные значения. Множества - это набор каких-либо значений, каждое из которых либо "включено", либо "выключено". Комбинированные значения - это набор из нескольких свойств, которые могут иметь разный тип данных. Примером множества является свойство BorderIcons у формы - оно отвечает за кнопки, которые будут показаны в строке заголовка окна. Понятно, что любая из кнопок может либо отображаться на экране, либо нет - такой набор очень удобно задавать с помощью множества. Примером комбинированного значения является свойство Font (оно есть у большинства визуальных компонентов) - задаёт шрифт для элемента. В его включено несколько других свойств - название шрифта, цвет, стиль, размер и т.п.

Управление свойствами

Управлять свойствами, т.е. изменять их значения можно двумя способами - в режиме проектирования программы (Design-time) и во время выполнения (Run-time). В данный момент нас интересует режим проектирования. Изменять свойства можно всё в том же Инспекторе объектов. Если это простое свойство, то достаточно щёлкнуть по строке с названием этого свойства и ввести новое значение. Если это перечислимое свойство, то значение можно выбрать из списка. Некоторые свойства (например, Left , Top , Width и Height) можно изменять простыми операциями перетаскивания и изменением размеров с помощью мыши.
Примечание: Left , Top - положение формы на экране, Width - ширина, Height - высота формы.

Следует отметить, что в режиме проектирования через Инспектор объектов могут быть доступны не все свойства выбранного компонента. Эти свойства доступны в режиме выполнения и изменяются они программным путём.

Немного о компонентах

Чтобы у Вас не возникало путаниц и непонятных моментов, считаю необходимым сделать следующее уточнение. Все компоненты подразделяются на визуальные и невизуальные. Во время проектирования (Design-time) видны все компоненты без исключения. А вот во время выполнения (Run-time) - не все. Те, которые представляют собой какой-то видимый объект (поле, кнопка, таблица и т.д.) и являются визуальными. Невизуальные компоненты на экране не видны, но при этом используются в самой программе. В качестве примера невизуального компонента можно привести TApplicationEvents со вкладки Additional . Во время проектирования этот компонент присутствует на форме и он доступен через Инспектор объектов, но во время работы программы его не видно. За видимость объекта на экране в большинстве случаев отвечает свойство Visible (True - видимый, False - невидимый).

Active - Свойство имеет логический тип и позволяет открыть или закрыть набор данных, если свойству присвоить True или False соответственно. В зависимости от свойства CanModify данные можно либо только просматривать, либо можно также редактировать их.

AutoCalcFields - Свойство логического типа. Если установить значение False, то возникновение события OnCalcFields будет подавляться, вычисляемые поля обрабатываться не будут. Значение True разрешает расчет вычисляемых полей.

Bof - Свойство имеет логический тип и содержит True., если курсор находится на первой записи набора данных, и False в противном случае. Bof содержит True, когда:

■ Не пустой набор данных открывается.

■ При вызове метода First.

■ При вызове метода Prior, если курсор при этом на первой записи набора данных.

Bookmark - Свойство позволяет установить закладку на текущей записи набора данных. Количество закладок может быть неограниченно, работа с закладками рассматривалась на курсе "Введение в программирование на Delphi". Свойство имеет тип TBookmarkStr.

CanModify - Свойство имеет логический тип, и показывает, можно ли редактировать полученный набор данных, или он доступен только для чтения. При открытии набора данных автоматически запрашивается доступ для редактирования. В таком доступе может быть отказано по разным причинам, например, таблица открыта другим пользователем в эксклюзивном режиме. В этом случае CanModify получает значение False, и мы можем только просматривать данные, но не вносить в них изменения.

Database-Name - Свойство строкового типа, содержит адрес базы данных или ее псевдоним. Однако это справедливо к наборам данных BDE. В случае использования механизма ADO, это свойство недоступно - вместо него для подключения к базе данных следует использовать свойство Connection или ConnectionString.

Оа1а8оигсе - Свойство используется в наборах данных для указания детального набора данных в отношениях один-ко-многим.

DefaultFields - Свойство логического типа, содержит True, если программист не создал ни одного поля в редакторе полей набора данных. В этом случае все поля определяются автоматически, в соответствии с данной таблицей.

Eof - Свойство, противоположное свойству Bof. Имеет логический тип, и имеет значение True в случаях, когда:

■ Открыт пустой набор данных.

■ Вызван метод Last.

■ Вызван метод Next, если указатель при этом находится на последней записи таблицы.

■ При вызове метода SetRange в пустом наборе данных или диапазоне.

FieldCount - Свойство целого типа, содержит количество полей в наборе данных.

Fields - Свойство позволяет получить значение нужного поля по его индексу. Поля при этом индексируются с нуля. Например, получить значение седьмого по счету поля набора данных можно так:

Editl.Text:= CustTable.Fields.Value;

FieldValues - Свойство позволяет получить значение нужного поля по его имени. Это свойство используется по умолчанию, поэтому его можно не указывать. Примеры:

Editl.Text:= CustTable.FieldValues["Order"]; Editl.Text:= CustTable["Order"];

Filter - Свойство строкового типа. Содержит строку, которая определяет правила фильтрации набора данных.

Filtered - Свойство логического типа. Если в свойстве Filter имеется строка, определяющая порядок фильтрации, то присвоение значения True свойству Filtered приводит к фильтрации набора данных. Присвоение этому свойству False отменяет фильтрацию.

FilterOptions - Свойство имеет тип TFilterOptions и применяется для строковых или символьных полей. Свойству можно присвоить значение foCaselnsensitive или foNoPartialCompare. В первом случае фильтрация будет учитывать регистр букв, во втором учитывается лишь точное совпадение образцу.

Modified - Очень важное свойство логического типа. Содержит True, если набор данных был изменен, и False в противном случае. Часто применяется для проверок: если набор данных изменен, то вызвать метод Post, чтобы сохранить изменения.

RecNo и RecordCount - Свойства целого типа. Первое содержит номер текущей записи в наборе данных, второе - общее количество записей.

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

■ dsInactivate - набор данных закрыт.

■ dsBrowse - режим просмотра.

■ dsEdit - режим редактирования.

■ dsInsert - режим вставки.

■ dsSetKey - поиск записи.

■ dsCalcFields - состояние установки вычисляемых полей.

■ dsFilter - режим фильтрации записей.

■ dsNewValue - режим обновления свойства TField.NewValue.

■ dsOldValue - режим обновления свойства TField.OldValue.

■ dsCurValue - режим обновления свойства TField.CurValue.

■ dsBlockRead - состояние чтения блока записей.

■ dsInternalCalc - обновление полей, у которых свойство FieldKind соответствует значению fklnternalCalc.

Однако в отличие от “просто†поля любое изменение значения некоторого свойства любого компонента сразу же приводит к изменению визуального представления этого компонента поскольку свойство инкапсулирует в себе методы действия связанные с чтением и записью этого поля которые в свою очередь включают в себя необходимую перерисовку. Свойства служат двум главным целям. А вовторых свойства определяют поведение формы или компонента.


Поделитесь работой в социальных сетях

Если эта работа Вам не подошла внизу страницы есть список похожих работ. Так же Вы можете воспользоваться кнопкой поиск


Лекция-8 (2 часа)

Тема: Свойства в Delphi

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

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

Рис. 1: Отображение комбинированных значений вложенных свойств

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

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

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

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

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

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

MyComponent . Width := 35;

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

Таким образом, нет ничего магического в Инспекторе Объектов. Object Inspector просто является удобным способом

Рис. 3: Изменение размеров с помощью Инспектора Объектов

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

Объектно-ориентированный язык Паскаль, лежащий в основе Delphi, в качестве базового имеет принцип соответствия визуальных компонент тем вещам, которые они представляют. Разработчики Delphi поставили перед собой цель, чтобы, например, представление компонента Button (кнопка), инкапсулирующее некий код, соответствовало визуальному изображению кнопки на экране и являлось как можно более близким эквивалентом реальной кнопки, которую Вы можете найти на клавиатуре. И именно из этого принципа родилось понятие свойства.

Если Вы измените свойства Width и Height компонента Button , кнопка соответствующим образом изменит свои ширину и высоту. Вам нет необходимости после изменения свойства Width указывать объекту, чтобы он перерисовал себя, хотя при обычном программировании именно так Вы и должны поступать. Свойства - это более чем просто данные. Напротив, они делают эти данные “живыми”, и все это происходит перед Вашими глазами! Свойства дают Вам иллюзию, как будто Вы имеете дело с реальными объектами, а не с их программным представлением.

Программа SHAPEDEM.DPR, изображенная на рис. 4, демонстрирует различные способы, с помощью которых можно изменять пользовательский интерфейс при выполнении программы. Эта программа не производит никаких полезных действий кроме демонстрации того, как легко можно создать “дельфийское” приложение с настраиваемым интерфейсом.

Программа SHAPEDEM содержит всего лишь объект TShape , размещенный на форме, вместе с двумя полосами прокрутки и несколькими кнопками. Эта программа интересна тем, что позволяет в режиме выполнения изменять размер, цвет и внешний вид объекта TShape , равно как размер и цвет самой формы.

Листинг А показывает код программы SHAPEDEM. Код головного модуля этой программы мы приведем по частям - по мере его написания.

Листинг А: Исходный код программы SHAPEDEM.DPR.

program Shapedem;

uses

Forms,

Mina in "MAIN.PAS" {Form1} ;

begin

Application.CreateForm(TForm1, Form1);

Application . Run ; Рис. 4: Программа SHAPEDEM

end . имеет 2 полосы прокрутки и несколько кнопок

В нашем примере полосы прокрутки (ScrollBars) используются для изменения размера фигуры, изображенной в средней части экрана, как показано на рис.5. Для выбора нового вида фигуры используйте выпадающий список (ComboBox), а для изменения цвета фигуры или окна (формы) используйте стандартное диалоговое окно выбора цвета, вызываемое кнопками “ Цвет фигуры ” и “ Цвет формы ”.

Что нужно сделать пользователю (программисту) для того чтобы получить

Рис. 5: Вы можете использовать полосы прокрутки, кнопки и список для изменения внешнего вида приложения

возможность “в режиме выполнения” изменять цвет какого-либо элемента или всего окна (формы)? Для этого достаточно выполнить всего лишь несколько действий. Убедитесь сами. Для изменения цвета окна просто выберите компонент ColorDialog из палитры компонентов (она находится на страничке “Dialogs”) и поместите его на форму. Кроме того, поместите на форму обычную кнопку (компонент Button , находится на страничке “Standard”). Для удобства чтения с помощью Object Inspector измените имя компонента (свойство Name ) с “Button1” (которое дается по умолчанию) на “FormColor”, а его заголовок (свойство Caption ) - на “Цвет формы”. Дважды щелкните по кнопке “Цвет формы” - Delphi сгенерирует заготовку метода, который выглядит следующим образом:

procedure

begin

end ;

Теперь введите две простые строчки кода:

procedure TForm1.FormColorClick(Sender: TObject);

begin

Form1.Color:= ColorDialog1.Color;

end ;

Данный код во время выполнения при нажатии кнопки “Цвет формы” вызывает стандартное диалоговое окно выбора цвета, как показано на рис.6.Если в этом диалоговом окне Вы щелкните кнопку OK, выполнится следующая строка:

Form 1. Color := ColorDialog 1. Color ;

Этот код установит свойство Color формы Form 1 в цвет, который был выбран с помощью диалогового окна ColorDialog 1 . Это очень просто!!!

Та же самая техника может использоваться для изменения цвета фигуры (компонент Shape , объект TShape). Все, что Вам нужно сделать - это поместить на форму другую кнопку, изменить (при желании) ее имя на “ShapeColor”, а заголовок - на “Цвет Фигуры”, дважды щелкнуть по ней мышкой и создать метод аналогичный следующему:

procedure TForm1.ShapeColorClick(Sender: TObject);

begin

if ColorDialog1.Execute then

Shape1.Brush.Color:= ColorDialog1.Color;

end ;

Что может быть проще?!!

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

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

Весь механизм Windows-сообщений, используемый при взаимодействии компонент во время выполнения, оказывается скрытым от программиста, делая процесс создания программ наиболее легким. Сложное программирование в среде Windows становится доступным “широким” массам программистов. Например, программирование изменения размера фигуры с помощью полос прокрутки, требовавшее в “чистом” Windows сложной обработки сообщений в конструкции типа “case”, в Delphi сводится к написанию одной-единственной строчки кода.

Для начала, поместите два компонента ScrollBar на форму (находится на страничке “Standard”) и установите свойство Kind первого компонента в sbHorizontal , а второго - в sbVertical . Переключитесь на страничку “Events” в Инспекторе Объектов и создайте заготовки метода для отклика на событие OnChange для каждой полосы прокрутки. Напишите в каждом из методов по одной строчке следующим образом:

procedure TForm1.ScrollBar1Change(Sender: TObject);

begin

Shape1.Width:= ScrollBar1.Position * 3;

end ;

procedure TForm1.ScrollBar2Change(Sender: TObject);

begin

Shape1.Height:= ScrollBar2.Position * 2;

end ;

Код, показанный здесь, устанавливает свойства Width и Height фигуры TShape в соответствие с положением “бегунка” на полосах прокрутки (сомножители 3 и 2 введены только для лучшего представления).

Последняя часть программы SHAPEDEM демонстрирует большие возможности языка Object Pascal, на основе которого построен Delphi. Вы можете ввести элементы в список компонента ComboBox как в режиме проектирования, так и при выполнении программы. При этом в режиме проектирования Вы можете просто ввести нужные элементы в список Items , щелкнув маленькую кнопку с тремя точками в правой части строки Инспектора Объектов, показывающей данное свойство ( Items ).

Рис. 7: Текстовый редактор для ввода строк

Перед Вами появится диалоговое окно текстового редактора (String List Editor), в котором Вы и введете элементы (рис.7). Вы могли заметить, что список этих элементов совпадает со списком опций свойства Shape компонента Shape1 (Shape ). Другими словами, если Вы выделите компонент Shape1 на форме (просто щелкнув по нему) и посмотрите свойство Shape в Инспекторе Объектов, Вы увидите список возможных видов фигур, которые может принимать данный компонент. Это как раз те самые виды фигур, которые мы перечисляли в списке у компонента ComboBox1. Этот список Вы можете найти в on-line справочнике по Delphi по контексту “TShapeType”. Или же, если Вы заглянете в исходный код класса TShape , там увидите те же элементы, формирующие перечислимый тип TShapeType:

TShapeType = (stRectangle, stSquare, stRoundRect,

StRoundSquare, stEllipse, stCircle);

Итак, смысл всего сказанного в том, что за всеми объектами, которые Вы видите в “дельфийской” программе, стоит некий код на Паскале, к которому Вы имеете доступ при “прямом” программировании. Ничто не скрыто от Вас. Это значит, что Вы можете изменить поведение любой части Вашей программы во время выполнения путем написания соответствующего кода.

В нашем конкретном случае, Вам нужно написать только одну строчку кода, которая будет выполнена в качестве отклика на щелчок пользователем по выпадающему списку ComboBox1. Чтобы написать код этого отклика, в режиме проектирования выделите компонент ComboBox1 на форме (как всегда, просто щелкнув по нему левой кнопкой мыши), затем перейдите на страничку “Events” в Инспекторе Объектов. Дважды щелкните по пустому полю напротив события OnClick . В редакторе автоматически сгенерируется следующая заготовка метода:

procedure

begin

end ;

Теперь вставьте одну строчку кода, чтобы метод выглядел следующим образом:

procedure TForm1.ComboBox1Click(Sender: TObject);

begin

Shape1.Shape:= TShapeType(ComboBox1.ItemIndex);

end ;

Эта строчка кода устанавливает свойство Shape компонента Shape1 в вид, который пользователь выберет в выпадающем списке. Этот код работает благодаря соответствию между порядковыми членами перечислимого типа и числовыми значениями различных элементов в ComboBox . Другими словами, первый элемент перечислимого типа имеет значение 0, что соответствует первому элементу, показанному в ComboBox (см. рис.7). Давайте рассмотрим этот подход несколько подробней.

Если Вы рассмотрите декларацию перечислимого типа TShapeType, Вы увидите, что первый его элемент называется “stRectangle”. По определению, компилятор назначает этому элементу порядковый номер 0. Следующему по порядку элементу назначается номер 1 и т.д. Таким образом, слова “stRectangle”, “stSquare” и т.п., в действительности, просто символизируют порядковые номера в данном перечислимом типе. На элементы в списке ComboBox также можно сослаться по их порядковому номеру, начиная с 0. Именно поэтому так важно (в данном случае) вводить указанные строки в строгом соответствии с декларацией типа TShapeType. Таким образом, используя преобразование типа “ TShapeType (ComboBox 1. ItemIndex ) ”, Вы можете указать компилятору, что общего имеют элементы в ComboBox и перечислимый тип в TShapeType: а именно, порядковые номера.

Итак, Вы видите, что Delphi является очень гибким и мощным программным средством, которое позволяет Вам быстро реализовать логику Вашей программы и предоставляет полное управление приложением.

Другие похожие работы, которые могут вас заинтересовать.вшм>

6923. Методы в Delphi 57.07 KB
Для создания программы CONTROL1 поместите с помощью мышки компонент Edit находится на страничке “Stndrd†Палитры Компонентов на форму. После этого в активизировавшемся окне Редактора Вы увидите сгенерированный “скелет†метода Edit1DblClick являющегося реакцией на событие OnDblClick: procedure TForm1.Edit1DblClickSender: TObject; begin Edit1. Текст в этой строке изменится в соответствии с тем что мы написали в методе Edit1DblClick: см.
6924. События в Delphi 19.79 KB
События в Delphi Объекты из библиотеки визуальных компонент VCL Delphi равно как и объекты реального мира имеют свой набор свойств и свое поведение набор откликов на события происходящие с ними. Среди набора событий для различных объектов из VCL есть как события портируемые из Windows MouseMove KeyDown так и события порождаемые непосредственно в программе DtChnge для TDtSource. Простейшие события на которые иногда нужно реагировать это например события связанные с мышкой они есть практически у всех видимых объектов...
2451. GDI: графика в Delphi 26.05 KB
В Delphi контекст устройства представлен как TCnvs. Ниже приведены две функции которые используются для рисования линий и обе принадлежат TCnvs: Имя Описание Пример MoveTo Перемещает точку начала рисования линии в указанные координаты x и y Cnvs. Cnvs. например Cnvs.
6933. Управление проектом Delphi 80.6 KB
Как Вы увидите позже, большинство операций из пункта меню “File” можно выполнить с помощью Менеджера Проекта (Project Manager), который можно вызвать из пункта меню View. Некоторые операции доступны и через SpeedBar. Данная стратегия типична для Delphi: она предоставляет несколько путей для решения одной и той же задачи, Вы сами можете решать, какой из них более эффективен в данной ситуации.
6929. История языка Delphi 13.01 KB
Delphi это греческий город где жил дельфийский оракул. Delphi это комбинация нескольких важнейших технологий: Высокопроизводительный компилятор в машинный код Объектно-ориентированная модель компонент Визуальное а следовательно и скоростное построение приложений из программных прототипов Масштабируемые средства для построения баз данных Компилятор в машинный код Компилятор встроенный в Delphi обеспечивает высокую производительность необходимую для построения приложений в архитектуре...
6932. Стандартные компоненты Delphi 28.77 KB
На первой странице Палитры Компонент размещены 14 объектов рис. Создание меню включает три шага: 1 помещение TMinMenu на форму 2 вызов Дизайнера Меню через свойство Items в Инспекторе Объектов 3 определение пунктов меню в Дизайнере Меню. Вы можете изменить шрифт и цвет метки если дважды щелкнете на свойство Font в Инспекторе Объектов. Это полный список объектов на первой странице Палитры Компонент.
6931. Среда программирования Delphi 25.84 KB
0 Word for Windows Progrm Mnger это все MDI приложения и выглядят подругому чем Delphi. Среда Delphi же следует другой спецификации называемой Single Document Interfce SDI и состоит из нескольких отдельно расположенных окон. Если Вы используете SDI приложение типа Delphi то уже знаете что перед началом работы лучше минимизировать другие приложения чтобы их окна не загромождали рабочее пространство.
1421. Способы активизации 4-х окон Delphi 232.27 KB
Вычислить зарплату преподавателя с вычетом подоходного налога(13%) либо без него за указанный период (в часах) с учетом ставки почасовой оплаты: ассистент – 75 рублей/час, доцент – 150 рублей/час, профессор – 200 рублей/час. Рекомендованный вид формы показан на рисунке. Предусмотреть, чтобы пользователь мог ввести в поле
20996. Графические объекты в среде Delphi 365.54 KB
Цель работы: изучение графических возможностей среды Delphi для создания учебного материала по графике в Delphi. Для работы с графикой в Delphi существует библиотека визуальных компонентов VCL скрывающая механизм взаимодействия приложения с операционной системой и облегчающая работу с графикой. В каждом параграфе предлагается основной теоретический материал по теме практические задания с описанием пошагового выполнения действий для их выполнения вопросы для закрепления основных умений и навыков вырабатываемых в процессе изучения...
12494. Разработка аудиоплеера в кроссплатформенной среде Embarcadero Delphi 1.21 MB
Профессия программиста состоит не только из написания кода к физическим и логическим объектам программной среды она подразумевает умение работать с растровыми и векторными графическими редакторами использовать внешние аудио библиотеки и кодеки группировать объекты согласно их назначению и придавать законченный программный вид понятный и доступный для работы широкого спектра пользователей. Embrcdero Delphi [дэ́лф’и] ранее Borlnd Delphi и CodeGer Delphi интегрированная среда разработки ПО для Microsoft Windows Mc OS iOS иndroid на...

Рано или поздно любому программисту потребляется использовать процедуры и функции. Все мы помним еще с паскаля, что там ничего нет сложного, но некоторые вещи обычно в книжках не описываются, хотя для грамотного составления программы требуется знать.

Скобки

Добавление скобок при вызове процедур и функций без параметров уже давно не является новинкой в Delphi, тем не менее, эта возможность мало известна. Эту возможность оценят по достоинству те программисты, которым приходится работать на двух языках (C++ и Delphi), так как им не нужно будет постоянно помнить о разнице в синтаксисе при вызове процедур и функций в разных языках. В Delphi оба варианта, приведенные ниже, считаются корректными.

Form1.Show;
Form1.Show();

Возможность перегрузки

Впервые концепция перегрузки процедур и функций была реализована в Delphi 4. Она позволяет иметь несколько различных процедур и функций с одинаковыми именами, но с разными списками параметров. Такие процедуры и функции должны быть описаны с применением директивы overload.

Procedure Test (I: integer); overload;
procedure Test (S: string); overload;
procedure Test (D: double); overload;

При вызове процедуры Test, Delphi сама решит, какую из трех процедур необходимо выполнить, в зависимости от передаваемого ей параметра. Но нужно отметить, что это не самая безопасная возможность языка. Применение перегружаемых процедур и функций может стать неиссякаемым источником трудноуловимых ошибок в программе. Поэтому пользуйтесь этой возможностью осторожно.

Передача параметров

Pascal позволяет передавать параметры в функции и процедуры либо по значению, либо по ссылке. Передаваемый параметр может иметь любой встроенный или пользовательский тип либо являться открытым массивом. Параметр также может быть константой, если его значение в процедуре или функции не меняется.
Передача параметров по значению
Этот режим передачи параметров применяется по умолчанию. Если параметр передается по значению, создается локальная копия данной переменной, которая и предоставляется для обработки в процедуру или функцию. Посмотрите на следующий пример:

Procedure Test(s: string);

При вызове указанной процедуры будет создана копия передаваемой ей в качестве параметра строки s, с которой и будет работать процедура Test. При этом все внесенные в строку изменения никак не отразятся на исходной переменной s.

Однако это не относится к объектам. Например, если в функцию передается переменная (а точнее экземпляр объекта) TStringList, то в данном случае произойдет передача по ссылке (даже если это не указано явно). Этот способ передачи является у большинства самым излюбленным, но в тоже время является и самым не практичным, т.к. для выполнения метода выделяется дополнительная память для создания точной копией передаваемой переменой. Для решения этой проблемы следует использовать один из способов описанных ниже.

Передача параметров по ссылке
Pascal позволяет также передавать параметры в функции или процедуры по ссылке - такие параметры называются параметрами-переменными. Передача параметра по ссылке означает, что функция или процедура сможет изменить полученные значения параметров. Для передачи параметров по ссылке используется ключевое слово var, помещаемое в список параметров вызываемой процедуры или функции.

Procedure ChangeMe(var x: longint);
begin
x:= 2; // Параметр х изменен вызванной процедурой
end;

Вместо создания копии переменной x, ключевое слово var требует передачи адреса самой переменной x, что позволяет процедуре непосредственно изменять ее значение.

Передача параметров констант
Если нет необходимости изменять передаваемые функции или процедуре данные, можно описать параметр как константу. Ключевое слово const не только защищает параметр от изменения, но и позволяет компилятору сгенерировать более оптимальный код передачи строк и записей. Вот пример объявления параметра-константы:

Procedure Test(const s: string);

Передача открытых массивов
Открытый массив параметров позволяет передавать в функцию или процедуру различное количество параметров. В качестве параметров можно передать либо открытый массив элементов одинакового типа, либо массивы констант различного типа. В приведенном ниже примере объявляется функция, которой в качестве параметра должен передаваться открытый массив целых чисел.

Function AddEmUp(A: array of integer): integer;

В открытом массиве можно передавать переменные, константы или выражения из констант.

Для получения информации о фактически передаваемом массиве параметров в функции или процедуре могут использоваться функции High, Low и SizeOf.

Object Pascal также поддерживает тип array of const, который позволяет передавать в одном массиве данные различных типов. Синтаксис объявления функций или процедур, использующих такой массив для получения параметров, следующий:

Вызвать объявленную выше функцию можно, например, с помощью такого оператора:

Procedure WhatHaveIGot(["Text", 10, 5.5, @WhatHaveIGot, 3.14, true, "c"]);

При передаче функции или процедуре массива констант все передаваемые параметры компилятор неявно конвертирует в тип TVarRec. Тип данных TVarRec объявлен в модуле System следующим образом:

PVarRec = ^TVarRec;
TVarRec = record
case Byte of
vtInteger: (VInteger: Integer; VType: Byte);
vtBoolean: (VBoolean: Boolean);
vtChar: (VChar: Char);
vtExtended: (VExtended: PExtended);
vtString: (VString: PShortString);
vtPointer: (VPointer: Pointer);
vtPChar: (VPChar: PChar);
vtObject: (VObject: TObject);
vtClass: (VClass: TClass);
vtWideChar: (VWideChar: WideChar);
vtPWideChar: (VPWideChar: PWideChar);
vtAnsiString: (VAnsiString: Pointer);
vtCurrency: (VCurrency: PCurrency);
vtVariant: (VVariant: PVariant);
vtInterface: (VInterface: Pointer);
vtWideString: (VWideString: Pointer);
vtInt64: (VInt64: PInt64);
end;

Поле VType определяет тип содержащихся в данном экземпляре записи TVarRec данных и может принимать одно приведенных значений.

Поскольку массив констант способен передавать данные разных типов, это может вызвать определенные затруднения при создании обрабатывающей полученные параметры функции или процедуры. В качестве примера работы с таким массивом рассмотрим реализацию процедуры WhatHaveIGot, которая просматривает элементы полученного массива параметров и выводит их тип.

Procedure WhatHaveIGot(A: array of const);
var
i: integer;
TypeStr: string;
begin
for i:= Low(A) to High(A) do
begin
case A[i].VType of
vtInteger: TypeStr:= "Integer";
vtBoolean: TypeStr:= "Boolean";
vtChar: TypeStr:= "Char";
vtExtended: TypeStr:= "Extended";
vtString: TypeStr:= "String";
vtPointer: TypeStr:= "Pointer";
vtPChar: TypeStr:= "PChar";
vtObject: TypeStr:= "Object";
vtClass: TypeStr:= "Class";
vtWideChar: TypeStr:= "WideChar";
vtPWideChar: TypeStr:= "PWideChar";
vtAnsiString: TypeStr:= "AnsiString";
vtCurrency: TypeStr:= "Currency";
vtVariant: TypeStr:= "Variant";
vtInterface: TypeStr:= "Interface";
vtWideString: TypeStr:= "WideString";
vtInt64: TypeStr:= "Int64";
end;
ShowMessage(Format("Array item %d is a %s", ));
end;
end;

Значения параметров по умолчанию

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

Procedure HasDefVal(s: string; i: integer = 0);

Подобное объявление означает, что процедура HasDefVal может быть вызвана двумя путями. В первом случае - как обычно, с указанием обоих параметров:

Procedure HasDefVal("Hello", 26);

Во втором случае можно задать только значение параметра s, а для параметра i использовать значение, установленное по умолчанию:

Procedure HasDefVal("Hello");

При использовании значении параметров по умолчанию следует помнить о нескольких приведенных ниже правилах:

  • Параметры, имеющие значения по умолчанию, должны располагаться в конце списка параметров. Параметр без значения по умолчанию не должен встречаться в списке после параметра, имеющего значение по умолчанию.
  • Значения по умолчанию могут присваиваться только параметрам обычных типов, указателям или множествам.
  • Значение по умолчанию может передаваться только по значению либо с модификатором const. Оно не может быть ссылкой или нетипизированным параметром.
Одним из важных преимуществ применения значений параметров по умолчанию является простота расширения функциональных возможностей уже имеющихся процедур и функции с соблюдением обратной совместимости. Предположим, на рынок программных продуктов была выпущена программа, ключевым звеном которой является функция сложения двух целых величин:

Function Add(I1, I2: integer): integer;
begin
Result:= I1 + I2;
end;

Предположим также, что исследования показали целесообразность добавления в программу возможности сложения трех чисел. Однако замена имеющейся функции функцией сложения трех чисел приведет к тому, что вам придется переправлять немало текста, который перестанет компилироваться из-за внесения в функцию еще одного параметра. Однако при использовании значений параметров по умолчанию проблема решается легко и просто. Достаточно изменить объявление функции так, как показано ниже.

Function Add(I1, I2: integer; I3: integer = 0): integer;
begin
Result:= I1 + I2 + I3;
end;

Директива {$X-}

Директива {$X-} запрещает вызов функций как процедур (с игнорированием возвращаемого результата). По умолчанию этот режим включен ({$X+}). Так вот, запомните, использование переменной Result недопустимо при сброшенном флажке опции Extended Syntax, расположенном во вкладке Compiler диалогового окна Project Options, или при указании директивы компилятора {$X-}.

В каждой функции языка Objecl Pascal существует локальная переменная с именем Result, предназначенная для размещения возвращаемого значения. Кроме того, вернуть значение из функции можно также путем присвоения значения переменной, имеющей то же имя, что и данная функция. Это стандартный синтаксис языка Pascal, сохранившийся от его предыдущих версий. При использовании в теле функции переменной с ее именем не забывайте, что существуют большие отличия в обработке этого имени - все зависит от того, где она расположена - в левой части оператора присвоения или же в любом другом месте текста функции. Если имя функции указано в левой части оператора присвоения, то предполагается, что назначается возвращаемое функцией значение. Во всех других случаях предполагается, что осуществляется рекурсивный вызов этой функции.

Процедура и функция - это ключевые понятия в любом языке программирования, без которых не обходится ни одна серьезная программа. И поэтому очень важно иметь полное понимание о механизме их работы.

Action - определяет объект TAction . Это объект служит для быстрой привязки действий к компонентам, в особенности - к пунктам меню и панелям инструментов. Но может быть привязан и к форме. Для управления TAction служат редакторы TActionList со страницы Standard и TActionManager со страницы Additional .

ActiveControl - определяет элемент, который имеет в данный момент фокус ввода. Если выбрать какой-либо объект во время разработки (design-time), то при запуске приложения этот объект и будет иметь фокус ввода. Также свойство может быть полезно и во время выполнения (run-time) - можно узнать, какой объект "держит" фокус в данный момент, а также можно переместить фокус на любой из объектов. Пример: разместим на форме 2 кнопки - Button1 и Button2, а также TTimer (страница System ). Выбрав элемент Timer1, дважды щёлкнем в Инспекторе объектов напротив надписи OnTimer на вкладке Events, т.е. создадим обработчик события и напишем следующее: ActiveControl:=Button2; Теперь, запустив программу, каждую секунду фокус будет перемещаться на Button2.

Align - определяет выравнивание формы на экране. Свойство принимает одно из следующих значений:

  • alBottom - по нижнему краю;
  • alClient - вся пользовательская (клиентская) область;
  • alCustom - выравнивание определяется вызовом методом объекта-родителя;
  • alLeft - по левому краю;
  • alNone - без выравнивания;
  • alRight - по правому краю;
  • alTop - по верхнему краю.

AlphaBlend - включает/выключает прозрачность формы.

AlphaBlendValue - задаёт степень непрозрачности формы: 0 - форма полностью невидима, 255 - полностью видима. Прозрачность активируется только при установке свойства AlphaBlend в True.

Anchors - определяет направления, по которым компоненты "привязываются" к форме. Пример: если установить у формы значения akLeft и akRight этого свойства в True, и точно также сделать у кнопки, то при изменении ширины формы размер кнопки (ширина) также будет изменяться.

AutoScroll - включает автоматическое появление полос прокрутки (Scroll bars) на форме, когда размеров формы недостаточно для отображения всех элементов.

AutoSize - включает автоматическое изменение размеров формы согласно позициям размещённых на ней элементов.

BiDiMode - определяет двунаправленное отображение элемента. В некоторых языках письмо осуществляется не слево-направо, а наоборот. Это свойство создано как раз для этой цели.

BorderIcons - определяет множество кнопок, которые отображаются в заголовке окна:

  • biSystemMenu - единственный элемент, который не является кнопкой - отвечает за системное меню окна, которое вызывается комбинацией клавиш +[Пробел].
  • biMinimize - кнопка сворачивания (минимизации) окна;
  • biMaximize - кнопка разворачивания окна;
  • biHelp - кнопка справки.

Если хотя бы одна из кнопок сворачивания и разворачивания включена, то независимо от состояния другой, отображаются обе (но вторая естественно неактивна). Если выключены обе, они не отображаются вообще. Это не зависит от Delphi - так устроена ОС Windows.

BorderStyle - определяет поведение границ окна и общий тип окна:

  • bsDialog - диалоговое окно (из кнопок - только "Закрыть", иконки в заголовке окна нет);
  • bsNone - "чистый лист" (отсутствие у окна границ и заголовка) - применяется обычно для создания заставок во время запуска программы;
  • bsSingle - обычное окно, но с запретом изменения размеров;
  • bsSizeable - обычное окно (по умолчанию) - размеры формы можно изменять;
  • bsSizeToolWin - упрощённое окно с уменьшенным заголовком;
  • bsToolWindow - упрощённое окно с уменьшенным заголовком без возможности изменения размеров.

BorderWidth - ширина границы окна в пикселах. Граница является невидимой и расположена в пользовательской части формы.

Caption - текст заголовка формы.

ClientHeight , ClientWidth - размер клиентской (пользовательской) части формы, т.е. той, на которой располагаются компоненты.

Color - цвет формы.

Constraints - определяет минимальные и максимальные размеры высоты и ширины формы в пикселах. 0 - любое значение, т.е. без ограничений.

Ctl3D - свойство определяет 3D-вид формы. При выключенном - "плоское" изображение.

Cursor - курсор мыши в тот момент, когда он находится над формой.

DefaultMonitor - определяет, на каком мониторе появится форма. Имеет смысл применять это свойство только при наличии более, чем одного монитора (например, если несколько экранов).

DockSite , DragKing и DragMode - определяют поведение формы при осуществлении операций Drag&Drop.

Enabled - отвечает за общую активность формы. Если установлено в False, форма недоступна.

Font - шрифт, используемый на форме.

FormStyle - стиль формы или её поведение в MDI-приложении (многооконное приложение, где дополнительные формы располагаются "внутри" основной формы). Значения:

  • fsNormal - обычная форма (значение по умолчанию);
  • fsMDIChild - дочерняя (подчинённая) форма MDI-приложения;
  • fsMDIForm - главная форма MDI-приложения;
  • fsStayOnTop - форма находится поверх всех окон на экране.

Height - высота формы в пикселах. В отличие от ClientWidth является высотой с учётом заголовка и границ формы.

HelpContext , HelpFile , HelpKeyword , HelpType - свойства для связи формы с файлом справки в формате *.hlp .



Есть вопросы?

Сообщить об опечатке

Текст, который будет отправлен нашим редакторам: