МИНИСТЕРСТВО ОБРАЗОВАНИЯ РОССИИ Томский политехнический университет ____________________________________________________...
5 downloads
85 Views
318KB Size
Report
This content was uploaded by our users and we assume good faith they have the permission to share this book. If you own the copyright to this book and it is wrongfully on our website, we offer a simple DMCA procedure to remove your content from our site. Start by pressing the button below!
Report copyright / DMCA form
МИНИСТЕРСТВО ОБРАЗОВАНИЯ РОССИИ Томский политехнический университет _______________________________________________________
УТВЕРЖДАЮ Декан АВТФ ________________ Мельников Ю.С. “__” ______2002 г.
ПРИНЦИПЫ ВИЗУАЛЬНОГО ПРОГРАММИРОВАНИЯ Методические указания к лабораторной работе № 130 по курсу “Программирование и основы алгоритмизации” для студентов направления 550200 “Автоматизация и управление”
Томск - 2002
УДК 681.3 Принципы визуального программирования. Методические указания к лабораторной работе № 130 по курсу “Программирование и основы алгоритмизации ” для студентов направления 550200 “Автоматизация и управление”. .
Составитель Н.М. Семёнов Рецензент к.т.н., доцент Е.И. Громаков
Методические указания рассмотрены и рекомендованы методическим семинаром кафедры интегрированных компьютерных систем управления “___” ___________ 2002 г. Зав. кафедрой
А.М. Малышенко
ОГЛАВЛЕНИЕ 1 Проектирование формы .................................................................. 4 1.1 Время разработки и время выполнения ............................. 4 1.2 Размещение компонентов на форме ................................... 5 1.3 Размещение различных управляющих элементов .............. 5 1.4 Выбор группы компонентов ............................................... 7 1.5 Удаление компонентов ........................................................ 7 1.6 Перемещение компонентов ................................................. 7 1.7 Изменение размеров компонентов .................................... 8 1.8 Выравнивание размера компонентов ................................ 8 1.9 Выравнивание расположения компонентов .................... 9 2 Визуальные и объектные аспекты форм ........................................ 10 2.1 Присоединение программы обработки события ............. 11 2.2 Пример активной формы ................................................... 11 2.2.1 Управляющий элемент - кнопка ......................... 11 2.2.2 Управляющий элемент - метка ........................... 12 2.2.3 Методы обработки событий формы ................... 12 2.2.4 Объявление методов ............................................ 14 2.2.5 Параметры методов ............................................. 15 2.2.6 Реализации методов ............................................. 15 3 Свойства компонентов ......................................................................15 3.1 Установка свойств во время разработки ........................... 15 3.2 Простые свойства ............................................................... 16 3.3 Свойство с перечислимым выбором ................................ 16 3.4 Вложенные свойства ......................................................... 17 4 События ............................................................................................ 18 4.1 События, связанные с компонентами ................................ 18 4.2 Захват события ................................................................. 19 4.3 Обработка события ........................................................... 19 5 Архитектура приложения ............................................................... 19 5.1 Диалоговые окна ............................................................... 19 5.2 Формы как модальные диалоговые окна ........................... 20 5.2.1 Основная форма .................................................... 20 5.2.2 Вторичная форма .................................................. 21 5.2.3 Добавление методов обработки события .............21 5.3 Формы как немодальные диалоговые окна ....................... 23 5.3.1 Основная форма ................................................... 24 5.3.2 Вторичная форма ................................................. 24 5.3.3 Добавление методов обработки событий ............ 25 5.4 Модальные диалоговые окна ............................................. 27 5.4.1 Основная форма .................................................... 27 5.4.2 Вторичная форма .................................................. 27 5.4.3 Добавление методов обработки события ............. 28 6 Контрольные вопросы ....................................................................... 30 7 Дополнительное задание ................................................................... 30 8 Литература ......................................................................................... 31
Принципы визуального программирования Настоящая лабораторная работа ставит целью ознакомить студентов с принципами визуального программирования. Набор средств визуального программирования определяет подход и способ мышления при работе с таким продуктом для разработки программ, как Delphi. В процессе выполнения работы студенты изучают следующие темы: 1) Разработка форм, которая включает прорисовку визуальных управляющих элементов на этих формах. 2) Классы, поддерживающие визуальные управляющие элементы. 3) Визуальные компоненты. 4) Свойства компонентов. 5) События, которые обрабатываются визуальными компонентами. 6) Архитектура приложений.
1 Проектирование формы Формы - специальные окна, которые составляют основу приложений Delphi. О форме можно думать как о специальном визуальном объекте, который может содержать другие объекты, а именно, визуальные управляющие элементы. Другими словами, форма - вид окна - контейнера. Форма - тоже объект, потому что она имеет свойства и реагирует на события точно так же, как управляющие элементы, которые в ней содержатся. Когда Вы начинаете новый проект, Delphi выдаёт новую, пустую форму. Затем Вы добавляете к этой форме управляющие элементы, чтобы настроить её и определить, как форма будет взаимодействовать с приложениями пользователя. Фактически Delphi позволяет приложениям иметь много форм. В этом случае приложение имеет основную форму (которая открыта первой) и много вторичных форм, которые появляются в ответ на действия пользователя или на внутренние действия. Будучи окном, форма содержит стандартные части окна Windows, такие как меню управления, кнопку минимизации, кнопку максимизации, название окна и рамку изменяемого размера. 1.1 Время разработки и время выполнения Delphi поддерживает гибкую схему разработки формы. Настройка формы (в то время, пока программа не выполняется) называется временем разработки. Delphi даёт возможность настроить свойства формы и управляющих элементов, используя окно Инспектора объекта. Это окно показывает только те свойства, которые могут быть установлены до выполнения программы. Есть дополнительные свойства (изменяющиеся для каждого компонента), которые не могут быть установлены во время разработки, потому что такие начальные значения являются неуместными или неподходящими. Новые значения для этих свойств можно устанавливать во время выполнения (то есть во время, когда программа запущена на выполнение). Во время выполнения также можно устанавливать новые значения для свойств, определённых во время разработки. 1.2 Размещение компонентов на форме
4
Размещение компонентов на форме - самая интересная часть настройки формы. Основной процесс размещения заключается в следующем: 1. Выберите в Палитре компонентов закладку страницы, содержащей управляющий элемент, который Вы хотите вставить в форму. Если его расположение не известно, то можно просмотреть наборы различных компонентов. Когда Вы оставляете курсор мыши на кнопке компонента в Палитре компонентов, Delphi отображает имя этого компонента в маленьком жёлтом окне. Эта возможность помогает быстро познакомиться с различными компонентами. 2. Щёлкните по найденному компоненту на текущей странице Палитры компонентов. 3. Переместите мышь на форму. 4. Нажимая левую кнопку мыши, переместите мышь вниз и влево. По мере перемещения мыши Delphi показывает контур компонента, который Вы рисуете. Чтобы закончить прорисовку компонента на форме, отпустите кнопку мыши по Вашему усмотрению. Каждый компонент имеет собственное, заданное по умолчанию, изображение, заголовок, имя управляющего элемента и другие начальные значения. Применим вышеупомянутые шаги при размещении на форме одиночной кнопки: 1. Загрузите Delphi, если она ещё не загружена. 2. Выберите Файл/ Создать/ Приложение для создания нового проекта. 3. Нажмите на закладку страницы Standard в Палитре компонентов. 4. Нажмите на компонент кнопки (Button), который является седьмым компонентом, если считать слева. 5. Переместите мышь на нижнюю левую часть формы. 6. Нажав на левую кнопку мыши, переместите мышь вниз и влево. По мере перемещения мыши Delphi показывает контур кнопки, которую Вы рисуете. Чтобы завершить прорисовку кнопки, отпустите кнопку мыши по Вашему усмотрению. 7. Delphi отображает кнопку с заданным по умолчанию заголовком Button1, как показано на рис. 1. 1.3 Размещение различных управляющих элементов Чтобы поместить различные управляющие элементы на форму, повторите шаги, описанные в последнем разделе. Для размещения нескольких компонентов одного типа надо последовательно сделать следующее: 1. Нарисуйте первый компонент способом, описанным ранее. 2. Выберите первый компонент, нажав на него мышью. Delphi отобразит петельки (т. е. маленькие чёрные квадраты) на краях управляющего элемента. 3. Нажмите Ctrl - C, чтобы скопировать компонент в буфер обмена (Clipboard). 4. Нажмите Ctrl - V, чтобы вставит новую копию компонента. Эта копия имеет тот же самый заголовок (Caption) и другие свойства, но другое имя компонента. 5. Переместите скопированный компонент в нужное место на форме. 6. Повторите шаги со 2 по 5, чтобы поместить другой компонент. Сделаем те же шаги для добавления ещё трёх кнопок в форму, созданную в предыдущем разделе. Выполните следующие шаги:
5
Рис. 1. Кнопка с заданным по умолчанию заголовком.
Рис.2. Управляющие элементы - кнопки с одинаковыми заголовками. 1. Выберите компонент кнопки, нажав на неё мышью. 2. Нажмите Ctrl - C, чтобы скопировать управляющий элемент кнопки в буфер обмена. 3. Нажмите Ctrl - V, чтобы вставить новую копию кнопки. Эта копия также имеет заголовок (Caption) Button1, но её имя (Name) Button2 (см. Инспектор объекта). 4. Переместите скопированную кнопку вправо от первой кнопки. 5. Повторите шаги со 2 по 4, чтобы поместить ещё два управляющих элемента кнопки. Рис.2 показывает возникающие в результате кнопки, которые по умолчанию имеют один и тот же заголовок (Caption).
1.4 Выбор группы компонентов
6
Delphi позволяет выбрать сразу несколько компонентов, чтобы удалять, перемещать и выравнивать их одновременно. Чтобы выбрать группу компонентов, выполните следующие шаги: 1. Отмените выбор любого выбранного в настоящее время компонента или компонентов, просто нажимая на саму форму. 2. Чтобы выбрать первый компонент, нажмите на него. Delphi отобразит петельки на этом компоненте. 3. При удерживании клавиши Shift нажмите на другие компоненты, которые Вы хотите выбрать. Delphi отобразит серые петельки на выбранных управляющих элементах. Чтобы отменить выбор одиночного компонента из набора выбранных, нажмите на этот компонент, удерживая клавишу Shift. Нажатие мышью компонента при удерживании клавиши Shift переключает выбранное состояние этого компонента на противоположное. 1.5 Удаление компонентов Delphi позволяет удалять компоненты, либо один, либо несколько одновременно. Чтобы удалить один компонент, выберите этот компонент, нажав на него и затем на клавишу Delete. Чтобы удалить несколько компонентов, выберите группу компонентов (как описано в предыдущем разделе) и затем нажмите клавишу Delete. Вы можете нажать Ctrl - Z, чтобы восстановить компоненты, только что удалённые. 1.6 Перемещение компонентов В Delphi можно перемещать компоненты или по одному, или несколько одновременно. Чтобы переместить один компонент, выполните следующие шаги: 1. Выберите компонент, нажимая на него левой кнопкой мыши. 2. В то время как курсор мыши находится всё ещё над выбранным компонентом, удерживайте левую кнопку мыши. Это готовит компонент к перемещению. 3. Передвиньте мышь (при удерживании левой кнопки мыши), чтобы переместить выбранный компонент. 4. Отпустите левую кнопку мыши, когда компонент займёт новое положение на форме. Чтобы переместить группу компонентов, выполните следующие шаги: 1. Выберите компоненты, как описано ранее. 2. Переместите курсор мыши поверх одного из выбранных компонентов, и удерживайте левую кнопку мыши. Это готовит компонент к перемещению. 3. Передвиньте мышь (удерживая левую кнопку мыши), чтобы переместить выбранные компоненты. 4. Отпустите левую кнопку мыши, когда компоненты достигнут их нового положения на форме. 1.7 Изменение размеров компонентов
7
Delphi даёт возможность изменить за один раз размеры только одного компонента. Чтобы изменить размеры компонента, выполните следующие шаги: 1. Выберите компонент, нажимая на него левой кнопкой мыши. 2. Переместите мышь к петельке. Это действие заставляет курсор мыши изменить форму. Новая форма указывает направление изменения размеров компонента: вертикальное, горизонтальное или диагональное. 3. Удерживайте кнопку мыши нажатой, чтобы изменить размеры компонента. 4. Отпустите левую кнопку мыши, когда Вы всё выполнили. Рис. 3 показывает четыре кнопки после изменения размеров.
Рис.3. Управляющие элементы - кнопки после того, как изменились размеры. 1.8 Выравнивание размера компонентов Delphi обеспечивает выравнивание размеров выбранных компонентов. Надо сначала выбрать компоненты, чьи размеры Вы хотите выравнивать. Затем выберите Правка/ Размер, чтобы получить диалоговое окно Размер. Это диалоговое окно даёт возможность изменить размер группы компонентов, чтобы они были точно одной высоты или ширины. Опции «Ширина» изменяют горизонтальный размер выбранных компонентов. Опции «Высота» выравнивают вертикальный размер. Опции для устанавливания горизонтального или вертикального размера следующие: Без изменений - не изменять размер компонентов, Наименьшая - приводит размер группы компонентов к высоте и ширине самого маленького компонента, Наибольшая - приводит группу компонентов к высоте и ширине самого большого компонента, Задать - устанавливает заданную ширину или высоту для выбранного компонента. Рис.4 показывает кнопки после выравнивания размеров.
8
Рис.4. Кнопки после выравнивания размеров. 1.9 Выравнивание расположения компонентов Delphi также поддерживает выравнивание расположения выбранных компонентов. Сначала Вы должны выбрать компоненты, расположение которых надо выравнивать. Затем выберите Правка/ Выровнять, чтобы получить диалоговое окно Выравнивание. Это диалоговое окно даёт возможность выровнять позицию группы компонентов. Опции «По горизонтали» выравнивают компоненты по их правым краям, левым краям или по центру. Опции «По вертикали» выравнивают компоненты по их верхним граням, нижним граням или по центру. Представим опции для горизонтального или вертикального выравнивания: «Без изменений» - не изменяет положения компонентов, «По левому краю» - выравнивает выбранные компоненты по левому краю (только горизонтально), «По центру» - выравнивает выбранные компоненты по центру, «По правому краю» - выравнивает выбранные компоненты по правому краю (только горизонтально), «По верхнему краю» - выравнивает выбранные компоненты по верхнему краю (только вертикально), «По нижнему краю» - выравнивает выбранные компоненты по нижнему краю (только вертикально), «Равномерно» - устанавливает выбранные компоненты на равном расстоянии друг от друга, «По центру окна» - устанавливает компоненты в центре окна. Рис.5 показывает кнопки после выравнивания (в окне «Выравнивание» были выбраны опции «Равномерно» и «По верхнему краю» для вертикальных и горизонтальных расположений).
9
Рис.5. Кнопки после выравнивания расположения.
2 Визуальные и объектные аспекты форм Форма и её компоненты - не просто изображения, которые хорошо оживляются некоторой программой. Наоборот, форма и компоненты - оживлённые объекты, которые имеют видимую часть, скрытую часть и поддержку предварительно установленного поведения. Каждая форма и компонент имеют набор свойств, определяющих поведение и внешний вид. Кроме того, эти объекты поддерживаются методами (функциями и процедурами), которые их оживляют и дают им возможность взаимодействовать с другими окнами. Объектно - ориентированное программирование предлагает классы как некоторый каркас для моделирование форм и компонентов. Таким образом, если Вы думаете о форме или компоненте как об объекте, Вы можете расценивать вид формы или компонента как класс. Вспомните, что лабораторная работа “Программы и модули Delphi” познакомила Вас с общим синтаксисом класса, который включает публичные (public), защищённые (protected) и частные (private) поля и методы. Таким образом, поля класса, моделирующие форму, поддерживают свойства этой формы. Аналогично методы класса, моделирующего форму, поддерживают операции и обработку событий формы. Эти аспекты полей и методов применимы и к компонентам. Таким образом, класс, моделирующий форму, имеет поля, которые определяют внешний вид формы. Кроме того, тот же самый класс имеет другие поля для отслеживания информации о поведении формы. Кроме того, поддерживающий форму класс имеет методы, которые определяют, как форма реагирует на события. Delphi объявляет библиотеку классов, которые поддерживают форму и различные компоненты. Класс TForm поддерживает минимальную форму в приложении Delphi. Когда Вы создаёте новый проект, Delphi автоматически объявляет для поддержки формы проекта класс TForm1, как потомок класса TForm. В лабораторной работе “Элементы среды разработки Delphi” распечатка,
10
сгенерированная Delphi, создала класс TForm1 без полей и каких - либо методов. Это означало, что класс TForm1 просто унаследовал поля и методы класса TForm. В лабораторной работе “Программы и модули Delphi” программа BUTTON использовала класс TForm1 с полем CloseBtn и методом CloseBtnClick. Вообще распечатка класса TForm содержит 299 строк, что говорит о нетривиальности этого класса. 2.1 Присоединение программы обработки события Каждая форма и компонент имеют предварительно установленный набор событий, которые они могут обрабатывать. По умолчанию форма и компонент не отвечают ни на какое заранее установленное событие. Вы ответственны за выбор событий, на которые форма и компоненты отвечают. В большинстве приложений Delphi форма и каждый компонент отвечают на несколько событий. Реакция зависит от того, как форма и компоненты взаимодействуют с пользователем. Чтобы присоединить процедуру обработки события к форме или компоненту, надо выполнить следующие шаги: 1. Выберите форму или компонент, нажав на неё. Инспектор объекта отображает свойства или события для текущей формы или компонента. 2. Нажмите на закладку страницы «События» в Инспекторе объекта. Это окно показывает текущие события, которые уже обработаны. Первоначально не имеется никаких обработанных событий, и пункты для различных событий пусты. 3. Дважды нажмите мышью на строке события, которое Вы хотите обработать. Delphi объявит связанный метод обработки события и отобразит этот метод. 4. Напечатайте операторы, которые заставляют метод обработки события ответить на нужное событие. Например, чтобы закрыть форму, Вы можете напечатать оператор Close. 2.2 Пример активной формы Рассмотрим пример, в котором форма отвечает на нажатие пользователем мыши, а также на перемещение мыши. Форма отвечает на событие перемещения мыши (в то время, как курсор на форме) отображением текущих координат мыши. Форма имеет кнопку, нажатие на которую закрывает её, и управляющий элемент в виде статического текста, отображающего текущее положение мыши. Первый шаг в построении программы включает создание нового проекта. Последующие разделы обсуждают размещение различных компонентов и обеспечение формы методами обработки событий. 2.2.1 Управляющий элемент - кнопка Процессы добавления и настройки кнопки включают в себя следующее: 1. Выберите компонент кнопки (Button) из страницы в Палитре компонентов, помеченной Standard. 2. Теперь известным способом нарисуйте кнопку. 3. Выберите в Инспекторе объекта страницу, помеченную «Свойства». 4. Отредактируйте свойство Caption, заменив заданный по умолчанию заголовок на Close. 5. Отредактируйте свойство Name, заменив заданное по умолчанию имя управляющего элемента на CloseBtn.
11
6. Выберите в Инспекторе объекта страницу, помеченную «События». 7. Дважды нажмите на событие OnClick. Когда Delphi отобразит метод обработки события Click, введите оператор Close. 2.2.2 Управляющий элемент - метка Процесс добавления и настройки управляющего элемента метки (Label) состоит из следующего: 1. Выберите компонент Label из страницы, помеченной Standard в Палитре компонентов. 2. Нарисуйте управляющий элемент метки в верхнем левом углу формы и сделайте его достаточно широким, чтобы в нём писать. 3. Выберите страницу в Инспекторе объекта, помеченную «Свойства». 4. Отредактируйте свойство Caption, заменив заданный по умолчанию заголовок на [x,y]. 5. Отредактируйте свойство Name, заменив заданное по умолчанию имя управляющего элемента на MouseLbl. 2.2.3 Методы обработки событий формы Щёлкните в пустое место формы. Для добавления метода обработки события нажатия кнопки мыши выполните следующие шаги: 1. Выберите в Инспекторе объекта страницу, помеченную «События». 2. Дважды нажмите на событие OnClick. Когда Delphi отобразит метод обработки события Click, введите оператор: MessageDlg(‘You clicked on the form’, mtInformation, [mbOK],0); Чтобы добавить метод обработки события движения мыши, дважды нажмите на событие OnMouseMove. Когда Delphi отобразит метод обработки события, введите следующий оператор непосредственно перед ключевым словом begin: var s, bigStr : string; Теперь введите следующие операторы сразу после ключевого слова begin: Str(X,s); bigStr := ‘[‘ + s + ’,’; Str (Y,s); bigStr := bigStr + s + ‘]’; MouseLbl.Caption := bigStr; Сохраните модуль в файле UFORM.PAS, а проект - в файле FORM.DPR. Листинг1 показывает исходный текст для программного файла FORM.DPR. Листинг2 показывает исходный текст для библиотечного модуля UFORM.PAS. Выделенные строки показывают операторы, которые Вы напечатали сами. Листинг 1. Исходный текст для программного файла FORM.DPR. _________________________________________________________________________ 1: program Form;
12
2: 3: uses 4: Forms, 5: Uform in 'UFORM.PAS' {Form1}; 6: 7: {$R *.RES} 8: 9: begin 10 Application.Initialize; 11: Application.CreateForm(TForm1, Form1); 12: Application.Run; 13: end. _________________________________________________________________________
Листинг 2. Исходный текст для библиотечного модуля UFORM.PAS. _________________________________________________________________________ 1: unit Uform; 2: 3: interface 4: 5: uses 6: SysUtils, Windows, Variants, Messages, Classes, Graphics, Controls, 7: Forms, Dialogs, StdCtrls; 8: 9: type 10: TForm1 = class(TForm) 11: CloseBtn: TButton; 12: MouseLbl: TLabel; 13: procedure CloseBtnClick(Sender: TObject); 14: procedure FormClick(Sender: TObject); 15: procedure FormMouseMove(Sender: TObject; 16: Shift: TShiftState; 17: X,Y: Integer); 18: private 19: { Private declarations } 20: public 21: { Public declarations } 22: end; 23: 24: var 25: Form1: TForm1; 26: 27: implementation 28: 29: {$R *.DFM} 30: 31: procedure TForm1.CloseBtnClick(Sender: TObject);
13
32: begin 33: Close; 34: end; 35: 36: procedure TForm1.FormClick(Sender: TObject); 37: begin 38: MessageDlg('You clicked on the form', 39: mtInformation,[mbOK],0); 40: end; 41: 42: 43: procedure TForm1.FormMouseMove(Sender: Tobject; 44: Shift: TShiftState; 45: X,Y: Integer); 46: 47: var s, bigStr : String; 48: 49: begin 50: Str(X,s); 51: bigStr:='['+s+','; 52: Str(Y,s); 53: bigStr:=bigStr+s+']'; 54: MouseLbl.Caption:=bigStr; 55: end; 56: 57: end. _________________________________________________________________________ Строки с 13 по 17 показывают методы обработки события для формы и кнопки. Строка 13 содержит метод, который управляет нажатием кнопки. Строка 14 содержит метод, который отвечает на нажатие на форму. Строки с 15 по 17 содержат метод, который отвечает на перемещение мыши по форме. Строки с 31 по 34 поддерживают выполнение метода CloseBtnClick. Строки с 36 по 40 содержат исполнение метода FormClick. Строки с 43 по 55 реализуют метод FormMouseMove. Обратите внимание, что все реализации этих методов квалифицируют метод именем класса TForm1. 2.2.4 Объявление методов Класс формы объявляет методы, которые он использует, чтобы обрабатывать события и обеспечивать дополнительную поддержку. Строки с 13 по 17 в листинге 2 содержат объявление методов обработки события. Эти методы - процедуры Паскаля. Delphi сгенерировала объявления методов обработки события в строках с 13 по17. Если Вам надо вручную добавить вспомогательные методы в класс формы, Вы должны вставить объявления этих методов внутри объявления класса формы. В случае вспомогательных методов Вы можете вставлять их в частный или защищённый раздел в объявлении класса. 2.2.5 Параметры методов
14
Функция или процедура часто требует, чтобы вызывающий оператор обеспечил её информацией для обработки. Метод обработки события не исключение. Что касается текста методов обработки события, сгенерированного Delphi, то он содержит предварительно установленный список параметров. Например, метод обработки события CloseBtnClick (строка 13 в листинге 2) имеет один параметр, именуемый Sender. Этот параметр имеет тип объекта TObject. Аргумент (т.е. значение, поставляемое подпрограммой, которая вызывает метод) параметра Sender обеспечивает метод исходными данными о том, кто послал событие. Вам не нужно использовать информацию, переданную параметром Sender, если Вы не хотите знать, кто послал событие нажатия мыши. Строки с 15 по 17 в листинге 2 показывают параметры метода FormMouseMove. Этими параметрами являются Sender, Shift, X и Y. Параметр Shift сообщает о состоянии кнопок мыши и клавиш клавиатуры. Он позволяет определять, были ли нажаты левая, средняя или правая кнопки мыши и клавиши Ctrl, Shift и Alt. Параметры X и Y дают координаты расположения мыши при её движении. 2.2.6 Реализации методов Delphi генерирует только программу - каркас для реализации методов обработки события. Вы ответственны за ввод кода, который определит работу методов. Строка 33 содержит оператор Close, который составляет реакцию метода обработки события TForm1.CloseBtnClick. Обратите внимание, что метод не использует данные, переданные для параметра Sender. Строки 38 и 39 обеспечивают оператор MessageDlg, который реализует метод обработки события TForm1.FormClick. В этом методе также не используется значение параметра Sender. Строки 47 и с 50 по 54 предлагают программу реализации метода TForm1.FormMouseMove. Строка 47 объявляет две локальные переменные S и bigStr, которые имеют строковый тип. Строки с 50 по 54 содержат операторы, которые отображают текущее расположение мыши. Обратите внимание, что эти операторы используют данные, переданные для параметров X и Y. Операторы формируют строку, которая определяет текстовое изображение координат мыши и присваивает эту строку заголовку (свойству Caption) управляющего элемента - метки.
3 Свойства компонентов Свойства служат двум главным целям. Во - первых, они определяют внешний вид формы или компонентов. Во - вторых, они определяют их поведение. 3.1 Установка свойств во время разработки Delphi даёт возможность просматривать и изменять свойства формы или компонента во время разработки. Форма и компоненты приходят, как говорится, с установками производителя. Большинство этих установок подходит для среднестатистического пользователя, но некоторые из них Вам ещё надо настроить. Например, наиболее часто изменяются такие свойства, как заголовок и имя управляющего элемента. Когда Вы редактируете свойства формы или компонента, связанные с изображением на экране, Delphi сразу обновляет картинку. Некоторые
15
свойства, например, Boolean Visible, не меняют изображения компонента во время разработки. Имеется несколько типов свойств, основанных на характере их значений. Следующие подразделы обсуждают типы свойств. 3.2 Простые свойства Простые свойства - это те, чьи значения являются либо целыми, либо строками. Например, свойства Left и Top используют целые числа, определяющие расположение верхнего левого угла формы или компонента. Другие примеры - свойства Caption и Name, которые используют строки. Изменение установок для простых свойств предельно просто. Вы нажимаете на свойство, набираете новое значение и нажимаете Enter. Рис. 6 показывает типовой сеанс работы с проектом Delphi, в котором для редактирования выбрано свойство Caption.
Рис.6. Типовой сеанс работы с проектом Delphi, в котором для редактирования выбрано свойство Caption. 3.3 Свойства с перечислимым выбором Этот тип свойств поддерживает определённый заранее набор значений. Самый простой пример - свойства типа Boolean. Эти свойства могут иметь значения, которые являются или True, или False. Когда Вы нажмёте на установку свойства типа Boolean, Инспектор объекта изобразит маленькую стрелку “вниз”. Нажатие на эту кнопку вызывает прокручиваемый список возможных значений. В случае свойства типа Boolean Вы имеете только два значения: False и True. Другие свойства, предлагающие выбор, обычно имеют более длинные списки. Для выбора нового значения просто нажмите на значение в появившемся списке. Рис. 7 показывает типовой сеанс с проектом Delphi, в котором для редактирования значения выбрано свойство Visible типа Boolean. 3.4 Вложенные свойства Этот тип свойств поддерживает вложенные значения. Инспектор объекта помещает знак “плюс” слева от имени каждого вложенного свойства. Чтобы просмотреть значения вложенного свойства, дважды нажмите на него. Delphi придаёт
16
вложенному свойству формат иерархической структуры и отображает значения. Некоторые вложенные свойства имеют значения, которые сами по себе также являются вложенными свойствами. Например, свойство формы Font имеет значение Style в качестве вложенного свойства. Имеются два вида вложенных свойств: наборы и комбинированные значения. Инспектор объекта отображает наборы внутри квадратных скобок. Если набор пуст, то появляются квадратные скобки [ ]. Значения для свойства типа набора - обычно величины Boolean. Рис.8 показывает свойство Style типа набор с
Рис.7. Типовой сеанс с проектом Delphi, в котором для редактирования значения выбрано свойство Visible типа Boolean.
Рис.8. Свойство Style типа набор с булевыми значениями. Инспектор объекта отображает значения как ряд значений, которые имеют разные типы данных. Вы можете редактировать эти значения по одному. Некоторые свойства, например, Font, заставляют Инспектор объекта отображать в поле значения кнопку с тремя точками . Когда Вы нажимаете на эту кнопку, Инспектор объекта вызывает диалоговое окно, которое позволяет легко выбрать другое значение. На рис.9 показано такое диалоговое окно.
17
Рис.9. Диалоговое окно свойства Font.
4 События Программы DOS обычно линейны - они выполняются в определённой последовательности. Наоборот, приложения Windows (включая программы Delphi) управляются событиями. Программа Windows способна управлять многими альтернативными действиями, которые Вы можете совершать. Windows переводит эти действия, например, нажатие кнопки мыши, вызов меню опций и нажатия клавиш, в события. Программа Windows в дальнейшем имеет дело с этим событием. Следующие подразделы обсуждают захват и обработку событий в Delphi приложениях. 4.1 События, связанные с компонентами Форма и каждый компонент имеют предварительно установленный набор событий, которые могут быть обработаны. Эти события отвечают на общие действия, совершаемые пользователем. По умолчанию в Delphi имеются стандартные обработчики событий, связывающие события с формой или компонентом. Установка связи события с формой или компонентом - это часть настройки формы или компонента. Страница событий в Инспекторе объекта перечисляет события, которые обрабатываются и могут быть обработаны выбранной формой или компонентом. Обрабатываемые события имеют непустую строку в поле значения. Используйте придуманное Вами имя для метода обработки события, чтобы избежать очень длинного, заданного по умолчанию, имени. Имя должно указывать на компонент и событие, это внесёт ясность и упростит чтение. Не бойтесь использования заданного по умолчанию имени метода обработки события, если имя не слишком длинное.
18
4.2 Захват события Вы можете захватить события, показанные в Инспекторе объекта, определив метод обработки события. Delphi поддерживает два способа выбора такого метода: Двойное нажатие на поле значения. Delphi вставит заданное по умолчанию имя метода обработки события. В большинстве случаев заданное по умолчанию имя не требует корректировки. Ввод имени метода обработки события и затем нажатие Enter. Любая методика заставляет Delphi выполнить следующие задачи: Она вставит имя метода обработки события в объявлении класса формы. Вставит каркас программы реализации метода обработки события. Поместит курсор вставки внутри блока begin - end метода обработки события. Вам уже знаком выбор захватываемого события по программе BUTTON в предыдущей лабораторной работе и по программе FORM в настоящей лабораторной работе. 4.3 Обработка события Обработка захватываемого события включает размещение соответствующих операторов в методах обработки события. Обратитесь к листингу 2, который показывает три метода обработки события. Метод TForm1.CloseBtnClick имеет только оператор Close в строке 33. Аналогично метод TForm1.FormClick имеет только оператор MessageDlg в строках 38 и 39. Но метод TForm1.FormMouseMove использует пять операторов (в строках с 50 по 54) для требуемого отклика.
5 Архитектура приложения Delphi поддерживает создание приложений, которые используют многие формы. Этот раздел рассматривает различные виды форм, их использование и вызов. Каждое приложение Delphi имеет основную форму, которая появляется изначально при запуске программы на выполнение. 5.1 Диалоговые окна Диалоговые окна - специальные окна, которые обмениваются информацией с пользователем. Они отображают и/или получают данные. Имеется два вида диалоговых окон: модальные и немодальные. Модальные диалоговые окна (Modal) должны быть закрыты прежде, чем Вы сможете обращаться к любому уже существующему окну приложения. Причина этого ограничения в том, что модальные диалоговые окна обычно имеют дело с критическими данными, которые должны быть обработаны прежде, чем Вы продолжите выполнение программы. Немодальные диалоговые окна (Modeless), с другой стороны, дают Вам возможность обратиться к уже существующим окнам программы. Причина такой гибкости в том, что немодальные диалоговые окна не обрабатывают критических данных. Кроме того, использование немодальных диалоговых окон иногда очень удобно. Нередко бывает просто необходимо оставить немодальное диалоговое окно видимым, а в это время работать с другим окном.
19
5.2 Формы как модальные диалоговые окна Delphi даёт возможность создать вторичные формы и использовать их как модальные диалоговые окна. Процесс использования формы как диалогового окна прост. Следующая программа, FrmDlg1, демонстрирует эту возможность. Программа FrmDlg1 имеет две формы: основную форму и вторичную форму, которая работает как модальное диалоговое окно. Оcновная форма имеет кнопку с заголовком Close. Когда Вы нажимаете на эту кнопку, программа вызывает форму модального диалогового окна, которая содержит текст “Good Bye !” и кнопку ОК. Когда Вы нажимаете на кнопку ОК, Вы закрываете модальную форму, а заодно и основную форму, и заканчиваете программу. Рассмотрим шаги, определяющие настройку каждой формы. 5.2.1 Основная форма Как показано на рис.10, основная форма имеет один управляющий элемент кнопки. Чтобы настроить основную форму и управляющие элементы, выполните следующие шаги:
Рис.10. Основная форма программы FrmDlg1. 1. Выберите страницу Standard Палитры компонентов. 2. Нарисуйте управляющий элемент кнопки внизу основной формы. 3. Установите свойство Caption кнопки равным Close. 4. Установите свойство Name кнопки в CloseBtn. 5. Установите свойство Caption формы в Main Form. 6. Сохраните модуль для основной формы в файле UFORM11.PAS. 5.2.2 Вторичная форма Создайте вторичную форму, выбирая Файл/ Создать/ Форма. Вторичная форма имеет метку и один управляющий элемент кнопки, как показано на рис.11. Чтобы настроить вторичную форму и управляющие элементы, выполните следующие шаги: 1. Выберите вторичную форму. 2. Нарисуйте управляющий элемент кнопки внизу вторичной формы.
20
3. Установите свойство Caption кнопки в ОК.
Рис.11. Вторичная форма программы FrmDlg1. 4. Установите свойство Name кнопки в OKBtn. 5. Нарисуйте метку (Label) в середине формы. 6. Установите свойство Caption метки в Good Bye ! 7. Установите свойство Name метки в ByeLbl. 8. Дважды нажмите на вложенное свойство Font. 9. Установите свойство Size в 24. 10. Выберите вторичную форму, нажав на неё. 11. Установите свойство Caption формы в Modal Dialog Form. 12. Установите свойство Color в clYellow, чтобы выбрать жёлтый цвет. 13. Установите свойство BorderStyle в bsDialog. 14. Сохраните модуль для вторичной формы в файле UFORM12.PAS. 15. Сохраните проект в файле FRMDLG1.DPR. 5.2.3 Добавление методов обработки события Теперь надо добавить методы обработки события управления кнопками на основной и вторичной формах. Каждая кнопка должна обрабатывать события нажатия мыши. Для каждой формы сначала выберите эту форму, затем - кнопку. Далее, нажмите на страницу События в Инспекторе объекта и нажмите на значение события OnClick. Листинг 3 показывает исходный текст для модуля UFORM11.PAS. Выделенные строки показывают введённый вручную текст. Обратите внимание на оператор uses, который включает имя модуля Uform12. Это объявление необходимо, чтобы разрешить основной форме выдать вторичную форму, обратившись к переменной Form2. Эта переменная, которая экспортируется модулем Uform12, является образцом класса TForm2 и поддерживает вторичную форму. Листинг 4 показывает исходный текст модуля UFORM12.PAS. Выделенная строка 29 содержит оператор, который Вам нужно ввести для метода TForm2.OKBtnClick. Листинг 3. Исходный текст для модуля UFORM11.PAS. ______________________________________________________________________ 1: unit Uform11; 2: 3: interface 4:
21
5: uses 6: SysUtils, Windows, Variants, Messages, Classes, Graphics, Controls, 7: Forms, Dialogs, StdCtrls, 8: {Manualy insert unit name} 9: Uform12; 10: 11: type 12: TForm1 = class(TForm) 13: CloseBtn: TButton; 14: procedure CloseBtnClick(Sender: TObject); 15: private 16: { Private declarations } 17: public 18: { Public declarations } 19: end; 20: 21: var 22: Form1: TForm1; 23: 24: implementation 25: 26: {$R *.DFM} 27: 28: procedure TForm1.CloseBtnClick(Sender: TObject); 29: begin 30: Form2.ShowModal; 31: Close; 32: end; 33: 34: end. ______________________________________________________________________ Листинг 4. Исходный текст для модуля UFORM12.PAS. ____________________________________________________________________ 1: unit Uform12; 2: 3: interface 4: 5: uses 6: SysUtils, Windows, Variants, Messages, Classes, Graphics, Controls, 7: Forms, Dialogs, StdCtrls; 8: 9: type 10: TForm2 = class(TForm) 11: OKBtn: TButton; 12: ByeLbl: TLabel; 13: procedure OKBtnClick(Sender: TObject); 14: private 15: { Private declarations } 16: public
22
17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30: 31: 32:
{ Public declarations } end; var Form2: TForm2; implementation {$R *.DFM} procedure TForm2.OKBtnClick(Sender: TObject); begin Close; end; end.
Листинг 3 показывает исходный текст модуля Uform11, который поддерживает основную форму. Обратите внимание, как метод обработки события TForm1.CloseBtnClick вызывает вторичную форму как диалоговое окно. Оператор в строке 30 посылает ООР - сообщение ShowModal объекту Form2 (который представляет вторичную форму). Это ООР - сообщение заставляет форму вызывать унаследованный метод ShowModal, который отображает форму как модальное диалоговое окно. Важно заметить, что установка свойства BorderStyle вторичной формы в bsDialog придаёт вторичной форме вид диалогового окна. Выполнение программы возвращается к оператору Сlose в строке 31 только после того, как Вы закрываете вторичную форму. Закрытие вторичной формы происходит при нажатии кнопки ОК. Строка 29 в листинге 4 содержит оператор Сlose, который закрывает модальную диалоговую форму. 5.3 Формы как немодальные диалоговые окна Среда Delphi позволяет создавать вторичные формы и использовать их как немодальные диалоговые окна. Следующая программа демонстрирует эту возможность. Программа FrmDlg2 имеет две формы: основную и вторичную, которая действует как немодальное диалоговое окно. Основная форма имеет две кнопки с заголовками Closе и Show Form. Когда Вы нажимаете на последнюю кнопку, программа вызывает немодальную форму диалогового окна, которая содержит текст “Good Bye !” и кнопку ОК. Когда Вы нажимаете на кнопку ОК, немодальная форма закрывается. При нажатии на кнопку Close в основной форме Вы закрываете основную форму, немодальную диалоговую форму (если она открыта) и завершаете программу. Рассмотрим настройку каждой формы. 5.3.1 Основная форма Как показано на рис. 12, основная форма имеет два управляющих элемента: кнопки. Для настройки основной формы и её управляющих элементов выполните следующие шаги:
23
Рис. 12. Основная форма программы FrmDlg2. 1. Выберите страницу Standard Палитры компонентов. 2. Нарисуйте управляющий элемент - кнопку внизу основной формы. 3. Установите свойство Caption в Close. 4. Установите свойство Name кнопки в CloseBtn. 5. Нарисуйте другую кнопку внизу основной формы. 6. Установите свойство Caption новой кнопки в Show Form. 7. Установите свойство Name новой кнопки в ShowFormBtn. 8. Выберите форму и установите Caption в Main Form. 9. Сохраните модуль для основной формы в файле UFORM21.PAS. 5.3.2. Вторичная форма Создайте вторичную форму, используя опцию Файл/ Создать/ Форма. Вторичная форма имеет метку и один управляющий элемент кнопки. Чтобы настроить вторичную форму и управляющие элементы, выполните следующие шаги: 1. Выберите вторичную форму. 2. Нарисуйте кнопку внизу вторичной формы. 3. Установите свойство Caption кнопки в ОК. 4. Установите свойство Name кнопки в OKBtn. 5. Нарисуйте метку в середине формы. 6. Установите свойство Caption метки в Good Bye ! 7. Установите свойство Name метки в ByeLbl. 8. Дважды нажмите на вложенное свойство Font. 9. Присвойте свойству Size значение 24. 10. Выберите вторичную форму, нажав на неё. 11. Установите свойство Caption формы в Modeless Dialog Form. 12. Установите свойство Color в clYellow, чтобы выбрать жёлтый цвет. 13. Установите свойство Border Style в bsDialog. 14. Сохраните модуль для вторичной формы в файле UFORM22.PAS. 15. Сохраните проект в файле FORMDLG2.DPR. 5.3.3. Добавление методов обработки событий Теперь надо добавить методы обработки событий к управляющим элементам кнопок на основной и вторичных формах. Все кнопки обрабатывают событие нажатия мыши. Листинг 5 показывает исходный текст для модуля UFORM21.PAS. Выделенные
24
строки показывают код, вставленный вручную. Листинг 6 показывает исходный текст для модуля UFORM22.PAS. Выделенная строка 29 содержит оператор, который Вы должны вставить в метод TForm2.ClickOKBtn. Листинг 5. Исходный текст для модуля UFORM21.PAS. _________________________________________________________________________ 1: unit Uform21; 2: 3: interface 4: 5: uses 6: SysUtils, Windows, Variants, Messages, Classes, Graphics, Controls, 7: Forms, Dialogs, StdCtrls, 8: {manualy inserted unit name} 9: Uform22; 10: 11: type 12: TForm1 = class(TForm) 13: CloseBtn: TButton; 14: ShowFormBtn: TButton; 15: procedure CloseBtnClick(Sender: TObject); 16: procedure ShowFormBtnClick(Sender: TObject); 17: private 18: { Private declarations } 19: public 20: { Public declarations } 21: end; 22: 23: var 24: Form1: TForm1; 25: 26: implementation 27: 28: {$R *.DFM} 29: 30: procedure TForm1.ShowFormBtnClick(Sender: TObject); 31: begin 32: Form2.Show; 33: end; 34: 35: procedure TForm1.CloseBtnClick(Sender: TObject); 36: begin 37: Close; 38: end; 39: end. Листинг 6. Исходный текст для модуля UFORM22.PAS. __________________________________________________________________________ 1: unit Uform22; 2:
25
3: interface 4: 5: uses 6: SysUtils, Windows, Variant, Messages, Classes, Graphics, Controls, 7: Forms, Dialogs, StdCtrls; 8: 9: type 10: TForm2 = class(TForm) 11: OKBtn: TButton; 12: ByeLbl: TLabel; 13: procedure OKBtnClick(Sender: TObject); 14: private 15: { Private declarations } 16: public 17: { Public declarations } 18: end; 19: 20: var 21: Form2: TForm2; 22: 23: implementation 24: 25: {$R *.DFM} 26: 27: procedure TForm2.OKBtnClick(Sender: TObject); 28: begin 29: Close; 30: end; 31: 32: end. __________________________________________________________________________ Листинг 5 показывает исходный текст для модуля Uform21, который поддерживает основную форму. Обратите внимание на то, каким образом обрабатывающий событие метод TForm1.CloseBtnClick вызывает вторичную форму как диалоговое окно. Оператор в строке 32 посылает ООР - сообщение Show объекту Form2, который представляет вторичную форму. Это ООР - сообщение заставляет форму вызывать унаследованный метод Show, который отображает форму как немодальное диалоговое окно. Снова установка свойства BorderStyle вторичной формы в значение bsDialog придаёт вторичной форме вид диалогового окна. Строка 37 содержит оператор Close в отдельном обрабатывающем событие методе. Если бы строка 32 сопровождалась оператором Close, приложение выдало бы немодальную форму диалогового окна и затем быстро закрыло бы эту форму наряду с основной формой. Строка 29 в листинге 6 содержит оператор Close, который закрывает форму немодального диалогового окна. 5.4 Модальные диалоговые окна Delphi предлагает классы, которые поддерживают диалоговые окна. Рассмотрим, как форма вызывает модальное диалоговое окно, поддерживаемое классом диалогового окна. Следующая программа показывает вызов такого диалогового окна. Программа Dlg1 имеет две формы: основную и форму диалогового окна, которая действует как
26
модальное диалоговое окно. Основная форма имеет кнопку с заголовком Close. Когда Вы нажимаете на эту кнопку, программа вызывает модальное диалоговое окно, которое содержит текст Good Bye !, кнопку ОК и кнопку отмены Cancel. Когда Вы нажимаете на кнопку ОК, Вы закрываете модальную форму, также как и основную форму, и заканчиваете программу. Когда Вы нажимаете на кнопку Cancel, то закрывается только диалоговое окно. Рассмотрим шаги, входящие в настройку каждой формы. 5.4.1 Основная форма Основная форма имеет один управляющий элемент - кнопку, как и в программе FrmDlg1. Чтобы настроить основную форму и управляющие элементы, выполните следующие шаги: 1. Выберите страницу Standard Палитры компонентов. 2. Нарисуйте управляющую кнопку внизу основной формы. 3. Установите свойство Caption кнопки в Close. 4. Установите свойство Name в CloseBtn. 5. Установите заголовок формы Main Form. 6. Сохраните модуль для основной формы в файле UDLG11.PAS. 5.4.2 Вторичная форма Создайте вторичную форму, используя Файл/ Создать/ Ещё/ Dialogs/ Standard Dialog (Horizontal). Форма диалогового окна должна иметь метку и две управляющие кнопки, как показано на рис. 13. Изначально диалоговоеокно имеет кнопки ОК, Cancel. Выполните следующие шаги: 1. Выберите вторичную форму. 2. Нарисуйте метку в середине диалогового окна. 3. Установите свойство Caption метки в Good Bye ! 4. Установите свойство Name метки в ByeLbl. 5. Нажмите два раза на вложенное свойство Font. 6. Установите свойство Size, равное 20. 7. Сохраните модуль для вторичной формы в файле UDLG12.PAS. 8. Сохраните проект в файле DLG1.DPR.
Рис 13. Форма диалогового окна программы DLG1.
27
5.4.3. Добавление методов обработки события В форму диалогового окна и основную форму надо добавить обрабатывающие событие методы для управления кнопками. Каждая кнопка должна обрабатывать событие нажатия мыши. Листинг 7 показывает исходный текст для модуля UDLG11.PAS. Выделенные строки показывают код, вставленный вручную. Обратите внимание, что оператор uses включает имя модуля Udlg12. Это объявление необходимо, чтобы дать возможность основной форме выдать форму диалогового окна, обращаясь к переменной OKBottomDlg. Эта переменная, экспортируемая модулем Udlg12, является образцом класса TOKBottomDlg и поддерживает форму диалогового окна. Листинг 8 показывает исходный текст для модуля UDLG12.PAS. Выделенные строки содержат операторы, которые Вы должны вставить для методов TOKBottomDlg.OKBtnClick и TOKBottomDlg.CancelBtnClick Листинг 7. Исходный текст для модуля UDLG11.PAS. ________________________________________________________________________ 1: unit Udlg11; 2: 3: interface 4: 5: uses 6: SysUtils, Windows, Variants, Messages, Classes, Graphics, Controls, 7: Forms, Dialogs, StdCtrls, 8: {manualy inserted unit name} 9: Udlg12; 10: 11: type 12: TForm1 = class(TForm) 13: CloseBtn: TButton; 14: procedure CloseBtnClick(Sender: TObject); 15: private 16: { Private declarations } 17: public 18: { Public declarations } 19: end; 20: 21: var 22: Form1: TForm1; 23: 24: implementation 25: 26: {$R *.DFM} 27: 28: procedure TForm1.CloseBtnClick(Sender: TObject); 29: begin 30: if OKBottomDlg.ShowModal = mrOK then 31: Close; 32: end; 33:
28
34: end. ________________________________________________________________________ Листинг 8. Исходный текст модуля UDLG12.PAS. ________________________________________________________________________ 1: unit Udlg12; 2: 3: interface 4: 5: uses Windows, SysUtils, Classes, Graphics, Forms, Controls, Buttons, 6: StdCtrls, ExtCtrls; 7: 8: type 9: TOKBottomDlg = class(TForm) 10: OKBtn: TBtn; 11: CancelBtn: TBtn; 12: Bevel1: TBevel; 13: ByeLbl: TLabel; 14: procedure OKBtnClick(Sender: TObject); 15: procedure CancelBtnClick(Sender: TObject); 16: private 17: { Private declarations } 18: public 19: { Public declarations } 20: end; 21: 22: var 23: OKBottomDlg: TOKBottomDlg; 24: 25: implementation 26: 27: {$R *.DFM} 28: 29: procedure TOKBottomDlg.OKBtnClick(Sender: TObject); 30: begin 31: ModalResult:=mrOK; 32: end; 33: 34: procedure TOKBottomDlg.CancelBtnClick(Sender: TObject); 35: begin 36: ModalResult:=mrCancel; 37: end; 38: 39: end. ________________________________________________________________________ Листинг 7 показывает исходный текст модуля Udlg11, который поддерживает основную форму. Обратите внимание на то, как обрабатывающий событие метод TForm1.CloseBtnClick вызывает диалоговое окно в операторе на 30 строке. Этот оператор посылает ООР - сообщение ShowModal объекту OKBottomDlg (который
29
представляет форму диалогового окна). Это ООР - сообщение заставляет форму вызывать унаследованный метод ShowModal, который отображает форму как модальное диалоговое окно. ООР - сообщение расположено в операторе if, который сравнивает результат сообщения с предопределённой константой mrOK. Это сравнение определяет, нажал ли пользователь кнопку ОК. Если это условие выполнено, выполнение программы продолжается в 31 строке. Эта строка содержит оператор Close, который закрывает основную форму. Листинг 8 содержит два метода обработки события. Метод TOKBottomDlg.OKBtnClick назначает заданную константу mrOK свойству ModalResult (строка 31). Это свойство передаёт своё значение методу ShowModal. Обратите внимание, что метод обработки данного события не имеет никакого оператора закрытия диалогового окна. Метод TOKBottomDlg.CancelBtnClick присваивает предопределённую константу mrCancel свойству ModalResult (строка 36).
6 Контрольные вопросы 1. Что можно делать с группой выбранных компонентов ? 2. Всегда ли нужно использовать данные, переданные параметрами обрабатывающего событие метода ? 3. Чем отличается модальное диалоговое окно от немодального ? 4. Что такое вторичная форма ? 5. Верно ли, что Delphi создаёт класс формы (чьё имя по умолчанию TForm1) как потомок класса TForm ?
7 Дополнительное задание 1. Создайте программу dlg2, которая является версией dlg1 и поддерживает немодальное диалоговое окно. Выполните следующие шаги: а) сохраните файл UDLG11.PAS как UDLG21.PAS, б) сохраните файл UDLG12.PAS как UDLG22.PAS, в) сохраните файл проекта как DLG2.DPR, г) добавьте кнопку ShowForm к основной форме, д) отредактируйте обрабатывающие событие методы для кнопки на обеих формах.
8 Литература 1.Возневич Э. Delphi. Освой самостоятельно. - М.: Восточная Книжная Компания, 1996. - 736 с. 2. Рубенкинг Н. Программирование в Delphi для “чайников”. -К.: Диалектика, 1996. - 304 с. 3. Фаронов В. Delphi 6: учебный курс. – СПб.: Питер, 2002. – 512 с.
30
ПРИНЦИПЫ ВИЗУАЛЬНОГО ПРОГРАММИРОВАНИЯ
Методические указания
Составитель Николай Михайлович Семёнов
Подписано к печати Формат 60*84/16. Бумага писчая №2. Плоская печать. Усл. печ. л. . Уч. - изд. л. . Тираж экз. Заказ № . Бесплатно. Ротапринт ТПУ. 634034, Томск, пр. Ленина,30.
31