Запомнить сайт

Обратная связь

Добавить в избранное

Главная страница Инфа по реестру и биосу Соц опрос Реклама на сайте
Гостевая книга Учебники по программированию Немного о операционных системах Наш форум

Вы пришли из
Браузер у вас:
Сегодня:
Разрешение монитора:

на сайте на Народ.Ру на Яндексе


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:

2.2.4 Компоненты вкладки Data Access

Компоненты этой вкладки осуществляют включение в ваше приложение следующих элементов, обеспечивающих доступ к базам данных:

TBitBtn Создает кнопку с изображением битового образа.
TSpeedButton Создает графическую кнопку быстрого вызова.
TMaskEdit Создает область редактируемого ввода данных специфического формата.
TStringGrid Создает сетку для отображения строк по строкам или столбцам.
TDrawGrid Создает сетку для отображения графических данных по строкам или столбцам.
TImage Создает на форме контейнер для отображения битового образа, пиктограммы или метафайла.
TShape Рисует простые геометрические фигуры.
TBevel Создает линии и рамки с объемным видом.
TScrollBox Создает контейнер переменного размера с линейками прокрутки, если это необходимо
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. Форма приложения для доступа к таблице заказчиков.

Когда вы скомпилируете и соберете приложение, вы увидите те же данные, что и на стадии проектирования.

 

wpe1.jpg (17384 bytes)

Рис. 2.18. Приложение "Заказчики" в работе.

Теперь, пользуясь кнопками панели навигатора, вы сможете редактировать данные -вставлять новые записи,черкивать ненужные, менять содержание полей и т.д. Рис. 2.18 показывает результат введения в таблицу атрибутов вымышленного отечественного заказчика (после нажатия кнопки "+"). Внимание: На этом примере вы можете впервые столкнуться со сложностями в использовании русского шрифта при попытках модифицировать оригинальные таблицы демонстрационной базы данных BCDEMOS, входя щей в комплект C++Builder

 

Теперь, пользуясь кнопками панели навигатора, вы сможете редактировать данные -вставлять новые записи,черкивать ненужные, менять содержание полей и т.д. Рис. 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. Форма приложения, созданная Мастером форм.

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

wpe2.jpg (12798 bytes)

Рис. 2.27. Приложение "Моя записная книжка' и работе.

Теперь, пользуясь кнопками панели навигатора, вы сможете редактировать содержимое записной книжки - вставлять новые записи, вычеркивать ненужные, редактировать содержание полей и т.д. Рис. 2.27 отображает запись, которая стала начальной в результате вычеркивания первой записи в исходной таблице NOTEBOOK (после нажатия кнопки "-").

Естественно, что оригинальная таблица CLIENTS способна предоставить вам другие данные (Рис. 2.28).

 

Рис. 2.28. Работа приложения базы данных с таблицей CLIENTS.

В последнем примере Мастер форм проявил себя как чрезвычайно полезный для новичков и удобный в обращении встроенный инструмент C++Builder, который позволяет разработать полностью функциональное приложение базы данных буквально за несколько минут. Проектирование формы приложения, по существу, заключается в выборе опций, предлагаемых диалоговыми страницами Мастера форм. Мастер форм самостоятельно закладывает фундамент прототипа вашего приложения, вообще не прибегая к "ручному" программированию. Конечно, чтобы удовлетворить конкретным требованиям поставленной задачи, вам не обойтись без написания специфических кодов для обработки событий, ошибок и отображения данных в различных видах.

 

2.4 Итоги

C++Builder для операционных систем Windows 95 и NT обеспечивает высокую скорость визуальной разработки методом перетаскивания компонент на форму приложения. Мы убедились в высокой продуктивности и гибкости повторно используемых компонент, в особенности - элементов пользовательского интерфейса с базами данных, что в сочетании с высокопроизводительными компилятором и загрузчиком действительно позволяет быстро переходить от начального прототипа приложения к работающей программе.

<<назад>>

Rambler's Top100 Rambler's Top100 Рейтинг@Mail.ru

Сайт создан в системе uCoz