47977 (608419), страница 2
Текст из файла (страница 2)
- CanFocus возвращает булево значение, которое определяет, может ли TWinControl принять фокус ввода. Например, компонента не сможет принять фокус, если ее свойство Visible имеет значение false.
- ContainsControl определяет, содержится ли данный элемент управления внутри класса TWinControl. Этот метод не сообщает о том, является ли данный элемент потомком по отношению к TWinControl. Например, внешний класс TWinControl может быть родителем другого элемента, и эта родительская преемственность может продолжаться далее. Однако, все внутренние элементы содержатся во внешнем классе TWinControl.
- ContrblAtPos возвращает ссылку на потомка, если элемент управления заключен в заданных координатах области клиента родителя. Таким образом можно найти относительное положение потомка по отношению к родителю.
- DisableAlign и EnableAlign используются для временного запрещения или разрешения выравнивания компонент внутри TWinControl.
- Focused возвращает значение true, если TWinControl находится в фокусе ввода, т.е. является активным элементом формы, на которой он размещен.
- HandleAllocated возвращает значение true, если элемент управления имеет оконный дескриптор. HandleNeeded создает новый дескриптор, если он еще не был создан. Аналогичное действие выполняется автоматически при прямом обращении к свойству Handle.
- InsertControl добавляет элемент управления к свойству Controls (типа массив), делая TWinControl своим родителем. Лучший способ добавить потомка во время работы программы - просто присвоить ссылку на родителя свойству Parent. RemoveControl удаляет элемент управления из Controls.
- Invalidate и Repaint выполняют перерисовку компоненты.
- SetBounds устанавливает свойства границ компоненты (Left, Top, Width, Height) для TWinControl. Прямое изменение каждого из указанных свойств менее эффективно, поскольку всякий раз сопряжено с перерисовкой
- SetFocus активизирует TWinControl.
TWinControl имеет события, вызываемые взаимодействием с клавиатурой и изменением фокуса (OnKeyDown, OnKey Press, OnKeyUp, OnEnter и OnExif).
Разрабатываемые компоненты редко происходят непосредственно от TWinControl. Лучше производить новые компоненты от общего класса TCustomControl, который предоставляет канву для рисования и обрабатывает сообщение WM_PAINT, или от некоторых более специализированных классов (TButtonControl, TCustomComboBox, TCustomEdit или TCustomListBox).
Производные от абстрактного класса TGraphicControl, в отличие от TWinControl, не имеют оконного дескриптора, не могут принять фокус ввода и не могут являться родителями других элементов управления.
Производные TGraphicControl используются в тех ситуациях, когда необходимо отобразить на форме текст или графику, не обращаясь к функциональным возможностям обычных оконных элементов управления. Имеются следующие достоинства такого подхода. Во-первых, TGraphicControl не пользуется системными ресурсами Windows, так как не требует оконного дескриптора. Во-вторых, метод рисования TGraphicControl исполняются немного быстрее за счет того, что перерисовка компоненты не связана с диспетчеризацией сообщений Windows, а реализуется процессом рисования, заложенным в родителе данного элемента.
Производные TGraphicControl имеют обработчики событий, вызываемые манипуляциями с мышью.
TGraphicControl возлагает на пользователя операции перерисовки. Этот класс содержит свойство Canvas (Канва), которое обеспечивает доступ к отведенной для рисования поверхности, и виртуальный метод Paint, который вызывается в ответ на сообщение WM_PAINT, принимаемое родительским элементом управления.
Кроме того, при работе с формами, содержанием, браузерами, панелями, кнопками, рамками и надписями используются соответственно классы TForm, TTreeView, TCppWebBrowser, TPanel, TBitBtn, TBevel и TLabel.
3.2 Иерархия классов
В разрабатываемом программном продукте присутствует иерархия классов, представленная на рисунке 1.
Рисунок 1 — Иерархия классов
3.3 Выбор и обоснование инструментов разработки
В качестве инструментального средства реализации разрабатываемого программного продукта была выбрана интегрированная среда разработки Borland C++ Builder 6.0.
Выбор данного инструментального средства не случаен и основан на том, что данная ИСР имеет ряд достоинств. Основные преимущества Borland C++ Builder по сравнению с другими средствами разработки приложений:
- Быстрота разработки приложения.
- Высокая производительность разработанного приложения за счет получения 32-разрядного исполняемого кода с помощью оптимизирующего компилятора.
- Невысокие требования разработанного приложения к ресурсам компьютера.
- Возможность полного доступа к функциям операционных систем семейства Windows.
- Возможность модернизации среды разработки за счет встраивания в нее новых компонент, инструментов, экспертов
- Удачная проработка иерархии объектов
- Использование для написания кода одного из самых популярных языков программирования С++.
4 Программная реализация
4.1 Формы входных и выходных данных
Входные данные разработанного программного продукта представляют собой лекционные материалы по теме электронного учебника. Эти материалы представлены в виде dat-документов, загружаемых для отображения на главной форме в области изложения.
Выходными данными представленного электронного учебника являются экранные формы с отображением на них лекционных материалов.
4.2 Функциональные решения
Работа программы строится на взаимодействии с пользователем. Программа реагирует на поступающие в ее адрес сообщения и вызывает соответствующие обработчики событий. Эти обработчики событий и есть рабочие функции программы.
При запуске программы создается вступительная форма (Form1), которая показывает приглашение к запуску главной формы. При нажатии кнопки "Запуск учебника" (TForm1::SpeedButton1Click) запускается главная форма (Form2). На ней изображено иерархическая структура разделов, и поле для отображения теории.
Для выбора определенного раздела следует сделать двойное нажатие на интересующее название раздела после чего вызывается функция TForm2::TreeView1DblClick. Данная функция в зависимости от того, какая тема выбрана в содержании, автоматически формирует путь к файлу с темой (dat-документу), загружает его в окно браузера тем.
Для перехода к предыдущему или следующему разделу предусмотрены кнопки "Предыдущая", "Следующая" при нажатии которых вызывается событие TForm2::SpeedButton2Click и TForm2::SpeedButton3Click соответственно.
В программе предусмотрены функции выбора шрифта, поиска, отображения всплывающих подсказок, а так же сохранение выбранной темы в *.txt фаил.
Для изменения шрифта следует выбрать Опции -> Шрифт после чего запускается стандартное окно выбора шрифта FontDialog в котором можно выбрать шрифт, стиль, размер, видоизменение и цвет текста отображаемого на главной форме.
Для поиска следует выбрать Опции -> Поиск после чего запускается стандартное окно поиска FindDialog в котором можно задать текст для поиска (поиск осуществляется в открытом в данный момент разделе).
Отображение всплывающих подсказок может быть включено и отключено, которое осуществляется при выборе Опции -> Всплывающие подсказки.
Сохранение осуществляется путём выбора нужной темы(отобразить на экране) и нажать в правом нижнем углу кнопку сохранить. Далее выбрать путь сохранения файла.
При закрытии главной формы вызывается событие TForm2::FormClose, которое вызывает функцию Application->Terminate().
4.3 Модули реализации
В разработанный проект входят одиннадцать модулей – файл проекта (головная программа – файл Project1.cpp), заголовочный файл пригласительной формы (описание класса TForm1— файл Unit1.h), файл с реализацией функций-членов класса TForm1 (файл Unit1.cpp),заголовочный файл главной формы (описание класса TForm2— файл Unit2.h), файл с реализацией функций-членов класса TForm2 (файл Unit2.cpp), заголовочный файл формы об авторе (описание класса TForm3— файл Unit3.h), файл с реализацией функций-членов класса TForm3 (файл Unit3.cpp), заголовочный файл формы о программе (описание класса TForm4— файл Unit4.h), файл с реализацией функций-членов класса TForm4 (файл Unit4.cpp).
4.4 Взаимосвязь модулей
Наиболее распространенная связь, которая может существовать между двумя модулями, - компиляционная зависимость. В C++ такая зависимость указывается директивой #include (файл Form2.cpp содержит директиву #include ко всем модулям программы)
4.5 Тестирование
Тестирование программы проводилось в процессе разработки программы и по завершению этой разработки. В ходе тестирования проверялась работоспособность каждой операции, которую выполняет программа, моделировались все возможные действия пользователей и проверялась реакция программы на них.
5 Описание применения
5.1 Назначение программы
Данная программа представляет собой программно-педагогическое средство и предназначена для изучения материалов по предмету C++.
5.2 Область применения
Разработанный программный продукт может применяться как одиночным пользователем в целях самостоятельной проработки материала по языку С++, так и в учебных заведениях в качестве вспомогательного средства в учебном процессе.
5.3 Система помощи
В программе реализована всплывающая справка.
Заключение
Поставленная задача выполнена полностью. Разработанный электронный учебник можно успешно применять на практике, внедряя его в учебный процесс. Однако, как и в любом приложении в программе описанной выше имеются множество недостатков.
В частности у программы отсутствует возможность контроля знаний путем проведения тестирования, что не является плюсом представленного продукта.
Кроме того, пользовательский интерфейс продуман не достаточно профессионально, что вызвано отсутствием опыта у разработчика.
Несмотря на указанные недостатки, реализованное программное средство пригодно для использования в ходе учебного процесса и для самостоятельного изучения тем по предмету язык программирования C++. В дальнейшем при необходимости его можно легко модернизировать и доработать, так как при разработке соблюдался единый удобный для понимания стиль программирования.
Список использованных источников
1. Либерти, Джесс. Освой самостоятельно С++ за 21 день: 3-е изд, пер. с англ.: Уч. пос. — М.: Издательский дом «Вильямс», 2000. — 816 с.: ил. — Парал. тит. англ.
2. Буч Г. Объектно-ориентированный анализ и проектирование с примерами приложений на С++. 2-е изд.: Пер. с англ. – М.: Издательство Бином, СПб.: Невский диалект, 1999.
3. Прата Стивен. Язык программирования C++. Лекции и упражнения.Учебник.: Пер. с англ. – М.: Издательство Диасофт, 2004.
Приложение А Текст программы
//файл с головной программой Project1.cpp
//---------------------------------------------------------------------------
#include
#pragma hdrstop
USEFORM("Unit1.cpp", Form1);
USEFORM("Unit2.cpp", Form2);
USEFORM("Unit3.cpp", Form3);
USEFORM("Unit4.cpp", Form4);
//---------------------------------------------------------------------------
#include "Unit1.h"
HRGN Rgn;
//---------------------------------------------------------------------------
WINAPI WinMain(HINSTANCE, HINSTANCE, LPSTR, int)
{
try
{
Application->Initialize();
Application->CreateForm(__classid(TForm1), &Form1);
Application->CreateForm(__classid(TForm3), &Form3);
Application->CreateForm(__classid(TForm4), &Form4);
{
Rgn=CreateEllipticRgn(0,0,Form1->Width,Form1->Height);
SetWindowRgn(Form1->Handle,Rgn,True);
}
Application->CreateForm(__classid(TForm2), &Form2);
Application->Run();
}
catch (Exception &exception)
{
Application->ShowException(&exception);
}
return 0;
}
//---------------------------------------------------------------------------
// Заголовочный файл Unit1.H с объявлением класса формы Form1
//---------------------------------------------------------------------------
#ifndef Unit1H
#define Unit1H
//---------------------------------------------------------------------------
#include
#include
#include
#include
#include
#include
#include
#include
#include
//---------------------------------------------------------------------------
class TForm1 : public TForm
{
__published:// IDE-managed Components
TSpeedButton *SpeedButton1;
TSpeedButton *SpeedButton2;
TImage *logo;
void __fastcall SpeedButton1Click(TObject *Sender);
void __fastcall SpeedButton2Click(TObject *Sender);















