BorlandC++Builder1

Автор: Пользователь скрыл имя, 09 Октября 2011 в 01:57, статья

Краткое описание

Borland C++ Builder - выпущенное недавно компанией Borland средство быстрой азработки приложений, позволяющее создавать приложения на языке C++, используя при этом среду разработки и библиотеку компонентов Delphi. В настоящей статье рассматривается среда разработки C++ Builder и основные приемы, применяемые при проектировании пользовательского интерфейса.

Оглавление

Введение
Среда разработки C++ Builder
Компоненты C++ Builder
Свойства компонентов
События
Методы
Менеджер проектов
Создание приложений в С++ Builder
Пример: создание простейшего приложения

Файлы: 1 файл

BorlandC++Builder1.doc

— 1.61 Мб (Скачать)

Создадим  обработчик события OnClick для кнопки Button1:

void __fastcall TForm1::Button1Click(TObject *Sender)  
{  
if (Table1->Active)  
{  
Table1->Close();  
Button1->Caption = "Ioe?uou nienie &eeeaioia";  
}  
else  
{  
Table1->Open();  
Button1->Caption= "Cae?uou nienie &eeeaioia";  
}  
}

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

    Создадим  обработчик события OnClick для кнопки Button2:

void __fastcall TForm1::Button2Click(TObject *Sender)  
{  
if (Query1->Active)  
{  
Query1->Active = false;  
Button2->Caption = "Ioe?uou список &caeacia";  
}  
else  
{  
Query1->Active = true;  
Button2->Caption = "Заe?uou список &caeacia";  
}  
}

При нажатии  на кнопку Button2 будет то открываться, то закрываться запрос Query1, содержащий список заказов:

    Создадим  обработчики событий OnClick для радиокнопок RadioButton1 и RadioButton2:

void __fastcall TForm1::RadioButton1Click(TObject *Sender)  
{  
DBGrid1->DataSource = DataSource1;  
}  
//---------------------------------------------------------------------------  
void __fastcall TForm1::RadioButton2Click(TObject *Sender)  
{  
DBGrid1->DataSource =DataSource2;  
}

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

    Создадим  обработчик события OnClick для кнопки Button3:

void __fastcall TForm1::Button3Click(TObject *Sender)  
{  
if (Table1->Active)  
{  
Table1->SetRangeStart();  
Table1->Fields[0]->AsString = Edit1->Text;  
Table1->SetRangeEnd();  
Table1->Fields[0]->AsString = Edit2->Text;  
Table1->ApplyRange();  
}  
}

Теперь с  помощью полей редактирования Edit1 и Edit2 и кнопки Button3 можно выбрать  диапазон номеров клиентов для отображения  сведений о них в DBGrid1.

    Затем с помощью Visual Query Builder установим свойство SQL компонента Query2. Выберем в качестве имени базы данных BCDEMOS и внесем в запрос таблицы CUSTOMER и ORDERS. Затем установим связь между таблицами, проведя линию от поля CustNo в таблице CUSTOMER к полю CustNo в таблице ORDERS.

    Внесем  в запрос следующие поля:

  • Customer.CustNo
  • Customer.Company
  • Orders.OrderNo
  • Orders.AmountPaid

Рис. 12. Использование Visual Query Builder для создания комбинированного запроса

    Теперь  отсортируем результаты запроса  по номеру покупателя и выйдем из Visual Query Builder.

    Используя инспектор объектов, выберем компонент Query2 и установим его свойство Active равным true.

    Создадим  обработчик события OnClick для RadioButton3:.

void __fastcall TForm1::RadioButton3Click(TObject *Sender)  
{  
DBGrid1->DataSource= DataSource3;  
}

Скомпилируем  приложение. Щелкнем кнопками и "Открыть  список заказов", чтобы открыть  оба набора данных. Попробуем, используя  радиокнопки, переключаться между ними.

Рис. 13. Так выглядит готовое приложение

    Нажмем  кнопку "Открыть список клиентов". Введем значения полей "Начало" и "Конец" (например, 1200 и 1700 соответственно) и затем нажмем кнопку "Установить диапазон". Убедимся, что значения номеров заказов действительно находятся в пределах этого диапазона.

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

      Модули  данных

В предыдущем примере мы размещали компоненты со страницы Data Access непосредственно  на главную форму приложения. Однако наличие на форме большого количества невидимых компонентов в ряде случаев затрудняет проектирование пользовательского интерфейса. Кроме того, нередко бывает удобно отделить компоненты, отвечающие за доступ к данным и бизнес-логику информационной системы, от интерфейсных элементов, например, для обегчения ее дальнейшей модернизации. Для этой цели в C++ Builder имеется специальный тип, называемый модулем данных - TDataModule. Компонент этого типа можно условно считать специальным видом формы, хотя он и порожден непосредственно от TСomponent. Такой компонент-контейнер может содержать компоненты со страницы Data Access, а сам он не виден пользователю во время выполнения.

    Создадим  другую версию рассмотренного выше примера  с использованием модуля данных. В  этом случае компоненты Data Access помещаются в модуль данных, а ссылка на соответствующий h-файл помещается в модуль, связанный с главной формой приложения.

Рис.14. Размещение компонентов доступа  к данным в DataModule

    Приведем  исходный текст модуля, связанного с главной формой новой версии приложения:

//----------------------------------------------------  
#include <vcl\vcl.h>  
#pragma hdrstop

    #include"cust1.h"  
#include"custdm1.h"//Ссылканамодульданных  
//----------------------------------------------------- 
#pragmalink"Grids"  
#pragmaresource"*.dfm"  
TForm1*Form1;  
//-----------------------------------------------------  
__fastcallTForm1::TForm1(TComponent*Owner):TForm(Owner)  
{  
}  
//-----------------------------------------------------  
void__fastcallTForm1::Button1Click(TObject*Sender)  
{  
if(DataModule1->Table1->Active)  
{  
DataModule1->Table1->Close();  
Button1->Caption="Открытьтаблицу&клиентов";  
}  
else  
{  
DataModule1->Table1->Open();  
Button1->Caption="Закрытьтаблицу&клиентов";  
};  
}  
//-----------------------------------------------------  
void__fastcallTForm1::Button2Click(TObject*Sender)  
{  
if(DataModule1->Query1->Active)  
{  
DataModule1->Query1->Active=false;  
Button2->Caption="Открытьтаблицу&заказов";}  
else

    {  
DataModule1->Query1->Active=true;  
Button2->Caption="Закрытьтаблицу&заказов";  
}  
}  
//-----------------------------------------------------  
void__fastcallTForm1::RadioButton1Click(TObject*Sender)  
{ 
DBGrid1->DataSource=DataModule1->DataSource1;  
}  
//-----------------------------------------------------  
void__fastcallTForm1::RadioButton2Click(TObject*Sender)  
{  
DBGrid1->DataSource=DataModule1->DataSource2;  
}  
//-----------------------------------------------------  
void__fastcallTForm1::RadioButton3Click(TObject*Sender)  
{  
DBGrid1->DataSource=DataModule1->DataSource3;  
}  
//----------------------------------------------------  
void__fastcallTForm1::Button3Click(TObject*Sender)  
{ 
if(DataModule1->Table1->Active)  
{  
DataModule1->Table1->SetRangeStart();  
DataModule1->Table1->Fields[0]->AsString=Edit1->Text;  
DataModule1->Table1->SetRangeEnd();  
DataModule1->Table1->Fields[0]->AsString=Edit2->Text;  
DataModule1->Table1->ApplyRange(); 
}  
}  
//----------------------------------------------------

Информация о работе BorlandC++Builder1