- •Базы данных
- •1. Введение в базы данных
- •1.1. Базы данных и информационные системы
- •1.2. Архигсюура информационной системы
- •1.3. Системы управления базами данных
- •1.4. Локальные информационные системы
- •1.5. Способы разработки и выполнения приложений
- •1.6. Схема обмена данными при работе с бд
- •2. Модели и типы данных
- •2.1. Иерархическая модель
- •Сотоудники
- •2.2. Сетевая модель
- •2.3. Реляционная модель
- •2.4. Постреляционная модель
- •2.5. Многомерная модель
- •1996 1994 Петров Смирнов Яковлев
- •2.6. Объектно-ориентированная модель
- •2.7. Типы данных
- •3. Реляционная модель данных
- •3.1. Определение реляционной модели
- •3.2. Индексирование
- •3.3. Связывание таблиц
- •3.4. Контроль целостности связей
- •3.5. Теоретические языки запросов
- •I аспределенное Удаленное Распределен- Удаленн! 1йдо- Распределен- предстаеление представление ная функция ступ к данным наяЬд
- •4.5. Информационные системы в Интернете и интранете
- •Часть 2. I Ъоектиросанн ? и использование бд
- •7. Средства автоматизации проектирования
- •7.1. Основные определения
- •7.8. Рекомендации по применению case-систем
- •9. Дополнительные вопросы применения баз данных
- •9.1. Программно-аппаратные платформы
- •9.2. Перспективы развития субд
- •9.3. Стандартизация баз данных
- •9.4. Характеристика технологии ado.Net
- •10.1. Общая характеристика
- •10.2. Новые возможности Microsoft Access 2002
- •10.3.Средства поддержки проектирования
- •10.4. Создание основных элементов бд
- •IQdbl mdb
- •Option Compare Database Public Function funl() beep End Function
- •10.5. Работа с гиперссылками
- •10.6. Использование языка sql
- •Аргументы макрокоманды ' Инструкция sQl. Select distinctrow tof
- •10.7. Защита баз данных
- •10.9. Обслуживание баз данный
- •10.10. Репликация баз данных
- •Реплицируемые объекты
- •Реплицируемые объекты
- •10.11. Работа с мультимедиа-данными
- •Тип объекта
- •Comic Chat Boom Microsoft Graph so Music Prop pry Page 2 1 Option f ropery Page21 Ры-ndox FableВидео-клип
- •10.12. Создание файлов приложений
- •10.13. Страницы доступа к данным
- •Краткая характеристика отличий сДд от форм и отчетом
- •10.14. Разработка проекта
- •Распределение атрибутов по вариантам
- •11.1. Пользовательский интерфейс
- •11.2. Характеристика проекта
- •11.3. Компиляция и выполнение проекта
- •11.4. Разработка приложения
- •11.5. Средства интегрированной среды разработки
- •Управление параметрами среды
- •11.6. Базы данных и средства работы с ними
- •Компоненты приложений для баз данных
- •11.7. Создание таблиц базы данных
- •11.8. Создание приложения bde
- •Значения свойств компонентов
- •11.9. Работа с отчетами
- •12. Субд Visual FoxPro 8.0
- •12.1. Общая характеристика
- •12.2. Новые возможности Visual FoxPro 8.0
- •12.3. Элементы проекта
- •12.4. Интерфейс Visual FoxPro
- •12.5. Средства автоматизации разработки
- •12.6. Создание баз данных
- •12.7. Таблицы и индексы
- •12.8. Организация межтабличных связей
- •12.9. Обеспечение ссылочной целостности
- •12.10. Создание запросов
- •Variables:
- •13. Microsoft sql Server 2000
- •13.1. Характеристика sql Server
- •13.2. Язык запросов Transact-sql
- •13.3. Системные базы данных и таблицы
- •13.4. Создание баз данных
- •13.5. Работа с таблицами
- •15.1. Принципы функционирования Web-приложений
- •15.2. Архитектура Web-приложений, публикующих бд
- •15.3. Обзор Web-серверов
- •15.4. Использование Personal Web-server
- •15.5. Использование Microsoft Internet Information Server
- •15.6. Использование Apache дляMicrosoft Windows 9х/2000
- •Вы видите это вместо ожидаемой страницы?
- •15.7. Варианты создания Web-узла
- •16. Интерфейсы программирования Web-приложений
- •16.1. Общий интерфейс взаимодействия cgi
- •18. Публикация бд средствами Microsoft Access
- •18.1. Характеристика вариантов публикации
11.4. Разработка приложения
С++ Builder относится к системам визуального программирования, называемым также системалм RaD (Rap d Application Development, быстрая разработка приложений). Pajpa6oTKa приложения в С++ Builder включает два взаимосвязанных этапа:
создание пользовательского интерфейса приложения;
определение функциональности приложения.
Пользовательский интерф( ис приложения опреде ч чет спсх об взаимодействия ноль ювателя и приложения, т. е. внешний вид формы (форм) при выполнении приложения и то, каким образом пользоват ель управляет приложением. Интерфейс кочет руируется пут ем размещения в форме компонентов, называемых интерфейсными компонентами или элементами управления. Создается пользова тельский интерфейс при тожения с помощью окна Формы, которое в среде разработки представляет собой модель формы времени выполнения.
Функциональность приложения определяется процедурами, которые выполняются при возникновении определенных событий, например, происходящих при действиях пользователя с элементами управления формы.
Таким образом, в процессе разраоотки прил« (жения в форму помещаются компоненты, для них устангь^иваются необходимые свойства и создаются обработчики событий.
Пример простейшего приложения
Создадим для примера простейшее приложение. Слово «создадим» в данном случае является не совсем точным, г. к. создавать и т ем более программировать не придется вообще ничего: С++ Builder изначатьно предоставляет готовое приложение, состоящее из одной формы.
Сразу же после создания нового приложения С++ Builder предлагает разработчику «пустую» форму. Данная форма не является пустой в буквальном смысле слова - она содержит основные элементы окна Windows: заголовок Forml, кнопки сворачивая ш, разворачивания и закрытия окна, изменения размеров окна и кнопку вызова системного меню окна. Именно эта форма отображается при первом запуске С++ Builder в окне формы.
Любое приложение Windows выполняется в соответс твующем окне. Даже если оно ничего не делает в смысле функциональности, т. е. является пустым, то все равно до.чжно иметь свое окно. С++ Builder — это среда разработ ки приложений под Windows, поэтому для любого разрабатываемого приложения автоматически предлагается окно (форма), для которой уже созданы два фалла — с описанием и модулем.
Итак, простейшее приложение создается автоматически каждый раз в на- чате работы над новым проектом и является отправной точкой для дальней ших действий. Это при ложение имеет минимум того, что нужно побому приложению, выполняемому в среде Windows, и ни одним элементом больше.
IIpoi тейшее приложение представляет из себя заготовку или каркас, обеспечивающий разработчика всем необходимым для кажд< >го приложения во обще. Так, не нужно писать свой обработчик событий клавиатуры или драйвер мыши, а также создавать пакет процедур для работы с окнами. Более того, нет необходимости интегрировать драйвер мыши с пакетом для работы с окнами. Эти все уже выполнена создателями С++ Builder, и каркас приложения представляет собой полностью завершенное и функционирующее приложение, которое никаких действий не производит.
Отметим, что окно (а вместе с ним и приложение) действительно ничего не делает с точки зрения пользователя — оно не предостав тяе т функциональности, специфичной для каждого приложения. Вместе с гем это пустое окно выполняет достаточно бо. [ыпую работу с точки зрения npoi раммиста. Например, оно ожидает действий пользователя, связанных с мышью и клавиагу рой, и peai ирует на изменение своего размера, перемещение, закрытие и некоторые другие команды.
В полной мере оценить эти возм< >жност и окна можег только программист, который писал приложения под Windows традиционным спосебо i, г. е. вруч ную и без IDE. Изнутри Windows представляет собой систему с индексами, кон текстами, обратными вызовами и множеством других сложнейших элементов, которые надо знать, которыми нужно управлять и в которых легко запутаться. ()днако поскольку эти элементы имеют ся в каждом функционирующем приложении Windows, достаточно написать их один раз и в дальнейшем уже пользоваться готовыми блоками. Именно это и осуществляет система С++ Builder, избавляя тем самым программиста от сложной рутинной работы.
При компиляции проекта можно использовать специальные пакеты динамически загружаемых библиотек (DLL), что позволяет в значительной степени уменьшить размер приложения. Однако при этом приложение уже не является автономным и в процессе своей работы обращается к пакетам, которые были задействованы при компиляции проекта.
При конструиров 1нии приложения разработчик добав тлет к простейшему приложению новые формы, управляющие элементы, а также новые обработчики событий.
Создание пользовательского интерфейса
Пользовательский интерфейс приложения составляют компоненты, которые ра .работчик выбирает в Палитре компонентов и размещает в форме. При конструировании интерфейса приложения действует принцип WYSIWYG (What You See Is What You Get — «что видите, то и получаете»), и разработчик при создании приложения видит форму почти такой же, как и при его выполнении
Компонелты являются струкгурными единицами и делятся на визуаль ные (видимые) и невизуальные (системные). При /том понятия «видимый» и «невидимый» относятся только к этану выполнения, на этане проектирования видны все компоненты приложения.
К визуальным компонентам относятся, например, кнопки, списки или переключатели, а также собственно форма Так как с помощью визуальных ком нонентов пользователь управляет приложением, их также называют управ ляющими компонентами или элементами управления. Именно визуальные компоненты oi)разуют чо. [ьзовательский интерфейс при тюженич.
К невизуальньш компонентам относятся компонент ы, выполняющие вспомогательные, но не менее важные действия, например, таймер Timer (позволяет отсчит ывать интервалы времени).
При создании интерфейса приложения для каждого компонента выпол • няются следующие операции:
выбор компонента в Палитре компонентов и размещение его в форме;
изменение свойств компонента.
Разработчик выполняет эти операции в окне Формы, используя Палитру компонентов и Инспектор объектов. 11ри этом действия разработчика похожи на работу в среде графического редактора, а сам процесс создания интерфейса приложения больше напоминает конструирование или рисование, чем традиционное программирование. В связи с этим часто работу но созданию интерфейса называют конструированием.
Выбор компонента в Пали гре компонентов выполняется щелчком мыши на нужном компоненте, например на кнопке Button, в результате чего его значок принимает утопленный (нажатый) вид. Если после этого щелкнуть на сво6< >д- ьом месте Формы, то на ней появляется выбранный компонент, а его значок в Палитре компонентов принимает обычный (ненажатый) вид. Значки компонентов от ражают назначение компонент ов, и при наличии небольших практических навыков выбор нужного компонента происходит достаточно быстро. Кроме того, при наведении на каждый компонент указателя мыши отображается всплывая ицая подсказка с информацией о его назначении.
Обозначения классов (типов объектов) в С++ Builder, в том числе компонентов, начинаются с буквы Т. Иногда типы (TButtuil, TLabel) используются вместо имен (Button, Label) для обозначения компонентов. Мы будем исполь зовать для компонентов имена или типы в зависимости от ситуации.
После размещения компонента в форме система C+i- Builder автоматически вносит изменения в файлы моду тя и предст авления формы. В описание класса формы (заголовочный файл модуля формы) для каждого нового компонента добавляется строчка формата
<Тип компонента> *<Имя компонента^
Имя нового компонента является значением его свойства Name, а тип совпадает с типом выбранного в Палитре компонента. Например, для кнопки Button 1 эта строчка первоначально будет иметь вид: TButton *Button1;
В файле представления для кнопки Button может быть записан следующий код:
object Button 1: TButton Left= 98 Top= 110 Wirtth=75 Height= 25 Caption= 'Button1' TabOrder= 0 end
13 За к 474
Для размещения в форме нескольких одинаковых компонентов удобно перед выбором компонента в Палитре компонентов нажать и удерживать клавишу <Shift>. В этом случае после щелчка мыши в облает и формы и размещения там выбранного компонента его значок в Палитре остается утопленным, и I аждый последующий щелчок в форме приводит к появлению в ней еще одного такого же компонента. Для отмены выбора этого компонента достаточно выбрать другой компонент- или щелкнуть мышью на изображении стре. 1ки в левом углу Палитры компонентов.
После размещения компонента в форме можно с помощью мыши изменять его положение и разм( ры. В случае нескольких компонентов можно выно пня гь выравнивание или перевод того или иного компонента на передний или задний пиан. При этом действия разработчика не отличаются от действий в среде обычного графического редактора. Одновременно выделить в форме несколько компонентов можно щелчками мыши на них при нажатой клавише <Shift>.
По умолчанию компоненты выравниваются в форме по линиям сетки, что определяет флаж< «с Snap to grid (Выравнивать по сетке), входящий в набор парам» тров интегрированной среды разработки. В ряде спучаев эгот флажок приходится отк почать, например, при плотном размещении компонентов в форме. По умо. 1чанию niai сетки равен восьми пикселам, а сетка при проек гировании отображается на поверхности формы. Необходимость выравнивания по се гке. видимость сетки (флажок Display grio (Отображать сетку)) и размер шага сетки по гооизонтали и вертикали устанавливаются на вкладке Designer (Конструктор) диалогового окна Environment Options (Параметры среды), вызываемого одноименной коман юй меню Tools (Средства).
Внешний вид компонента определяется его свойствами, которые становятся дос гупными в окне Инспектора объектов, когда компонент выделен ь форме и вокруг него появились маркеры выделения (рис. 11.7) Доступ к свойствам самой формы осуществляется аналогично, однако в выбранном состоянии форма не выделяется маркерами. Для выделения (выбора) формы достаточно щелкнуть в любом ее месте, свободном от других компонентов.
j Object; Inspector |
£5 |
c":. Forml |
BHDl | ||
Button* |
|
TButton |
J |
| |
Properties |
Event; |
|
■ ■ |
| |
[□Action |
|
|
|
• OK 1 |
|
f Action |
I" |
|
| ||
Caption |
|
m |
| ||
j Engblf |
J |
true |
ti |
| |
|AII Hiown |
|
|
Б |
|
В раскрывающемся списке, расположенном в верхней части окна Инспектора объектов, отображаются имя компонента и его тип. Выбрать тот или иной компонент и, соответственно, получить доступ к его свойствам можно в этом списке Инспектора объектов. Такой способ выбора удобен в случаях, когда компонент полностью закрыт другими объектами.
В нижней части окна Инспектора объектов слева приводятся имена всех свойств компонента, которые доступны на этапе разработки приложения. Справа для каж, юго свойства стоит его значение. Отметим, что кроме этих свойств компонент может иметь и свойст ва, которые доступны только во время выполнения приложения.
Свойства представляют собой атрибуты, определяющие способ отображения и функционирования компонентов при выполнении приложения. Первоначально значения свойств задаются по умолчанию. После помещения компонента в форму его свойства можно изменять в процессе проектирования или в ходе выполнения приложения.
Управление свойствами в процессе проектирования заклк чается в изменении значений свойств компонентов непосредственно в окне формы («рисование») или с помощью Инспектора объектов.
Разработчик может изменить значение свойства компонента, введя или выбрав нужное значение. При этом одновременно изменяется соответствующий компонент, т. е. уже при проектирсчании видны результаты сделанных изменений. Например, при изменении заголовка кнопки (свойство Caption) оно сразу же отображается на ее поверхности.
Для подтверждения нового значения свойства достаточно нажать клавишу <Enter> или перейти к другому свойству или компоненту. Отмена изменений производится клавишей <Esc>. Если введено недопустимое для свойства значение, то выдается предупреждающее сообщение, а изменение значения отвергается. Изменения свойств автоматически учитываются в фай ле описания формы, используемом компи штором при создании формы, а при изменении свойства Name изменения внося гея и в описание класса формы.
Для большинства свойств компонентов (например, для свойств Color (цвет), Capt.on (заголовок) и Visible (видимость)) имеются значения по умолчанию.
Для обращения к компоненту в приложении предназначено свойство Name, первоначальное значение которого образуется автоматически следующим образом: к имени компонента добав. шется его номер в порядке помещения в форму. Например, первая кнопка Button по аучает имя Button 1, вто- оая — Button2 и т. д. Первоначально от значения свойства Name получает свое значение и свойство Caption.
Обычно разработчик предпочитает дат ь компонентам более информативные имена, чем имена по умолчанию. При этом целесообразно включать в имя данные о типе компонента и его назначении в приложении. Так, кнопке типа TButton, предназначенной для закрытия окна, можно присвоить имя btnClose или ButtonClose. Каждый разработчик самостоятельно устанавливает удобные правила именования компонентов. Для простоты мы будем часто использовать имена, назначаемые по умол"анию. например. Forml, Button 1 или Editl.
Значения свойств. < вязанных с размерами и положением компонента (например, Left и Тор), автоматически изменяются при перемещении компонента мышью и настройке его размеров.
Если в форме выделено несколько компонентов, то в окне Инспектора объектов доступны свойства, общие для всех этих компонентов. При этом сделанные в окне Инспектора объектов изменения действ} ют на все выделенные компоненты.
Для установки значений свойств в Инспекторе объектов используются подключающиеся автоматически редакторы свойств:
простой (текстоьый) — значение свойства вводится или редактируется как обычная строка символов, которая интерпретируется как числовой или строковый тип С++ Builder; используется для таких свойств, как Caption, Lett, Height и Hint;
nept шсляемыи — значение свойства выбирается в раскрыьающемся списке. Список раскрывается щелчком на стрелке, которая появляется при установке указателя мыши в области значения свойства. Можно не вы- бира гь нужное значение, а ввести его с клавиатуры, однако на практике это обычьо не делается, т. к. допускаются только предлагаемые значения. Кроме того, возраст ает трудоемкость и увеличивается вероятность ошибки. Испо. гьзуется для таких < чойств. как FormStvIe, Visible и ModalResult;
множественный — значение свойства представляет собой комбинацию значений из предлагаемого множества. В окне Инспектора объектов слева от имени свойства множес гвенного типа стоит знак << +». Формирование значения свойства выполняется с помощью дополнительного списка. раскрываемого двойным щелчком на имени свойства. Э тот список содержит перечень всех допустимых значений свойства, справа от каждого значения можно указать true или false. Выбор true означает, что данное значение включается в комбинация) значений, a false — нет. Используется для таких свойств, как Borrierloons и Anchors;
обдекта — свойство является объектом и, в свою очередь, содержит другие свойства (подсвойства), каждое из которых можно редактировать отдельно. Используется для т аких свойств, как Font, Items и Lines. В области значения свойства-объекта в скобках указывается тип объекта, например, (TFont) или (TSrings). Для свойства-объекта слева от имени может стоять знак «+», в этом случае управление его свойствами выполняется так же, как и для свойства множественного типа, т. е. через раскрывающийся список. Этот список в левой части содержит имена подсвойств, а в правой — значения, редактируемые обычным
11. Borl \na С++ Puiidet 330
способом. В области значения может отображаться кнопка с тремя точками. Это означает, что для данного с войства имеется специальный редактор, который вызывается нажагием этой кнопки. Так, для свойства Font открывается стандартное окно Windows для установки параметров шрифта.
При выполнении приложения значения свойств компонентов (доступных в окне Инспектора объектов) можно изменять с помощью инструкций при сваивания, например, в обработчике события создания формы. Так, изменение заголовка кнопки Button 1 можно выполнить следующим образом:
RI Jtton 1 - >Caption = "OK";
Такой способ требует, однако, больше] о объема работ, чем в случае использования Инспектора объектов, кроме того, подобные установки вступают в силу только во времи выполнение приложения и на этапе ра {работки не вид ны, что в ряде случаев затрудняет управление визуальными компонентами. Тем не менее, для наглядности во многих примерах значения отдельных свойств мы будем устанавливать с помощью операторов присваивания, а не через Инспектор объектов.
Отметим, что есть свойст ва времени выполнения, недоступные через Инспектор объектов, с которыми можно работать только во впемг выполнения приложения. К таким свойствам относятся, например, число записей RecordCount набора данных или поверхность рисования Canvas визуально го компонента.
Определение функциональности приложения
На любой стадии разработки интерфейсной части приложение можно запустить на выполнение. После компиляции на экране появляется форма приложения, которая выглядит примерно так же, как она была сконструирована на этапе разработки. Форму можно перемещать но экрану, изменять ее размеры, сворачивать и разворачивать, а также закрывать нажат ием соответствую щей кнопки в заголовке или другим сгн ico6om. То есть Форма ведет себя, как обычное окно Windows.
Реакция на приведенные действия присуща каждой форме и не ia висит от назначения приложения и его особенностей. В форме, как правило, размещены компоненты, образующие интерфейс приложения, и задача разработчика — определить для этих компонентов нужную peai цию на те или иные дей ствия пользователя, например, на нажатие кнопки или выбор переключателя. Эта реакция и определяет функциональность приложения.
Допустим, что при создании интерфейса приложения в форме была размещена кнопка Button, предназначенная для закрытия окна По умолчанию эта кнопка получила имя и заголовок Button 1, однако заго товок (свойство Caption) с помошью окна Инспектора объектов было заменено более осмысленным — ОК. При выполнении приложения кнопку Buttonl мпж но нажимат ь с помощью мыши или к павиатуры. Кнопка отображает нажа тие визуально, однако никаких действий, связанных с закрытием формы, не выполняется. Подобное происходит потому, что для кнопки не определена реакция на какие-либо действия пользователя, в том числе и на ее нажатие.
Чтобы кнопка могла реагировать на то или иное < обытие, для него необходимо создать и пи указать процед> ру обработки, которая будет вызываться при во шикновении этого события. Для создания процедуры обработки события, или обработчика, нужно прежде всего выделить в форме кнопку и перейти на страницу Events (События) окна Инспектора объектов, где указываются все возможные для данной кнопки собьп ия (рис. 11.8).
[object
Inspector
f'r.Forml
Я
[НП
|
Button! ШиКзп
Properties
Ь
vents
■ ?
г'
OK
II
Action
н
OnLnck
Button!Cue
jJ-'
OnCoi
itextPof.
OnPragDrop
j
.ill
|AII
shown Л
Рис.
11.8. Доступ к событиям компонента
Так как при нажатии кнопки возникает событие OnClick, следует создать обработчик именно этого события. Нужно сделать двойной щелчок в об тасти значения события OnClick, в результате С++ Builder ав гоматически создает в модуле формы заготовку процедуры-обработчика. При этом окно Редактора кода переводится на передний план, а курсор устанавливас гея в то место про цедуры, где программист должен написать код, выполняемый при нажатии кнопки Button 1. Поскольку при нажатии кнопки ОК должно закрываться окно, то в этом месте можно указать Form 1 ->С1оье() или просто CloseQ. Файлы в составе mi >дуля формы будут иметь следующий вид:
Заголовочный Файл:
//
#ifndefUnitlH#defineUmtlH
/У
#include <Classes.hpp> «include <Controls.hpp> #.nclude <StdCtrls.hpp>
#include <Forms.hpp>
//
class TForml : public TForm{
published: 11 IDE-managed Components
// Объявление объекта кнопки типа TButtonс именем OK TButton*ОК;
IfЗаголовок процедуры обработчика void _fastcall OKCIick(TObject *Sender); private:// User declarations public:// User declarations
_ fastcall TForml (TComponent* 0wn3r);};
//
extern PACKAGE TForml *Form1;
//
#endif
Файл реализации:
//
#include <vcl.h> #pragma hdrstop
#include "Unitl .h"
//
#pragma package(smart_init) #pragma resource "*.dfm" TForml *Form1;
//
_ fastcall TForml ::TForm1 (TComponent* Owner)
: TForm(Owner){
}
//
void _fastcall TForml ::OKCIick(TObject *Sender) {
Form1->Close();
}
//
Здесь полужирным начертанием выделен код, набранный программистом; все остальное среда С++ Builder создала автоматически, в том числе и включение заголовка процедуры-обработчика в описание класса фпрмы Formt.
В обработчике событий (приведенном в примере и в других обработчиках) параметр Sender указывает на компонент, который получил событие и вызван обработчик. Иногда полезно иметь общий обработчик для разных объектов, который ведет себя по-разному в зависимости от класса вызвавше- 1 о его объекта. В такой ситуации использование параметра Sender может быть очень полезным. Заметим, что в заголовках функции он объявлен как указа тель на объект типа TObject в виде TObjec* '"Sender.
Класс TObject является базовым классом для всех классов в С++ Builder, но в нем нет < войств, пригодны к к использованию в обработчиках событий. В этой связи при необходимости обращения к некоторым свойствам обьектов нужно выполнять приведение типа параметра Sender к к дассу, в котором нужные свойства об-.явлены
К примеру, пусть в обработчике требуется задать клманду, помещающую в однострочный редактор Edit текст Выполнен щелчок на компоненте <имя компонентах Имя компонента определяется значением его свойства Name Поскольку в классе TObject это свойст во отсутствует, тин параметра нужно приводить к классу TComponent. в котором это свойство появ ляется впервые, или к любому его наследнику, например TControl. В результате решаю щий поставленную задачу оператор можно записать в виде:
Editl ->Text="Выполнен щелчок.® компоненте "Ч ((ГСотрогк :nt *)Sender)->Name.
или
Editl ->Text = "Выполнен щелчок на компоненте "+((TControlu)Sender)-^Name;
Здесь выражения ((TComponent *)Sonder) и ((TControl *)Sender) задают приведение типа параметра Sender к типу указа геля на объект соответствующего класса.
Среда С Builder обеспечивает автомат изацию набора кода при вызове свойств и методов объектов и записи стандартных конструкций языка С++. Так, после указания имени объекта и разделяющего знака > автоматически появляется список (рис. 11.9), содержащий дост упные свойства и методы этого объекта. При необходимости с помощью комбинации клавиш <Ctrl>+<npo6e. t > можно обеспечить принудительный вызов этого списка. Имя выбранного свойства или метода автоматически добав. шется справа от знака >. Если метод содержит параметры, то отображается подсказка, содержащая состав и типы параметров.
Перечень стандартных конструкций языка вызывается нажатием комбинации клавиш <Ctrl>-t <J>. После выбора требуемой коне грукции автоматически добавляется ее код. Например, при выборе оператора for в коде появится следующий текст:
for (;;)
Имя обработчика TForml "OKCIick образуется прибавлением к имени компонента имени события без префикса On. Это имя является значением события, для которого создан обработчик, в нашем случае — для события OnClick
Unitl
upp I
Г4- ■
Erticl->
}
//
p
operty bnol TEdn SiutoS elect
uiopeit;i buol
TEdit :AutoSize
propert'i TBevelEdge-
TEdil Beveltdge:
property TBevdCut
TEdil.. BewOlnni
rrcpeit. TPevelKirid
TE*lil..l II
J
Jji27 (3 |Mn«!d Inert ■ \UriiH - срр /и nill. hjpiagiam'f
Рис. 11.9. Список свойств и методов объекта Editl
нажатия кнопки с именем ОК. При изменении через окно Инспектора объектов имени кнопки происходит автоматически переименование этой процедуры во всех файлах (.dfin и .срр) проекта.
Аналогично создаются ооработчики для других событий и доугих компонентов. Более подробно события рассматриваются при изучении соответствующих компонентов.
Д тя удаления процедуры обрабо! чика достаточно удалить код, который программист внес в нее сампстояте. 1ьно. После этого при сохранении или компиляции модуля обработчик будет удаден автоматически из всех файлов прей кта
При удалении какого-либо компонента все его непустые обработчики остаются в м« >дуле формы.
Ьмеси»соз дания нового обработчика для собы гия можно выбрать существующий обработчик, если такой имеется. Для этого нужно в окне Инспектора объектов щелчком на стрелке в области значения свойства раскрыть список процедур, которые можно использовать для обработ ки этого события. События объекта тоже являются свойствами и имеют определенный для них тип. Для каждого события можно назначить обработчик, принад лежаший к гипу этого события. После выбора в списке нужной процедуры она назначается обработчиком события.
Одну и ту же процедуру можно связать с несколькими событиями, в том числе для различных компонентов. Такая процедура называется общим ('разделяемым) обработчиком и вызывается при возникновении любого из связанных с ней событий. В теле общего обработчика можно предусмотреть действия, позволяющие определить, для какого именно компонента или события вызвана процедура, и в зависимости от этого выполнить нужные команды.