Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

лекции delphi 1часть

.pdf
Скачиваний:
64
Добавлен:
16.03.2015
Размер:
814.86 Кб
Скачать

буквы Т. Если на форму помещены три кнопки Button и компонент PaintBox, то в объявлении класса формы получим:

type

TForm1 = class(TForm)

PaintBox1: TPaintBox;

Button1: TButton;

Button2: TButton;

Button3: TButton;

private

{ Private declarations }

public

{ Public declarations } end;

Для помещённых на форму компонентов непосредственно на форме или в окне Инспектора объектов задают значения свойств. Сначала выбирают нужный компонент из списка в верхней части Инспектора объектов или, щёлкнув по нему на форме, а затем задают значения свойств. Следует помнить, что некоторые свойства нельзя изменить на этапе дизайна, они доступны только во время выполнения программы. Такие свойства можно изменять программным путём. Свойства же, перечисленные в инспекторе объектов, разрешено изменять как на этапе проектирования, так и программно во время работы приложения (run time).

Многие свойства компонентов имеют значения по умолчанию, например, Name,

Caption, Visible, Color. Свойство Name определяет имя, под которым компонент известен в программе. Свойство Caption – это заголовок. Первоначально Caption получает значение от свойства Name. В дальнейшем эти свойства можно изменить. Строка, определяющая свойство Caption, может отсутствовать, а имя Name должно быть задано обязательно.

Например, для кнопки Button задано имя Button1, а свойство Caption, определяющее надпись на кнопке, имеет значение «Выполнить». При большом числе однотипных компонент им следует присваивать информативные имена.

Свойство Visible имеет тип ТBoolean, определяет видимость компонента. Если это свойство имеет значение true, то компонент видим.

Изменения свойств на этапе проектирования называют статическими. Статические изменения выполняют в окне Инспектора объектов. Изменения в ходе выполнения программы называют динамическими. Для реализации динамического изменения свойства в каком-либо обработчике события задают новое значение свойства с помощью

оператора присваивания. Например, чтобы компонент стал невидим во время выполнения программы, надо изменить значение свойства Visible на False:

Label1.Visible:= False;

Или во время выполнения программы можно изменить надпись на кнопке:

Button1.Caption:='Выполнить';

Для задания свойств в Инспекторе объектов действуют редакторы свойств, которые могут быть нескольких типов:

• текстовый – свойство вводится и редактируется как строка символов. Delphi

интерпретирует строку (в зависимости от свойства) как данные числового или строкового типа;

перечисляемый – свойство выбирается из списка. Список раскрывается при щелчке мышью по кнопке со стрелочкой, которая появляется при переходе в область значений свойства (например свойство Visible);

множественный – свойство представляет собой комбинацию значений из предлагаемого списка. Слева от названия такого свойства расположен значок +. Список,

содержащий возможные значения, открывается двойным щелчком по названию свойства

(свойство BorderIcons);

• объект – свойство является объектом, то есть содержит другие свойства, которые могут редактироваться самостоятельно. Например, свойство Font включает Color, Name, и

др. Такое свойство слева от названия имеет символ + и задание значений может выполняться как для множественного свойства. Кроме того, если поместить курсор в область значения свойства, то появится кнопка с точками, щелчок по которой откроет окно для задания свойств. Пользоваться диалоговым окном для редактирования свойств удобнее, чем выбирать их из списка.

3.2.3.Определение функциональности проекта

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

Для создания процедуры обработки события (обработчика), необходимо выделить компонент и перейти в Инспекторе объектов на страницу событий (Events), на которой перечислены все возможные события компонента. Если выполнить двойной щелчок в области значения нужного события, то Delphi автоматически создаст в модуле формы заготовку процедуры-обработчика. На передний план переместится окно Редактора кода,

и курсор будет помещён в то место процедуры, где программист должен написать код.

При этом в описание класса формы будет добавлен заголовок процедуры-обработчика.

Название обработчика образуется добавлением к имени компонента названия события без приставки On. Например, TForm1.Button1Click. Если в Инспекторе объектов изменить имя компонента, то произойдёт автоматическое переименование процедуры во всех файлах проекта.

Для удаления обработчика достаточно удалить код, написанный программистом.

Тогда при сохранении или компиляции модуля обработчик будет удалён из всех файлов проекта. Не рекомендуется удалять обработчики вручную. Следует помнить, что при удалении компонента все его обработчики остаются в модуле формы.

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

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

