Главная страница
Навигация по странице:

  • Учебное пособие по курсу «МЕТОДЫ ПРОГРАММИРОВАНИЯ» для студентов специальностей G31 03 01 «Математика», G31 03 03 «Механика» Минск 2007

  • В. С. Романчик, А. Е. Люлькин

  • УДК 004.43(075.8) ББК 32.973.26-018.1я73 ©Романчик В.С., Люлькин А.Е. ISBN 985-485-498-1 БГУ, 2007 3ВВЕДЕНИЕ

  • Среда разработки (IDE).

  • Создание приложений в С++Builder.

  • Структура файла проекта.

  • Структура файла Project1.bpr.

  • Структура заголовочного файла.

  • TEdit

  • Инспектор объектов.

  • Редактор кода.

  • БГУ Пособие - Программирование в C++ Builder. Учебное пособие по курсу методы программирования для студентов специальностей


    Скачать 1.24 Mb.
    НазваниеУчебное пособие по курсу методы программирования для студентов специальностей
    АнкорБГУ Пособие - Программирование в C++ Builder.pdf
    Дата26.05.2018
    Размер1.24 Mb.
    Формат файлаpdf
    Имя файлаБГУ Пособие - Программирование в C++ Builder.pdf
    ТипУчебное пособие
    #19699
    страница1 из 12
      1   2   3   4   5   6   7   8   9   ...   12

    БЕЛОРУССКИЙ ГОСУДАРСТВЕННЫЙ УНИВЕРСИТЕТ
    МЕХАНИКО-МАТЕМАТИЧЕСКИЙ ФАКУЛЬТЕТ
    Кафедра численных методов и программирования
    ПРОГРАММИРОВАНИЕ В С++
    BUILDER
    Учебное пособие
    по курсу «МЕТОДЫ ПРОГРАММИРОВАНИЯ»
    для студентов специальностей
    G31 03 01 «Математика», G31 03 03 «Механика»
    Минск
    2007

    2
    УДК 004.43(075.8)
    ББК 32.973.26-018.1я73
    Б69
    А в т о р ы :
    В. С. Романчик, А. Е. Люлькин
    Р е ц е н з е н т ы : старший преподаватель Н. А. Аленский, кандидат физико-математических наук, доцент, зав. кафедрой информацион- ных технологий БГУК П. В. Гляков кандидат физико-математических наук, доцент С. В. Суздаль
    Рекомендовано Ученым советом механико-математического факультета БГУ
    2006 года, протокол № ___
    Программирование в C++ BUILDER: учебное пособие для студ. механико-матем. фак. /
    В. С. Романчик, А.Е.Люлькин. Мн.: БГУ, 2007. –126 с.
    ISBN 985-485-498-1.
    В пособии рассматриваются вопросы, относящиеся к использованию технологии объект- но-ориентированного программирования в системе C++ Builder. Описание методологии по- строения классов и использования компонентов сопровождается многочисленными примерами.
    Предназначено для студентов 2-го курса механико-математического факультета, изучающих курс «Методы программирования».
    УДК 004.43(075.8)
    ББК 32.973.26-018.1я73
    ©Романчик В.С.,
    Люлькин А.Е.
    ISBN 985-485-498-1
    БГУ, 2007

    3
    ВВЕДЕНИЕ
    Основные характеристики С++Builder. C++Builder включает язык
    C++, компилятор, интегрированную среду разработки приложений IDE
    (Integrated Development Environment), отладчик и различные инструмен- ты. C++Builder содержит комплект общих элементов управления, доступ к Windows API, библиотеку визуальных компонентов VCL (Visual Com- ponent Library), компоненты и инструменты для работы с базами данных.
    C++Builder добавляет к процессу программирования на языке C++ возможность быстрой визуальной разработки интерфейса приложений.
    Кроме библиотек OWL (Object Windows Library) и MFC (Microsoft
    Foundation Classes), он использует библиотеку VCL и позволяет включить в форму диалоги с пользователем, оставляя разработчику для реализации только функциональную часть, воплощающую алгоритм решения задачи.
    C++Builder имеет общую с Delphi библиотеку классов, часть из которых осталась написанной на языке Object Pascal. Благодаря этому, а также включению в С++Builder компиляторов С++ и Object Pascal, в приложениях можно использовать компоненты и код, написанные на
    Object Pascal, а также формы и модули Delphi.
    Компоненты C++Builder. Создание пользовательского интерфейса приложения заключается в добавлении в окно формы объектов, назы- ваемых компонентами. C++Builder позволяет разработчику создавать собственные компоненты и настраивать Палитру компонентов.
    Компоненты разделяются на видимые (визуальные) и невидимые
    (невизуальные). Визуальные компоненты появляются как во время выполнения, так и во время проектирования. Невизуальные компоненты появляются во время проектирования как пиктограммы на форме. Они не видны во время выполнения, но обладают функциональностью. Для добавления компонента в форму можно выбрать мышью нужный компонент в Палитре компонентов и щелкнуть левой клавишей мыши в нужном месте проектируемой формы. Компонент появится на форме, и далее его можно перемещать и изменять. Каждый компонент C++ Builder имеет три характеристики: свойства, события и методы. Инспектор объ-

    4
    ектов автоматически показывает свойства и события, которые могут быть использованы с компонентом. Свойства являются атрибутами ком- понента, определяющими его внешний вид и поведение. Инспектор объ- ектов отображает опубликованные (published) свойства компонентов на странице свойств (properties) и используется для установки published- свойств во время проектирования. Для изменения свойств компонента во время выполнения приложения нужно добавить соответствующий код.
    Помимо published-свойств, компоненты могут иметь открытые (public) свойства, которые доступны только во время выполнения приложения.
    Рис. 1. Окно Инспектора объектов
    События. Страница событий (Events) Инспектора объектов показывает список событий, распознаваемых компонентом и возникающих при изменении состояния компонента. Каждый экземпляр компонента имеет свой собственный набор функций - обработчиков событий. Создавая обработчик события, вы поручаете программе выполнить указанную функцию, если это событие произойдет. Чтобы добавить обработчик события, нужно выбрать компонент, затем открыть страницу событий Инспектора объектов и дважды щелкнуть левой клавишей мыши рядом с событием. Это заставит C++ Builder сгенерировать текст пустой функции с курсором в том месте, где следует вводить код. Далее нужно ввести код, который должен выполняться при наступлении данного события.

    5
    Среда разработки (IDE). C++ Builder представляет собой приложение, главное окно которого содержит меню (сверху), инструментальную панель (слева) и Палитру компонентов (справа).
    Помимо этого при запуске C++ Builder появляются окно Инспектора объектов и окно Object TreeView (слева), а также форма нового приложения (справа). Под окном формы приложения находится окно
    Редактора кода.
    Рис. 2. Главное окно интегрированной среды разработки
    Создание приложений в С++Builder. Первым шагом в разработке приложения C++ Builder является создание проекта. Чтобы создать новый проект, нужно выбрать пункт меню File|New| Application.
    C++ Builder создает файл Project.bpr, а также головной файл проекта
    Project.cpp, содержащий функцию WinMain(). Функция WinMain() в
    Windows-приложениях используется вместо функции main(). При добавление новой формы C++ Builder обновляет файл проекта и создает следующие дополнительные файлы:
    • файл формы с расширением .dfm, содержащий информацию о форме;
    • файл модуля с расширением .cpp, содержащий код на C++;
    • заголовочный файл с расширением .h, содержащий описание класса формы.

    6
    Для того чтобы откомпилировать текущий проект, нужно выбрать пункт меню Compile. Для того чтобы откомпилировать проект и создать исполняемый файл, из меню Run нужно выбрать пункт Run. В результате выполнения будет получена следующая форма:
    Рис. 3. Результат выполнения приложения
    Структура файла проекта. Для каждого приложения C++Builder создается xml-файл проекта Project.bpr и файл ресурсов. Еще один файл - головной файл проекта, содержащий функцию WinMain(), генерируется при выборе пункта меню File|New Application. Первоначально по умол- чанию этому файлу присваивается имя Project1.cpp. Если в процессе раз- работки приложения добавляются формы и модули, C++Builder обновля- ет файл. Для просмотра файла следует выбрать пункт меню Project|View
    Source.
    В головном файле проекта имеется определенный набор ключевых элементов:
    • Директива препроцессора #include предназначена для включения заголовочного файла, ссылающегося на описания классов библиотеки VCL.
    • Директива #pragma hdrstop предназначена для ограничения списка заголовочных файлов, доступных для предварительной компиляции.
    • Директива USEFORM показывает модули и формы используемые в проекте.
    • Директива USERES компилятора присоединяет файлы ресурсов к выполняемому файлу. При создании проекта автоматически создается файл ресурсов .res для хранения курсоров, пиктограмм и других ресурсов.
    • Application->Initialize().
    Это утверждение инициализирует приложение.

    7
    • Application->CreateForm(). Это утверждение создает форму приложения. Каждая форма в приложении имеет свое утверждение
    CreateForm.
    • Application->Run(). Это утверждение запускает приложение.
    • Блок try...catch используется для корректного завершения приложения в случае возникновения ошибки.
    Типичный головной файл проекта имеет следующий вид:
    //Project1.cpp --------------------------------------------------------
    #include
    #pragma hdrstop
    USERES("Project1.res");
    USEFORM("Unit1.cpp", Form1);
    //---------------------------------------------------------------------------
    WINAPI WinMain(HINSTANCE, HINSTANCE, LPSTR, int)
    { try
    {
    Application->Initialize();
    Application->CreateForm(__classid(TForm1), &Form1);
    Application->Run();
    } catch (Exception &exception)
    { Application->ShowException(&exception); } return 0;
    }
    Структура файла Project1.bpr. Файл Project1.bpr представляет
    XML-проект (C++Builder XML Project), содержащий описание создавае- мого приложения. Это текстовый файл, содержащий указания на то, какие файлы должны компилироваться и компоноваться в проект, а так- же пути к используемым каталогам.
    Структура модуля. Модуль содержит реализацию функциональной части объекта на языке C++ и по умолчанию представляет собой файл
    Unit1.cpp. Каждый такой файл компилируется в объектный файл с расширением .obj. При добавлении к проекту новой формы генерируется новый модуль.
    Имя исходного файла модуля и файла формы (*.dfm) должны быть одинаковыми. При создании обработчика событий в тексте модуля генерируется шаблон функции обработчика события, в который вводится код, выполняемый при наступлении обрабатываемого события.
    Ниже приводится текст модуля, генерируемый для исходной формы:
    //Unit1.cpp ------------------------------------------------------------
    #include
    #pragma hdrstop

    8
    #include "Unit1.h"
    #pragma package(smart_init)
    #pragma resource "*.dfm"
    TForm1 *Form1;//указатель на объект
    //---------------------------------------------------------------------------
    __fastcall TForm1::TForm1(TComponent* Owner) : TForm(Owner)
    { } //реализация конструктора
    Структура заголовочного файла. Заголовочный файл (файл с расширением .h, по умолчанию Unit1.h) генерируется при создании нового модуля и содержит описание класса формы. Такие описания генерируются автоматически и изменяются при внесении в форму новых компонентов или генерации новых обработчиков событий. В заголовочном файле содержится интерфейс, а в самом модуле – реализация методов.
    При удалении из формы компонентов их описания удаляются из заголовочного файла. При переименовании компонентов изменяются их описания в заголовочном файле, а также имена и описания обработчиков событий. Однако при этом не изменяются ссылки на эти компоненты и обработчики событий, используемые в других функциях. В связи с этим рекомендуется переименовывать компоненты и обработчики событий сразу же после их создания, пока на них не появились ссылки.
    В модуле могут содержаться классы и функции, не описанные в заголовочном файле, однако видимость их в этом случае ограничивается данным модулем.
    Ниже приводится заголовочный файл для исходной формы:
    //Unit1.h---------------------------------------------------------------------------
    #ifndef Unit1H
    #define Unit1H
    //---------------------------------------------------------------------------
    #include
    #include
    #include
    #include class TForm1 : public TForm
    {
    __published:
    // IDE-managed Components private: // User declarations public:
    // User declarations
    __fastcall TForm1(TComponent* Owner);
    };
    //--------------------------------------------------------------------------- extern PACKAGE TForm1 *Form1;
    #endif
    //---------------------------------------------------------------------------

    9
    Файл формы. Форма является одним из важнейших элементов приложения C++ Builder. Процесс редактирования формы происходит при добавлении к форме компонентов, изменении их свойств, создании обработчиков событий. Когда к проекту добавляется новая форма, создаются три отдельных файла: 1) файл модуля (*.cpp) содержит код методов, связанных с формой; 2) заголовочный файл (*.h) содержит опи- сание класса формы; 3) файл формы (*.dfm) содержит сведения об опуб- ликованных (доступных в Инспекторе объектов) свойствах компонентов, содержащихся в форме.
    При добавлении компонента к форме заголовочный файл и файл формы модифицируются. При редактировании свойств компонента в
    Инспекторе объектов эти изменения сохраняются в файле формы.
    Хотя в C++ Builder файл *.dfm сохраняется в двоичном формате, его содержание можно просмотреть с помощью редактора кода. Для этого нужно нажать правую клавишу мыши над формой и из контекстного меню формы выбрать пункт View as Text.
    Ниже приводится листинг файла некоторой формы:
    //Unit1.dfm--------------------------------------------------------------------------- object Form1: TForm1
    Left = 197
    Top = 358
    Width = 544
    Height = 181
    Caption = 'Form1'
    Color = clBtnFace
    Font.Charset = DEFAULT_CHARSET
    Font.Color = clWindowText
    Font.Height = -11
    Font.Name = 'MS Sans Serif'
    Font.Style = []
    OldCreateOrder = False
    PixelsPerInch = 96
    TextHeight = 13
    End
    Простейшее приложение. Важнейшей особенностью C++Builder яв- ляется автоматическая генерация кода программы. Когда к форме добав- ляете компонент, в тексте файла Unit1.h появляется объявление объекта класса данного компонента. Например, перенос на пустую форму компо- нента кнопки TButton сгенерирует объявление объекта Button1, а опре- деление события OnClick – объявление метода ButtonlClick , являющего- ся обработчиком этого события.

    10
    Рассмотрим простейшее приложение. Создается форма для сложения двух чисел. Используются компоненты: TEdit – для ввода чисел и ото- бражения результата; TLabel – для вывода строк “+” и “=”; TButton – кнопка, связанная с событием OnClick, для сложения чисел.
    Будем использовать следующие свойства и методы для компонентов:
    TEdit: Name (имя объекта), ReadOnly (режим "только чтение"), Text
    (текстовое поле);
    TLabel: Caption (текстовое поле);
    TButton: Caption (надпись на кнопке), OnClick (событие типа на- жатия кнопки).
    На рис. 4 приводятся окна Инспектора объектов в процессе работы со свойствами компонентов.
    Двойной щелчок по компоненту Button1 приведет к выводу окна ре- дактирования для Unit1.cpp и предложит определить тело метода But- ton1Click(), которое для рассматриваемой задачи должно иметь вид: void __fastcall TForm1::Button1Click(TObject *Sender)
    {
    Edit3->Text=IntToStr(StrToInt(Edit1->Text)+StrToInt(Edit2->Text));
    }
    Рис. 4. Работа с компонентами Edit1 и Button1

    11
    Для преобразования строки в целое число и обратно используются функции StrToInt() и IntToStr(), соответственно. На рис. 5 показан ре- зультат выполнения приложения.
    Рис. 5. Форма в процессе выполнения приложения
    Рассмотрим основные инструменты визуальной разработки приложений.
    Администратор проектов. Предназначен для манипуляций с теку- щим проектным файлом с расширением .срр. Чтобы открыть окно адми- нистратора, выполните команду View|Project|Manager.
    Редактор форм. Форма представляет объект, отображаемый в виде окна с управляющими компонентами. C++Builder создает форму в окне
    Редактора при добавлении формы к проекту или берет ее из Хранилища объектов.
    Инспектор объектов. Инспектор объектов используется при проек- тировании объектов и методов и имеет две вкладки: Свойства (Properties) и События (Events).
    Просмотрщик объектов Object TreeView позволяет просматривать дерево объектов.
    Хранилище объектов. Обеспечивает возможность разделения
    (sharing) или повторного использования (reuse) содержащихся в нем объектов. В качестве объектов хранения могут выступать созданные пользователем формы, проекты, модули данных.
    Редактор кода. Предоставляет средство для просмотра и редактирования текста программного модуля (Unit).
    Палитра компонентов. C++Builder поставляется вместе с Биб- лиотекой Визуальных Компонентов VCL (Visual Component Library), со- держащей множество повторно используемых компонентов. C++Builder позволяет не только пользоваться готовыми компонентами, но и созда- вать новые компоненты.
    Формы и диалоговые окна. Главная форма (Form1) открывается при открытии приложения. Метод Close() закрывает форму и прекращает

    12
    выполнение приложения. Свойства формы могут устанавливаться как на этапе проектирования, так и на этапе выполнения приложения. Форма используется в качестве контейнера для размещения других компонен- тов. В табл. 1 приведены некоторые свойства формы.
    С формой связаны события: OnActivate – вызывается при активи- зации формы после получения фокуса ввода; OnCreate –вызывается при создании формы; OnClose – вызывается при закрытии формы; OnClick – вызывается при щелчке кнопки; OnKeyDown, OnKePress –первое собы- тие активизируется при нажатии любой клавиши, в том числе функцио- нальной, для второго события клавиша не должна быть функциональной;
    OnMouseDown, OnMouseMove и другие – связаны с мышью. При воз- никновении каждого события вызывается соответствующй метод- обработчик события. Например: void __fastcall TForm1::FormClick(TObject *Sender){ }
    Обработчику события передается указатель на вызвавший его объект.
    Дополнительными параметрами могут быть, например, текущие координаты указателя мыши и т.п.
    Форма создается при создании приложения. Приложение может содержать несколько форм. Существует два вида оконных приложений:
    SDI и MDI. SDI-приложения могут отображать несколько окон, не привязанных к главному. Каждая форма может отображаться в мо- дальном режиме и требовать закрытия при переходе к другой форме
    (Form2->ShowModal(), Form2->Close()). Пока модальное окно не закры- то, нельзя перейти к другому окну. В немодальном режиме разрешается доступ к нескольким формам. В качестве примера рассмотрим приложе- ние, состоящее из двух немодальных SDI форм: Form1 и Form3. Созда- дим кнопку и запишем код обработчика события void __fastcall TForm1::Button1Click(TObject *Sender)
    {
    Form3->Show();
    }
    При этом необходимо включить в заголовочный файл Unit1.h первой формы заголовочный файл второй формы: #include "Unit3.h"
    На рис. 6 показан результат выполнения приложения.
    Рассмотрим еще одно приложение состоящее из двух форм: Form1 и
    AboutBox. Для этого в меню выберем File|New|Forms|AboutBox. В свойствах формы AboutBox выберем: Visible=true и
    FormStyle=fsStayOnTop.

    13
    Таблица 1
      1   2   3   4   5   6   7   8   9   ...   12


    написать администратору сайта