Вы пришли из
Браузер у вас:
Сегодня:
Разрешение монитора:
на сайте
на Народ.Ру
на Яндексе
Borland C++ Builder 2. ПЕРВЫЕ ОПЫТЫ
В этой главе мы будем следовать плану
первоначального знакомства со средой визуальной
разработки C++Builder, изложенному в разделе Быстрый Тур (Quick Tour) системной
документации.
C++Builder предназначен для быстрой разработки
приложений (RAD), построенных на современном фундаменте
объектно-ориентированного программирования
(ООП). C++Builder сам постепенно будет помогать вам
овладевать премудростями RAD, ООП и языка C++,
поначалу требуя лишь минимальных
предварительных знаний. Ваши навыки будут
расширяться по мере роста сложности ваших
разработок: чем сложнее задача, тем больший по
объему код потребуется написать для ее
реализации. Получение знаний перестает быть
самоцелью. Вы сами убедитесь в том, что C++Builder в
корне меняет процесс разработки насколько легче
и быстрее вы сможете получать работающие и
надежные программы для операционных систем Windows, чем при
использовании традиционных интерфейсных
оболочек других систем.
Иллюстрировать мощность и гибкость C++Builder будем
на примере построения тестовых приложений,
развивая их от простейших прототипов до
законченных рабочих программ. Хотя наше первое
приложение сложнее предлагаемого Быстрым Туром,
автор надеется, что понять логику его разработки
сможет новичок не только в ООП, но и в языке C++.
2.1 Первое знакомство
Как начинающие, так и опытные программисты
начинают знакомство с новой системой с попытки
создать простую программу, а чтение документации
откладывается до лучших времен. При этом
оценивают разные аспекты разработки:
насколько полезными оказываются ваши интуиция
и опыт, лаконичность и объем кода, достоинства
сервиса среды, временные затраты, удобства
отладки и многое-многое другое. Последуем и мы по
этому пути знакомства со средой
программирования C++Builder.
Мы получим общее представление о работе со
следующими основными инструментами
интегрированной среды:
• Палитра компонент
содержит более 100 повторно используемых
компо-нент,предлагаемых для построения
приложений.
• Редактор форм
предназначен для создания интерфейса программы
с пользователем.
• Редактор кода предназначен для
написания текста программы, в частности, функций
обработки событий.
• Инспектор объектов
позволяет визуально устанавливать свойства
объектов без необходимости рутинного
программирования и содержит события, которые
можно связывать с кодами реакции объектов на их
возникновение.
• Хранилище объектов
содержит такие объекты, как формы и модули
данных, которые разделяются многими
приложениями с целью уменьшения временных
затрат при разработке.
C++Builder реализует визуальную методику
построения приложений посредством выбора из
Палитры компонент нужных управляющих элементов
(Рис. 2.1). С каждой компонентой (например, кнопкой)
связаны свойства, которые меняют ее вид и
поведение. Любая компонента может вызывать серию
событий, которые определяют ее реакцию на
различные воздействия. В дальнейшем изложении
символы =>
обозначают те действия, которые вы будете
совершать в среде C++Builder.
=> Вызовите C++Builder и начните работу над новым
приложением по команде File | New
Application из главного
меню.
=> Щелкая мышью по вкладкам Палитры компонент,
просмотрите имеющийся ассортимент элементов
интерфейса программы с пользователем.
Рис. 2.1. Основные визуальные инструменты
интегрированной среды C++ Builder.
Переходя от вкладки к вкладке Палитры, можно
заметить, что набор доступных компонент
меняется. Когда курсор мыши останавливается на
значке компоненты, возникает подсказка с ее
названием. Если нажать клавишу F1, справочная служба системы
выдаст полную информацию о выбранной компоненте.
Назначение всех компонент вы найдете в данной
главе, а подробное их описание - в главе 4.
2.1.1 Визуальное проектирование
Наше первое приложение будет генерировать
детскую считалочку "Десять негритят". В
начальной версии потребуется только три объекта:
список, поле редактирования и кнопка. Перенесем
компоненты на форму проектирования и начнем
постепенно развивать приложение. Метод
перетаскивания (drag-and-drop) состоит в следующем: нажмите
кнопку мыши на выбранной компоненте, переведите
курсор на любое место формы, а затем снова
нажмите кнопку мыши. Для начала ограничимся
"стандартными" компонентами Палитры:
=> Выберите вкладку Standard.
=> Перетащите компоненту списка
ListBox на форму.
=> Перетащите компоненту поля редактируемого
ввода EditBox.
2.1 Первое знакомство
Как начинающие, так и опытные программисты
начинают знакомство с новой системой с попытки
создать простую программу, а чтение документации
откладывается до лучших времен. При этом
оценивают разные аспекты разработки:
насколько полезными оказываются ваши интуиция
и опыт, лаконичность и объем кода, достоинства
сервиса среды, временные затраты, удобства
отладки и многое-многое другое. Последуем и мы по
этому пути знакомства со средой
программирования C++Builder.
Мы получим общее представление о работе со
следующими основными инструментами
интегрированной среды:
• Палитра компонент
содержит более 100 повторно используемых
компо-нент.предлагаемых для построения
приложений.
• Редактор форм
предназначен для создания интерфейса программы
с пользователем.
• Редактор кода предназначен для
написания текста программы, в частности, функций
обработки событий.
• Инспектор объектов
позволяет визуально устанавливать свойства
объектов без необходимости рутинного
программирования и содержит события, которые
можно связывать с кодами реакции объектов на их
возникновение.
• Хранилище объектов
содержит такие объекты, как формы и модули
данных, которые разделяются многими
приложениями с целью уменьшения временных
затрат при разработке.
C++Builder реализует визуальную методику
построения приложений посредством выбора из
Палитры компонент нужных управляющих элементов
(Рис. 2.1). С каждой компонентой (например, кнопкой)
связаны свойства, которые меняют ее вид и
поведение. Любая компонента может вызывать серию
событий, которые определяют ее реакцию на
различные воздействия. В дальнейшем изложении
символы ==> обозначают те действия, которые вы
будете совершать в среде C++Builder.
=> Вызовите C++Builder и начните работу над новым
приложением по команде File | New
Application из главного
меню.
=> Щелкая мышью по вкладкам Палитры компонент,
просмотрите имеющийся ассортимент элементов
интерфейса программы с пользователем.
=> Перетащите компоненту кнопки
Button.
=> Расположите компоненты и измените их
размеры так, как вы хотели бы их видеть в окне
вашего приложения.
С помощью Инспектора объектов определите
начальные значения свойств компонент. В графе
значений свойства Items списка нажмите кнопку в
открывшемся окне редактора введите 7 первых
строк стихотворения. В свойстве Caption формы и кнопки укажите их
смысловые названия (соответственно, "Десять
негритят" и "Результат"). В свойстве Text поля
редактирования задайте строку подсказки
результата ("Девять негритят").
Рис. 2.2. Визуальное проектирование формы
приложения.
Рис. 2.2 показывает вид формы приложения и
свойства компоненты списка TListBox после выполнения указанных
действий. Теперь можно переключиться на Редактор
кода и написать, как было принято, любую
программу на языке C++, включая последние
расширения стандарта ANSI/ISO. Однако, попытаемся сначала
воспользоваться новыми средствами быстрой
разработки приложений и дополнительными
атрибутами компонент, заложенными в
C++Builder.
2.1.2 Свойства, методы и события
Быстрая разработка приложений подразумевает
поддержку свойств, методов и событий компонент в
рамках объектно-ориентированного
программирования. Свойства позволяют вам
легко устанавливать разнообразные
характеристики компонент, такие как названия,
контекстные подсказки или источники данных. Методы
(функции-члены) производят определенные операции
над компонентным объектом, в том числе и такие
сложные как воспроизведение или перемотка
устройства мультимедиа. События связывают
воздействия пользователя на компоненты, такие
как активизация, нажатие кнопок или
редактируемый ввод - с вашими кодами реакции на
эти воздействия. Кроме того, события могут
возникать при таких специфических изменениях
состояния компонент как обновление данных в
интерфейсных элементах доступа к базам данных.
Работая совместно, свойства, методы и события
образуют среду RAD интуитивного программирования надежных
приложений для Windows.
=> В Инспекторе объектов укажите вкладку
Событий (Events),
чтобы увидеть все события, ассоциированные с
выбранным объектом.
=> Дважды щелкните мышью по компоненте кнопки,
которую вы поместили на форму.
=> В открывшемся окне Редактора кода курсор
покажет позицию для ввода инструкций в тело
функции ButtonlClick, предназначенной для обработки события OnClick,
возникающего при нажатии кнопки.
Рис. 2.3 показывает простой код, который в ответ
на очередное нажатие кнопки "Результат"
присоединяет предыдущую подсказку
prev к концу списка и
заносит следующую подсказку next в поле редактирования.
Инструкция ListBoxl->Items->Append (prev) присоединяет, с помощью метода Append, строку prev к
свойству Items объекта
списка ListBoxl.
Инструкция Editl->Text = next присваивает строку
next свойству
Text объекта
редактируемого ввода Editl. Строки подсказок хранятся в
двумерном массиве count и индексируются целой
переменной типа static, сохраняющей текущее значение
между вызовами функции обработки события,
возникающего при нажатии кнопки Buttonl.
Рис. 2.3. Редактор кода обеспечивает ввод и
редактирование текста исполняемого модуля в
файле Unit1.cpp.
Этап проектирования первой версии приложения
на этом завершается и можно приступить к
созданию рабочей программы.
=> Командой главного меню Run | Run запустите процесс компиляции и
сборки приложения.
=> После вызова программы несколько раз
нажмите на кнопку "Результат".
Рис. 2.4 показывает вид формы приложения после
девяти нажатий на кнопку "Результат". Чтобы
игнорировать последующие нажатия кнопки, в
функции обработчика события предусмотрена
инструкция возврата
if (i == 9)
return;
Разумеется, вместо предлагаемых программой
подсказок, можно вводить любую строку результата
- синтаксический (и, тем более, семантический)
анализ текста не предусмотрен.
Рис. 2.4. Работа первой версии приложения
"Десять негритят".
2.1.3 Технология двунаправленной разработки
C++Builder не ставит
никаких барьеров между программистом и его
кодом. Технология двунаправленной разработки Two-Way Tools
обеспечивает контроль за вашим кодом
посредством гибкого, интегрированного и
синхронизированного взаимодействия между
инструментами визуального проектирования и
Редактором кода.
Чтобы проследить за тем, как действуют
инструменты двунаправленной разработки,
выполните следующие операции:
=> Откройте контекстное меню Редактора кода
щелчком правой кнопки мыши, а затем с помощью
опции Swap Cpp/Hdr Files переключитесь на файл
объявлений Unit1.h..
=> Организуйте экранное отображение
инструментов так, чтобы одновременно видеть
проектируемую форму и файл Unitl.h в окне Редактора кода.
=> Перетащите еще одну компоненту кнопки OK Button на форму.
В свойстве Caption кнопки укажите ее смысловое название
"Новый куплет".
Рис. 2.5. C++Builder автоматически генерирует объявления в
файле Unit1.h,
поддерживая постоянный контроль программиста
над его кодом
Проследите за тем, что как только вы перенесли
кнопку на форму, объявление объекта Button2
моментально появится в файле Unit1.h, а определение события OnClick
сгенерирует объявление метода
Button2Click обработчика
этого события (Рис. 2.5). Такая синхронизация
процессов проектирования формы и автоматической
генерации кода действительно ускоряет
визуальную разработку C++ приложения, полностью
сохраняя контроль над исходным текстом
программы.
Сделаем еще один шаг в разработке нашего
первого приложения - заставим его генерировать
куплеты автоматически. Для этого придется
наполнить содержанием функцию обработки события
OnClick при
нажатии кнопки "Новый куплет".
Рис. 2.6. Новый обработчик события в файле Unit1.cpp.
Рис. 2.6 показывает простой код, который в ответ
на очередное нажатие кнопки "Новый куплет"
выводит друг за другом семь строк нового куплета,
причем первая и третья строки берутся из
переменной prev. Поскольку значение этой переменной
присваивает обработчик события кнопки
"Результат", пришлось переопределить ее в
секции public пользовательских объявлений класса формы
(выделенная строка на Рис. 2.5), чтобы сделать
доступной обработчикам событий обеих кнопок.
Смысл этого, пока еще непонятного действия ООП,
прояснится в главе 3.
Рис. 2.7 показывает работу законченной версии
приложения "Десять негритят" после девяти
парных нажатии на кнопки "Результат" и
"Новый куплет". Список приобрел
вертикальную линейку прокрутки, чтобы можно было
просматривать все стихотворение целиком.
Следует запомнить, что C++Builder ассоциирует с каждым
приложением три исходных файла со следующими
именами по умолчанию:
• Unitl.cpp хранит
исполняемый код реализации вашего приложения.
Именно в нем вы записываете обработчики событий,
отвечающие за реакцию программы при воздействии
пользователя на объекты компонент.
• Unitl.h содержит
объявления всех объектов и их конструкторов.
Обратите внимание на ключевое слово _fastcall в объявлениях функций
обработки событий, которые C++Builder генерирует
автоматически. Благодаря _fastcall передача параметров
организуется не через стек, а через регистры
центрального процессора. Вызовы обработчиков
событий происходят очень часто, поэтому экономия
времени, затрачиваемого на выборку параметров из
памяти стека, оказывается весьма ощутимой. Здесь
кроется одна из причин высокого быстродействия
приложений, которые компилирует и собирает
C++Builder.
• Projectl.cpp
обслуживает все объекты, заключенные в
приложении. Любая новая форма, программный
модуль или модуль данных автоматически
включаются в проектный файл. Вы можете
просмотреть в окне Редактора кода содержание
исходного текста проектного файла с помощью
команды главного меню View | Project Source или выбрав одноименную опцию
из контекстного меню Администратора проекта. Ни
в коем случае не редактируйте проектный файл
вручную!
Быть может, завершив разработку первого
приложения, вы захотите сохранить исходные файлы
для следующего сеанса, выполнив одно из
следующих действий:
=> Команда File | Save All сохраняет все исходные файлы
приложения.
Команда File | Save сохраняет оба файла
программного модуля, а команда File
| Save As позволяет дать им
новое имя.
Команда File | Save Project As сохраняет изменения всех
составляющих проектного файла, используя
текущие имена файлов.
2.1.4 Использование проектных шаблонов
Использование готовых проектных шаблонов из
Хранилища объектов дает вам возможность начать
разработку, опуская типичные для многих
приложений предварительные операции по
составлению главного меню и панели кнопок
быстрого вызова, организации стандартных
диалогов вызова и сохранения файлов. Внесенные
вами изменения никак не отражаются на
использовании того же проектного шаблона
другими разработчиками.
Чтобы создать на основе проектного шаблона
прототип приложения для работы в режиме
многодокументного интерфейса (MDI), произведите следующие
действия:
Рис. 2.8. Проектные шаблоны. усмотрению
свойства компонент главной формы. В окне
редактора фильтров, в графе значений свойства Filter компоненты TOpenDialog, укажите
название и расширение файлов текстовых
документов.
Рис. 2.9 показывает главную форму прототипа
приложения, спроектированную на базе готового
шаблона.
Рис. 2.9. Главная форма прототипа MDJ приложении для роботы с
текстовыми файлами.
Если вы скомпилируете и соберете такое
приложение, то увидите, что оно "умеет"
только оперировать с окнами в режиме
MDI и вызывать диалог
открытия файлов, не заполняя окна текстовым
содержимым выбранных файлов. То есть прототип
оказался нефункциональным и практически
бесполезным. Чтобы придать приложению некоторое
осмысленное поведение, выполните следующие
действия:
Дайте команду View | Forms из главного меню и выберите из
списка дочернюю форму с именем MDIChild (Рис. 2.10).
Memo
Перетащите компоненту
многострочного поля редактирования из вкладки Standard Палитры на
дочернюю форму.
Очистите поле редактирования компоненты TMemo, вызвав
нажатием строчный редактор свойства
Lines. Установите значение alClient свойства Align с тем, чтобы
поле редактирования занимало все дочернее окно.
Установите значение ssBoth свойства ScrolBars, чтобы сделать просмотр длинных
текстовых файлов более удобным (Рис. 2.11).
Рис. 2.11
Проектирование дочерней формы MDlChild.
=> Снова вернитесь к главной форме,
активизировав ее с помощью мыши, и выберите
команду File | Open из меню приложения.
=> В окне Редактора кода курсор покажет
позицию для ввода инструкции в обработчик
события OnClick, возникающего при выборе соответствующего
элемента меню. C++Builder автоматически генерирует
объявление этой функции для компоненты главной
формы TOpenDialog
(из вставки Dialogs Палитры компонент).
Рис. 2.12 показывает необходимые инструкции,
составляющие тело функции
FileOpenItemClick обработчика этого события.
Рис. 2.12. Реализация
загрузки дочернего окна в файле Main.cpp.
Выделенная инструкция загружает строки Lines объекта Memo1 дочернего окна Child содержимым
открытого текстового файла с именем
OpenDialog->FileName.
Конечно, разработка этого приложения еще
далека до завершения. Когда вы скомпилируете и
соберете его, то сможете редактировать текстовые
файлы одновременно в нескольких окнах (Рис. 2.13).
Однако сохранение результирующих файлов пока не
предусмотрено - читатель без труда сам напишет
код для команд меню File [Save и File |Save As.
Рис. 2.13. Работа
приложения "MDI Application ".
Логичным развитием приложения, превращающим
его в простейший текстовый редактор, было бы
добавление команд поиска и замены в выпадающий
список элемента главного меню под названием Edit.
2.2 Палитра компонент - краткий обзор
2.2.1 Компоненты вкладки Standard
Компоненты этой вкладки осуществляют
включение в ваше приложение следующих типовых
интерфейсных элементов Windows:
ТМашМепи
Создает
панель команд главного меню для формы.
TPopUpMerm
Создает
"выскакивающее" меню для формы или для
другой компоненты.
TLabel
Отображает
на форме текст названия, который нельзя
редактировать.
TEdit
Отображает
область редактируемого ввода одиночной строки
информации на форме.
TIVlemo
Отображает
область редактируемого ввода множественных
строк информации на форме.
TButton
Создает
кнопку с надписью.
TCheckBox
Создает
элемент управления с двумя состояниями.
TRadioButton
Создает
элемент управления с двумя состояниями.
TListBox
Отображает
область списка текстовых строк.
TComboBox
Создает
комбинацию области редактирования и выпадающего
списка текстовых строк.
TScrollBar
Создает
линейку прокрутки для просмотра содержимого
окна, формы, списка или диапазона значений.
TGroupBox
Создает
контейнер, объединяющий на форме логически
связанную группу некоторых компонент.
TRadioGroup
Создает
контейнер, объединяющий на форме группу
логически взаимоисключающих радио-кнопок.
TPanel
Создает
панель инструментов или строк состояния.
2.2.2 Компоненты
вкладки Win95
Компоненты этой вкладки осуществляют
включение в ваше приложение следующих типовых
интерфейсных элементов
Windows 95:
TTabControl
Отображает
набор полей, имеющих вид частично перекрывающих
друг друга картотечных вкладок.
TPageControl
Отображает
набор полей, имеющих вид частично перекрывающих
друг друга картотечных вкладок, для организации
многостраничного диалога.
TTreeView
Отображает
древовидный перечень элементов - заголовков
документов, записей в указателе, файлов или
каталогов на диске.
TListView
Отображает
древовидный перечень элементов в различных
видах - по столбцам с заголовками, вертикально,
горизонтально, с пиктограммами.
TImageList
Создает
контейнер для группы изображений.
THeaderControl
Создает
контейнер для заголовков столбцов.
TRichEdit
Отображает
область редактируемого ввода множественных
строк информации в формате RTF.
TStatusBar
Создает
строку панелей состояния для отображения
статусной информации.
TTrackBar
Создает
шкалу с метками и регулятором текущего
положения.
TProgressBar
Создает
индикатор процесса выполнения некоторой
процедуры в приложении.
TUpDown
Создает
спаренные кнопки со стрелками "вверх" и
"вниз". Нажатие этих кнопок вызывает
увеличение или уменьшение значения свойства Position.
THotKey
Используется
для установки клавиш быстрого вызова во время
выполнения программы.
2.2.3 Компоненты вкладки Additional
Компоненты этой вкладки осуществляют
включение в ваше приложение следующих
специализированных интерфейсных элементов Windows:
TBitBtn
Создает
кнопку с изображением битового образа.
TSpeedButton
Создает
графическую кнопку быстрого вызова.
TMaskEdit
Создает
область редактируемого ввода данных
специфического формата.
TStringGrid
Создает
сетку для отображения строк по строкам или
столбцам.
TDrawGrid
Создает
сетку для отображения графических данных по
строкам или столбцам.
TImage
Создает
на форме контейнер для отображения битового
образа, пиктограммы или метафайла.
TShape
Рисует
простые геометрические фигуры.
TBevel
Создает
линии и рамки с объемным видом.
TScrollBox
Создает
контейнер переменного размера с линейками
прокрутки, если это необходимо
2.2.4 Компоненты вкладки Data Access
Компоненты этой вкладки осуществляют
включение в ваше приложение следующих элементов,
обеспечивающих доступ к базам данных:
TDataSource
Действует
как интерфейс между TTable, TQuery и TStoredProc и компонентами управления
данными типа TDBGrid.
ТТаЫе
Обеспечивает
доступ к таблицам базы данных.
TQuery
Обеспечивает
передачу команд на языке структурированных
запросов SQL
серверу локальной или удаленной базы данных.
TStoredProc
Разрешает
выполнение хранимых процедур сервера удаленной
базы данных.
TDatabase
Эта
компонента не участвует в организации доступа к
базам данных, хотя предоставляет возможность
управления в приложениях клиент/сервер.
TSession
Предоставляет
средства глобального управления групповых
соединении с несколькими базами данных.
TBatchMove
Разрешает
выполнять пакетные операции над группами
записей или целыми таблицами.
TUpdateSQL
Предоставляет
специальный механизм обновления данных,
возвращаемых некоторыми запросами
SQL.
2.2.5 Компоненты вкладки Data Controls
Компоненты этой вкладки осуществляют
включение в ваше приложение следующих элементов
управления визуализацией и редактированием
подсоединенной базы данных:
TDBGrid
Отображает
и позволяет редактировать записи таблицы или
запроса базы данных на сетке.
TDBNavigator
Используется
для перемещений по записям таблицы или запроса
базы данных и для выполнения операций по их
просмотру и редактированию.
TDBText
Отображает
статический текст названия текущей записи
таблицы или запроса базы данных.
TDBEdit
Создает
однострочную область редактируемого ввода в
текущую запись таблицы или запроса базы данных.
TDBMemo
Создает
многострочную область редактируемого ввода
(включая данные в формате BLOB) в текущую запись таблицы или
запроса базы данных.
TDBImage
Создает
контейнер для представления графического
изображения, которое хранится в поле текущей
записи в формате BLOB.
TDBListbox
Создает
список, выбранный элемент которого становится
новым значением поля текущей записи таблицы или
запроса базы данных.
TDBComboBox
Создает
комбинацию области редактирования и выпадающего
списка текстовых строк для изменения значения
текущей записи в наборе данных.
TDBCheckBox
Создает
элемент управления с двумя состояниями,
связанными с конкретным полем записи таблицы или
запроса базы данных.
TDBRadioGroup
Создает
контейнер для группы логически
взаимоисключающих радио-кнопок, связанных с
конкретными полями записи таблицы или запроса
базы данных.
TDBLookupList
Создает
список ссылок для заполнения полей данными из
другой таблицы или запроса базы данных.
TDBLookup ComboBox
Создает
комбинацию области редактирования и выпадающего
списка ссылок для заполнения полей данными из
другой таблицы или запроса базы данных.
2.2.6 Компоненты вкладки
Dialogs
Компоненты этой вкладки осуществляют
включение в ваше приложение следующих
стандартных диалоговых элементов
Windows:
TOpenDialog
Открывает
доступ к диалогу открытия файлов.
TSaveDialog
Открывает
доступ к диалогу сохранения файлов.
TFontDialog
Открывает
доступ к диалогу выбора шрифтов и их атрибутов.
TColorDialog
Открывает
доступ к диалогу выбора цветов.
TPrintDialog
Открывает
доступ к диалогу печати (выбор принтера,
диапазона печатаемых страниц, числа копий и т.п.).
TPrinterSetup Dialog
Открывает
доступ к диалогу предварительных установок
принтера перед печатью.
TFindDialog
Открывает
доступ к диалогу поиска текста.
TReplaceDialog
Открывает
доступ к диалогу поиска текста с заменой.
2.2.7 Компоненты вкладки System
Компоненты этой вкладки осуществляют
включение в ваше приложение следующих
специализированных системных элементов
управления:
TTimer
Вызывает
возникновение события OnTimer по прошествии заданного
временного интервала.
TPaintBox
Предоставляет
возможность рисования на форме внутри заданной
прямоугольной области.
TFiIeListBox
Перечисляет
все файлы в текущем каталоге, доступные
программе во время ее работы.
TDirectoryListBox
Отображает
древовидную структуру каталогов текущего диска,
доступных программе во время ее работы.
TDriveComboBox
Отображает
комбинированный редактируемый список дисков,
доступных программе во время ее работы.
TfilterComboBox
Представляет
комбинированный редактируемый список фильтров
для выбора имен файлов с расширениями.
TMediaPlayer
Отображает
стандартную панель управления устройствами
мультимедиа (звуковая плата, компакт диск,
видеокамера, AVI плеер, MIDI секвенсор и др.), которые поддерживаются
MCI-драйверами Windows.
TOIeContainer
Организует
связь с OLE объектами
или непосредственно включает их в ваше
приложение.
TddeClientConv
Устанавливает
режим динамического обмена данными
DDE клиента.
TDDEClientltem
Определяет
элемент динамического обмена данными
DDE клиента.
TDDEServerConv
Устанавливает
режим динамического обмена данными
DDE сервера.
TDDEServerItem
Определяет
элемент динамического обмена данными
DDE сервера.
2.3 Приложения управления базами данных
Если вы не чувствуете себя достаточно уверенно,
чтобы сразу перейти к самостоятельному
программированию приложении СУБД в среде C++Builder, просмотрите
готовые примеры, входящие в комплект поставки
системы. Обратите внимание на методику адаптации
приложении применительно к специфике ваших
задач. 1 ,,
Доступ к базам данных поддерживает его основа -
высокопроизводительный механизм BDE
(Borland Database Engine),
включающий 32-разрядные драйверы для баз данных dBASE, Paradox; Sybase, Oracle, DB2, Microsoft SQL Server, Informix, InterBase и Local Interbase. Кроме того C++Builder имеет
быстродействующий механизм ODBC для связи с такими базами
данных, как Excel, Access, FoxPro и Btrieve в архитектуре клиент/сервер.
Поскольку в наших примерах используется только
демонстрационная база данных BCDEMOS, удостоверьтесь
предварительно, что ее локальный псевдоним (alias) установлен с
помощью утилиты конфигурации BDE. Если вы
располагаете другими источниками данных,
укажите их.
2.3.1 Пример из существующего проекта
Данный пример демонстрирует работу компонент
доступа TDBGrid, TDBText, TDBImage, TDataSource, TTable и TDBMemo, а также - компоненты
стандартного диалога TSaveDialog. Уже на стадии проектирования
вы сможете просматривать соответствующую
таблицу базы данных и с помощью линейки
прокрутки компоненты сетки TDBGrid открывать "живые" факты из
жизни обитателей моря. Чтобы начать работу с
существующим проектом приложения, выполните
следующие действия:
По команде главного меню
File | Open
Project откройте диалог
выбора проектов.
Войдите в каталог
\...\CBuilder\Examples\Dbtasks\FishFact.
Выберите проектный файл с именем
Fish
fact и нажмите кнопку Open
Open
(Рис.2.14).
Рис. 2.14. Пример приложения, использующего
существующий проект.
Источник данных приложения определяется
свойствами компоненты TTable:
свойство DatabaseName указывает на базу данных BCDEMOS, а свойство TableName - на таблицу BIOLIFE.
Если захотите, скомпилируйте и соберите этот
пример. После запуска вы снова получите доступ к
изображениям и описаниям рыб в установленной
таблице базы данных (Рис. 2.15). Сохраните
информацию о заинтересовавшей вас рыбе в виде
текстового файла, открывая кнопкой
Save стандартный диалог
компоненты TSaveDialog. Кнопка Exit осуществляет выход из
приложения.
Рис. 2.15. Приложение FISH FACTS в работе.
2.3.2 Пример использования модулей данных
Архитектура приложений C++Builder для баз данных основана на
применении технологии RAD и объектно-ориентированного
программирования как к пользовательскому
интерфейсу, так и к бизнес-логике баз данных. Модули
данных (Data Modules) поддерживают естественное отделение кодов
бизнес-логики обработки данных и компонент
пользовательского интерфейса, размещенных на
форме.
Объекты модулей данных, доступные на этапе
визуального проектирования и скрытые во время
работы приложения, действуют как
централизованный источник информации, который
организует не только сам доступ к базам данных,
но и бизнес-логику их обслуживания.
Реализация различных способов доступа к
элементам баз данных сосредоточена в
компонентах вкладки Data Access Палитры компонент. Эти
интерфейсные элементы заключают в себе такие
характеристики источника информации, как
спецификации конкретной базы данных, таблиц,
запросов и ссылок к полям в некоторой записи.
Использование модулей данных из Хранилища
объектов дает вам возможность моментально
адаптировать их к вашей задаче, перетаскивая
нужные вам объекты и компоненты на форму
создаваемого приложения. Изменения, внесенные
вами в бизнес-логику конкретного модуля данных
или в интерфейсные компоненты, никак не
отражаются на использовании того же модуля
другими разработчиками.
Чтобы создать на основе готового модуля
приложение "Заказчики" с данными о
заказчиках товара, производимого некоторой
компанией, выполните следующие действия:
=> Выполните команду File | New из главного меню. => На вкладке Data Modules выберите значок
Customer Data, а затем нажмите
кнопку ОК.
=> Дважды щелкните мышью на таблице
Customers модуля данных.
Откроется список Customerdata->Customers полей таблицы заказчиков (Рис.
2.16).
Рис. 2.16. Поля таблицы заказчиков
Customers модуля данных Customer Data.
=> Удерживая нажатой
клавишу Shift, выберите нужные вам поля из списка. =>
Перетащите выбранные поля и разместите их на
форме. => Перетащите компоненту навигатора базы
данных DBNavigator
из вкладки Data Control Палитры и в ее свойстве DataSource укажите
источник данных
CustomerData->CustomerSource.
Теперь вы сможете просматривать "живые"
данные всех записей в таблице заказчиков уже на
стадии проектирования формы приложения (Рис. 2.17).
Для этого нажимайте кнопки со стрелками на
панели, расположенной в верхней части списка
полей таблицы заказчиков. С помощью Инспектора
объектов модифицируйте по своему усмотрению
свойства компонент полей (например, в свойствах Caption замените все
названия на русскоязычные).
Рис. 2.17.
Форма приложения для доступа к таблице
заказчиков.
Когда вы скомпилируете и соберете приложение,
вы увидите те же данные, что и на стадии
проектирования.
Рис. 2.18.
Приложение "Заказчики" в работе.
Теперь, пользуясь
кнопками панели навигатора, вы сможете
редактировать данные -вставлять новые записи, Bычеркивать
ненужные, менять содержание полей и т.д. Рис. 2.18
показывает результат введения в таблицу
атрибутов вымышленного отечественного
заказчика (после нажатия кнопки "+"). Внимание:
На этом примере вы можете впервые столкнуться со
сложностями в использовании русского шрифта при
попытках модифицировать оригинальные таблицы
демонстрационной базы данных BCDEMOS, входя щей в комплект C++Builder
Теперь, пользуясь кнопками панели навигатора,
вы сможете редактировать данные -вставлять новые
записи, Bычеркивать
ненужные, менять содержание полей и т.д. Рис. 2.18
показывает результат введения в таблицу
атрибутов вымышленного отечественного
заказчика (после нажатия кнопки "+"). Внимание:
На этом примере вы можете впервые столкнуться со
сложностями в использовании русского шрифта при
попытках модифицировать оригинальные таблицы
демонстрационной базы данных BCDEMOS, входя щей в комплект C++Builder
Standard. He думаю, что такое
ограничение корпорация Borland ввела сознательно. Не
относитесь к этой проблеме слишком серьезно -
ведь нашей задачей является обучение
современной методике программирования СУБД, для
чего демонстрационная база дает достаточный
экспериментальный материал (хотя и
англоязычный), а вовсе не модификация самой BCDEMOS.
Естественно, что разработчики настоящих
приложении имеют дело с реальными базами данных,
внутреннее устройство которых они обязаны знать
досконально.
2.3.3 Пример использования Мастера форм
Прежде, чем начать работу с последним примером
этой главы, просмотрите Словарь баз дачных (Database Dictionary),
выполнив команду главного меню Database
| Explorer (Проводник базы
данных). Открывшееся окно словаря (Рис. 2.19)
состоит из двух панелей. В древовидном перечне
левой панели найдите таблицу базы данных,
которую вы собираетесь связать с формой
проектируемого приложения. Для разработки
приложения "Моя записная книжка" я создал в Excel таблицу с именем NOTEBOOK. He беда, если
вы не захотите построить собственную рабочую
таблицу в рамках Excel, Access, Paradox или какой-нибудь другой
системы - при изучении примера можно
воспользоваться англоязычным прототипом CLIENTS из базы данных BCDEMOS.
Описание выбранной таблицы представлено тремя
вкладками правой панели. На вкладке
Definition вы найдете
характеристики таблицы (дата, время создания,
тип). Вкладка Enter SQL позволяет вводить и
редактировать команды на языке
структурированных запросов SQL к таблицам базы данных,
расположенных на локальном или удаленном
сервере. Если вы вводите команды изменения
данных таблицы INSERT, UPDATE или DELETE, убедитесь, что опция меню Options | Live Queries не
выбрана. Чтобы выполнить текущую команду SQL, нажмите кнопку с
изображением молнии справа от поля
редактирования. Вкладка Data показывает текущее содержание
таблицы:
Рис. 2.19. Содержание таблицы NOTEBOOK а окне Проводника базы данных.
Для использования Мастера форм при создании
приложения выполните следующие действия:
=> С помощью команды Database | Form Wizard из главного меню вызовите
Мастер форм, который проведет вас по диалоговым
страницам характеристик создаваемой формы.
=> На первой странице (Рис. 2.20) укажите, что
создаете простую форму на основе компонентных
объектов таблицы базы данных (Create a form
using TTable objects). Нажмите
кнопку Next.
Рис. 2.20. Первая страница диалога Мастера форм.
=> На второй странице (Рис. 2.21) найдите вашу
собственную таблицу NOTEBOOK.DBF (или ее прототип
CLIENTS.DBF) из базы данных с
псевдонимом BCDEMOS, которая будет использоваться формой
приложения. В данном примере обе таблицы
хранятся в каталоге CAProgram
Files\Borland\CBuilder\Examples\DATA.
Нажмите кнопку Next.
Рис. 2.21. Вторая страница диалога Мастера форм.
=> На третьей странице (Рис. 2.22) выберите нужные
вашему приложению поля таблицы из списка Available Fields и
нажатием кнопки ">" перенесите их в список Ordered Selected Fields. В
данном примере выбраны 5 полей. Нажмите кнопку Next.
Рис. 2.22. Третья страница диалога Мастера форм.
=^> На четвертой странице (Рис. 2.23) задайте
расположение выбранных полей на форме -
вертикально. Нажмите кнопку Next.
Рис. 2.23. Четвертая страница диалога Мастера
форм.
=> На пятой странице (Рис. 2.24) задайте положение
названий относительно полей - слева. Нажмите
кнопку Next.
Рис. 2.24. Пятая страница диалога Мастера форм.
=> На шестой странице (Рис. 2.25) можно
дополнительно потребовать создать для формы
новый модуль данных. Нажмите кнопку
Finish, завершая
разработку формы приложения базы данных под
управлением Мастера форм.
Рис. 2.25. Шестая страница диалога Мастера форм.
Далее, как обычно, можно воспользоваться
Инспектором объектов, чтобы адаптировать
компоненты формы к более удобному для вас
представлению (Рис. 2.26).
Рис. 2.26. Форма приложения, созданная Мастером
форм.
Когда вы скомпилируете и соберете приложение,
исходные данные таблицы появятся в том виде. как
вы их видели в Словаре баз данных.
Рис. 2.27.
Приложение "Моя записная книжка' и работе.
Теперь, пользуясь
кнопками панели навигатора, вы сможете
редактировать содержимое записной книжки -
вставлять новые записи, вычеркивать ненужные,
редактировать содержание полей и т.д. Рис. 2.27
отображает запись, которая стала начальной в
результате вычеркивания первой записи в
исходной таблице NOTEBOOK (после нажатия кнопки "-").
Естественно,
что оригинальная таблица
CLIENTS способна предоставить вам
другие данные (Рис. 2.28).
Рис. 2.28. Работа приложения базы данных с
таблицей CLIENTS.
В последнем примере Мастер форм проявил себя
как чрезвычайно полезный для новичков и удобный
в обращении встроенный инструмент
C++Builder, который позволяет
разработать полностью функциональное
приложение базы данных буквально за несколько
минут. Проектирование формы приложения, по
существу, заключается в выборе опций,
предлагаемых диалоговыми страницами Мастера
форм. Мастер форм самостоятельно закладывает
фундамент прототипа вашего приложения, вообще не
прибегая к "ручному" программированию.
Конечно, чтобы удовлетворить конкретным
требованиям поставленной задачи, вам не обойтись
без написания специфических кодов для обработки
событий, ошибок и отображения данных в различных
видах.
2.4 Итоги
C++Builder для операционных
систем Windows 95
и NT
обеспечивает высокую скорость визуальной
разработки методом перетаскивания компонент на
форму приложения. Мы убедились в высокой
продуктивности и гибкости повторно используемых
компонент, в особенности - элементов
пользовательского интерфейса с базами данных,
что в сочетании с высокопроизводительными
компилятором и загрузчиком действительно
позволяет быстро переходить от начального
прототипа приложения к работающей программе.