том числе для разных компонент. Такая процедура называется общим обработчиком и вызывается при возникновении любого связанного с ней события (например, одни и те же действия выполняются через меню и кнопкой).

Среди множества событий, предусмотренных для компонента, выделяют одно,

наиболее часто используемое. Создать заготовку обработчика такого события можно двойным щелчком по расположенному на форме компоненту.

3.2.4.События и их обработка

Обо всех происходящих в системе событиях Windows посылает сообщения приложению в виде записи определённого типа. Источником этих сообщений может быть драйвер устройства (например, клавиатуры или мыши), ядро системы, другие приложения. Delphi преобразует сообщения в свой формат и предлагает специальные методы для обработки сообщений. Однако в большинстве случаев можно обойтись без непосредственной обработки сообщений Windows, так как Delphi предоставляет более простой способ работы с сообщениями путём использования событий.

Событие представляет собой свойство процедурного типа, предназначенное для обеспечения реакции на те или иные действия. Задание значения этому свойству

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

События Delphi имеют различные типы, самым простым из которых является

TNotifyEvent, характерный для уведомляющих событий:

type TNotifyEvent = procedure (Sender: TObject) of object;

Единственный параметр Sender указывает объект-источник события. Более сложные события имеют кроме Sender и другие параметры, например событие, связанное с перемещением мыши, передаёт координаты указателя.

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

3.2.5.Формирование кода

Код пишется в окне Редактора кода, который имеет встроенные средства,

существенно облегчающие работу. К инструментальным средствам, используемым при записи кода, относятся: Code Insight, Code Explorer, Object Browser, механизм навигации в коде.

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

которому принадлежит компонент. Чтобы быстрее найти нужное название, желательно записать первые символы. Затем надо выбрать строку щелчком мыши и нажать на клавишу Enter (или дважды щёлкнуть левой кнопкой мыши по нужной строке):

соответствующее имя будет вставлено в код. Повторный вывод Подсказчика выполняется комбинацией клавиш Ctrl+пробел. Эта же клавиатурная комбинация позволяет вывести

Code Insight на экран при отключении автоматического режима работы.

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

Комбинацию клавиш Ctrl+пробел можно использовать после записи переменной,

оператора присваивания, в пустой строке. Во всех случаях появится подсказка. Правда,

иногда проще написать нужный текст, чем искать его в очень длинном списке.

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

Shift+Ctrl+пробел.

Иногда полезно воспользоваться имеющимися в Code Insight шаблонами стандартных структур языка Object Pascal. Перечень шаблонов выводится клавишами

Ctrl+J. Например, для оператора case один из шаблонов имеет вид:

case of

: ;

: ;

end;

Для быстрого перемещения по коду можно использовать закладки, которые устанавливаются командой контекстного меню Toggle Bookmark. Переход на нужную закладку выполняется командой контекстного меню Goto Bookmarks.

Очень удобно организован переход между объявлениями методов в интерфейсной секции и их реализацией. Для этой цели используются клавиши Ctrl+Shift и клавиша со стрелкой вверх или вниз (в зависимости от нужного направления перемещения).

3.2.6.Организация взаимодействия форм

Воперационной системе Windows можно выделить пять видов окон:

окна папок;

окна приложений;

диалоговые окна;

окна справочной системы;

окна сообщений.

Все виды окон представляют собой контейнеры. При разработке приложений,

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

Стандартное окно в Windows имеет заголовок, кнопки для вызова системного

(оконного) меню, кнопки сворачивания, разворачивания, закрытия окна и рамки,

позволяющие плавно изменять размеры окна.

Диалоговые окна предназначены для задания параметров, уточнения характеристик или действий. Диалоговыми окнами пользуются, когда надо что-то настроить или изменить. Диалоговые окна стандартизованы (но не стандартны!) за счёт применения в них типовых элементов управления. Диалоговые окна, как правило, имеют другой состав команд системного меню, не имеют средств для плавного изменения размеров, не содержат кнопок сворачивания и разворачивания окна.

Среда Windows поддерживает два режима отображения окон – модальный и немодальный. Диалоговые панели обычно работают в модальном режиме.

Модальное окно должно быть закрыто перед обращением к любому другому окну данного приложения. Модальное окно перехватывает управление, и пока оно не будет закрыто, попытка перейти в другое окно приложения блокируется Windows, операционная система выдаёт предупреждающий сигнал. Запрет перехода в другое окно при незакрытом модальном окне относится только к текущему приложению, пользователь может активизировать любое другое приложение Windows. Программно возможен доступ к

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

Если форм в приложении несколько, то одна из них является главной. Главная форма отображается при запуске приложения, остальные создаются, но отображаются по запросу. Закрытие главной формы приводит к завершению работы приложения. По умолчанию главной назначается форма, созданная первой, но при необходимости главной можно назначить другую форму. Задание главной формы выполняется в окне Project Options на вкладке Forms.

Если одна форма выполняет действия с другой формой или с расположенными на ней элементами, то в списке uses раздела implementation модуля первой формы должна быть ссылка на модуль второй формы.

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

активизировать главную форму;

выполнить команду File|Use Unit. В окне Use Unit выбрать имя файла модуля нужной формы (second).

После этого в секции implementation модуля основной формы появится строка: uses second;

Если форма second должна получать сведения с главной формы main, то форму main

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

После того как дополнительные формы связаны с главной, необходимо организовать их вызов. В простейшем случае можно на главной форме установить кнопки, с помощью которых открывать нужные окна. Для обработки события OnClick, наступающего при нажатии на кнопку вызова дополнительного окна, используются методы Show и ShowModal. Например, записанный в обработчике события OnClick метод Form2.Show

откроет обычное окно, заданное формой Form2, а метод Form3.ShowModal откроет модальное окно.

3.3. Форма

Форма является основным интерфейсным элементом в Delphi. С точки зрения

Windows форма представляет собой окно. С точки зрения Delphi форма – это визуальный компонент, играющий роль контейнера, который содержит другие компоненты,

определяющие функциональность приложения.

3.3.1.Свойства формы

Уформы достаточно много свойств. Первоначально Delphi устанавливает свойства

формы в значения по умолчанию. Изменить свойства формы можно в процессе проектирования (в Инспекторе объектов) или во время выполнения приложения.

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

Свойство Caption определяет заголовок окна. Изменить цвет, шрифт, размеры шрифта заголовка окна в Delphi нельзя. Это системные параметры Windows, которые задаются в свойствах экрана.

Разновидности форм определяются значениями свойства FormStyle и разнообразием заготовок, хранящихся в репозитории. Свойство FormStyle определяет, какой пользовательский интерфейс будет использован: Multiple Document Interface (MDI) –

многодокументный или Single Document Interface (SDI) – однодокументный. Это свойство может принимать значения:

fsMDIChild – дочернее окно MDI-приложения; fsMDIForm – главное окно MDI-приложения; fsNormal – обычное окно (значение по умолчанию):

fsStayOnTop – окно, расположенное поверх других окон на экране.

Если применяется SDI-интерфейс, то каждая форма (даже если их несколько)

существует в виде отдельного независимого окна. Одно из окон является главным, но не содержит других окон. В SDI приложении все формы имеют в свойстве FormStyle

значение fsNormal. Иногда устанавливается значение fsStayOnTop, чтобы окно всегда располагалось поверх других окон, даже если окно не активно.

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

Стиль рамки задаётся свойством BorderStyle, которое имеет значения: bsDialog – неизменяемая в размерах рамка, свойственная окнам диалога; bsSingle – неизменяемая в размерах рамка обычного окна;

bsNone – окно без рамки и заголовка;

bsSizeable – изменяемая в размерах рамка обычного окна;

bsToolWindow – рамка аналогична bsSingle, но окно имеет уменьшенный заголовок

(целесообразно использовать для служебных окон);

bsSizeToolWin – рамка аналогична bsSizeable, но с уменьшенным заголовком.

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

разворачивания и закрытия окна. Если значение свойства BorderStyle предполагает наличие заголовка, то можно свойством булевского типа BorderIcons задать нужные системные элементы окна.

3.3.2.События формы

Вэтом разделе рассматриваются события, характерные только для формы.

Событие OnCreate происходит при создании формы. В обработчике этого события обычно устанавливают начальные значения для свойств формы и помещённых на неё компонентов, запрашивают у Windows необходимые ресурсы и выполняют другие действия, которые следует совершить до вывода формы на экран.

Событие OnShow происходит после того, как форма была создана, но перед тем, как она становится видимой.

Событие OnActivate происходит, когда пользователь переключается на форму,

например при щелчке по форме мышью. Событие OnDeactivate наступает, когда форма теряет активность.

Событие OnHide происходит перед тем, как форма становится невидимой.

Событие OnCloseQuery наступает при попытке закрыть форму. Действие задаётся пользователем (кнопка Close) или программно (вызван метод Close). В обработчик события передаётся булевский параметр CanClose, разрешающий или запрещающий действительное закрытие формы.

Событие OnClose происходит после OnCloseQuery, непосредственно перед закрытием формы.

Событие OnDestroy происходит при удалении формы. Обработчик этого события освобождает ресурсы и выполняет заданные действия до того, как форма будет удалена.

3.3.3.Создание форм разного вида

Существует возможность создавать непрямоугольные окна. За внешний вид формы отвечает регион. Чтобы воспользоваться регионом, необходимо в обработчике события

OnFormCreate выполнить действия:

объявить переменную типа HRgn;

создать регион функцией CreateRectRgn (для прямоугольного региона) или

CreateEllipticRgn (для эллиптического региона);

• установить этот регион для окна функцией SetWindowRgn.

Например, создадим форму в виде окружности. procedure TfmCircle.FormCreate(Sender: TObject);

Var Region:HRgn;

begin

Region:=CreateEllipticRgn(30,30,400,400);

SetWindowRgn(fmCircle.Handle,Region,true)

end;

3.4. Компоненты

3.4.1.Общие свойства управляющих элементов

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

(для чтения и записи) и неизменяемые (только для чтения). В зависимости от времени установки разделяются на свойства времени проектирования и времени выполнения.

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

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

BitBtn, Edit, CheckBox, GroupBox и др.). Некоторые из этих окон могут содержать другие управляющие элементы (например, GroupBox, PageControl) и называются владельцами

(контейнерами). Изображает управляющие элементы-окна операционная система

Windows.

Рисуемые управляющие элементы (Label, Image, Shape, Bevel и др.) не являются окнами, не могут получать фокус ввода и содержать другие компоненты. Их отрисовку выполняет Delphi.

Местоположение на форме или внутри контейнера задаётся координатами левого верхнего угла Top и Left. Горизонтальные в вертикальные размеры определяют свойства

Width, Height.

Заголовок Caption представляет собой текстовую строку, которая может содержать управляющий символ & (амперсанд). Следующий за амперсандом символ отображается

подчёркнутым, его используют для активизации управляющего элемента с помощью клавиатуры.

Цвет Color может быть выбран произвольно или взят у своего владельца. Это определяется свойством ParentColor. Если значение свойства ParentColor равно true, то изменение цвета владельца приводит к автоматическому изменению цвета Color.

Внешний вид курсора мыши Cursor можно выбрать из предлагаемого набора. По умолчанию курсор имеет вид стрелки.

Свойство Enabled определяет доступность компонента для пользователя. Если имеет значение true, то компонент доступен. Недоступные компоненты отображаются блекло.

Font – сложное свойство, определяющее шрифт. Параметры шрифта задаются вложенными свойствами Color, Name, Size, Style, Height. Шрифт может быть независимым или определяться шрифтом владельца, в зависимости от свойства ParentFont логического типа.

HelpContext содержит номер темы в файле справочной системы. Для получения контекстной справки следует сфокусировать компонент и нажать на клавишу F1. Если

HelpContext имеет значение 0, то справка выводится по номеру темы владельца.

Свойство Hint определяет строку подсказки. Если задержать на компоненте курсор мыши, может появиться всплывающая подсказка. Разрешение или запрет на вывод всплывающей подсказки задаётся свойством логического типа ShowHint. В свою очередь,

ShowHint может зависеть от разрешения на вывод подсказки у владельца. Это определяется значением свойства ParentShowHint. Если ParentShowHint равно true, то запрет подсказки для владельца автоматически приводит к запрету для рассматриваемого компонента.

Свойство PopupMenu позволяет привязать к управляющему элементу контекстное

(всплывающее меню), которое выводится на экран щелчком по компоненту правой кнопкой мыши.

TabOrder – порядковый номер компонента в пределах владельца. Задаёт номер очереди для получения фокуса ввода.

TabStop – определяет возможность получения компонентом фокуса ввода. Если значение TabStop равно true, то компонент находится в очереди.

Свойство Visible управляет видимостью компонента. Если значение Visible равно true, то компонент виден, иначе – скрыт.

Для получения более полных сведений следует обратиться к справочной системе или литературным источникам.