Введение
В последнее время все чаще стали применяться нетрадиционныеметоды обучения, и для более качественного процесса создаются электронныепособия и учебник. Применение автоматизированных обучающих систем в учебныхзаведениях получает все большее распространение. В частности, постепенновнедряется дистанционная форма обучения, предполагающая самостоятельноеосвоение учебных дисциплин при помощи применения программно-педагогическихсредств. Кроме того, на дневной форме обучения такие средства применяются каквспомогательные.
Даже при наличии большого числа обучающих программ,электронных пособий и учебников, разработка новых не теряет своей актуальности.Это обусловлено тем, что не все из них отражают ту специфику, все тенеобходимые аспекты, которые зависят от предметной области и требований преподавателя.К тому же постоянно возникают новые задачи, изменяются требования ксуществующим проектам, изменяется сам предмет. Поэтому уже существующиепрограммно-педагогические средства зачастую уже не могут применяться в полноймере. По этим причинам в качестве темы представленного курсового проектавыбрано электронный учебник.
В первой главе пояснительной записки «Постановка задачи»описываются краткие требования к обучающим программам, производится краткийобзор и анализ существующих программно-педагогических средств, уточняетсяпредмет обучения, его тема, описываются требования к интерфейсу.
Во второй главе «Вычислительная система» рассматривается характеристикиаппаратного средства для корректной работы программного средства.
В третьей главе «Проектирование задачи» описываютсясредства реализации выбранного сценария, приводится характеристика классов, ихиерархия, осуществляется и обосновывается выбор инструментов разработкипрограммного продукта.
В четвертой главе «Программная реализация» описываютсяформы входных и выходных данных, функциональные решения (функции, их назначениеи связь с элементами интерфейса), физическая структура (модули реализации) ивзаимосвязь модулей, проведенное тестирование и его результаты.
В пятой главе «Описание применения» указываются назначениепрограммы, область ее применения, системные требования, предъявляемыепрограмме, а также приводится описание системы помощи.
В заключении анализируются результаты проделанной работы,использованные методы и средства, недостатки разработанного программногопродукта и перспективы его дальнейшей модификации и доработки.
1 Постановка задачи
1.1 Требования к обучающим программам
Применение представленного программно-педагогическогосредства предполагает знание основ алгоритмизации и программирования. Для изученияматериалов, представленных в разрабатываемом электронном учебнике, необходимоналичие некоторых знаний о базовых принципах объектно-ориентированногопрограммирования (абстракция, ограничение доступа, иерархия). Такжепользователь для работы с данным программно-педагогическим средством должениметь базовые знания по языку программирования C++. В частности, необходимоиметь некоторое представление о синтаксисе языка С++, его основных операторах ивыражениях, базовых типах данных. Все это требуется для пониманияпредставленных в излагаемом материале концепций и примеров.
Разрабатываемый программный продукт предназначен дляиндивидуального применения, то есть предполагает использование однимпользователем. Групповая работа с представленным электронным учебником можетосуществляться путем использования каждым членом группы отдельного экземплярапрограммы.
Протокол работы программы должен представлять собойследующее: при загрузке программы на экране появляется главная форма. На этойформе имеются следующие элементы: содержание, область, содержащая излагаемыйматериал, кнопки для просмотра темы, а так же для сохранения темы в фаил.Содержание должно быть представлено в виде иерархической структуры,напоминающей дерево каталогов. Пользователь должен иметь возможность выбратьнеобходимый ему пункт содержания, после чего он может нажать на кнопку просмотра.Далее в области изложения появляется материал по выбранной теме. По желаниюпользователь может сохранить выбранную тему в текстовый фаил.
1.2 Обзор и анализ существующих программно-педагогическихсредств
В настоящее время существует огромное числопрограммно-педагогических средств по программированию на языке С++. Большинствоиз них представляют собой html-учебники. Однако во многих из существующихобучающих программ отсутствует возможность просмотра демонстрационных программ.Кроме того, преимущественно такие средства не являются узкоспециализированными, так как направлены на обучение программированию на языкеC++ в целом.
1.3 Интерфейс
На главной форме программы должны присутствоватьследующие элементы: содержание, область, содержащая излагаемый материал, кнопкидля просмотра темы, а так же для сохранения темы в фаил. Содержание должно бытьпредставлено в виде иерархической структуры, напоминающей дерево каталогов, ирасположено в левой части формы. Пользователь должен иметь возможность выбратьнеобходимый ему пункт содержания, после чего он может нажать на кнопкупросмотра. Далее в области изложения, занимающей всю правую часть формы,появляется материал по выбранной теме. Пользователь просматривает текст лекции,и по желанию может сохранить выбранную тему в текстовый фаил.
2 Вычислительная система
2.1 Аппаратные требования
Для нормального функционирования разработанногопрограммного средства необходим персональный компьютер с операционной системойMS Windows NT/2000/XP. При этом минимальными аппаратными требованиями будеттакая комплектация, при которой функционирование самой операционной системыбудет осуществляться без сбоев и задержек.
2.2 Системные требования
Данное программное средство тестировалось на ОП WindowsXP SP3, при следующем оснащении PC:
процессор — CPU Intel Celeron 1700 MHz;
Материнская плата – MB Giga-Byte 8PE800-RS2;
Видеокарта – SVGA GeForce MX5200-8x 128MB и SVGA GeForce2 Ti -8x 64MB;
ОЗУ – DDR RAM 256MB PC-3200 Hynix/DDR400 + Samsung/DDR400;
Винчестер – Samsung 160Gb
Для нормального функционирования можно использовать PC соследующем оснащением:
процессор с частотой 200Mhz и выше;
минимальный объем оперативной памяти 32 Mb;
свободное место на диске 10 Mb;
операционная система Windows 9.x/2000/XP;
клавиатура, мышь.
2.3 Операционная система
Для разработки данного проекта требуется операционнаясистема семейства Windows, в частности Windows XP. Данная ОС содержиткачественный интерфейс, предоставляет удобные средства разработки приложений.Windows XP является на сегодняшний день одной из самых распространенных системсреди пользователей программного обеспечения, поэтому ее использование увеличиваетвероятность высокого спроса на данное программное приложение.
3 Проектирование задачи
3.1 Описание классов
Так как при разработке программы используетсяинтегрированная среда разработки Borland C++ Builder 6.0, то необходимопривести описание классов, использующихся при работе с компонентами библиотекиVCL — библиотекой визуальных компонент.
Класс TObject является базовым классом для всех прочихпорождаемых классов. TObject инкапсулирует общее для всех объектов системыC++Builder функциональное поведение, а именно:
— способность конструктора создавать, а деструктораразрушать объект —экземпляр класса в динамической памяти. Конструктор TObjectвозвращает указатель на создаваемый объект.
— информацию RTTI об имени, типе производного объекта иего свойствах, которые объявлены как _published.
— поддержку обработки сообщений.
Большинство этих методов предназначены для внутреннегоиспользования средой C++Builder. Поэтому все компоненты должны порождатьсянепосредственно от класса TComponent или от его потомков. TComponent, будучи всвою очередь потомком TObject, наследует его члены, методы и свойства.
TObject используется для объявления простых объектов,которые не являются компонентами и не нуждаются в поточности и присваивании.
Класс TPersistent непосредственно произведен от TObject.Этот абстрактный класс не определяет никаких специальных свойств или событий,однако его производные приобретают особые способности присваивания ипоточности.
TPersistent определяет ряд поточных методов, используемыхразработчиками компонент, которые могут быть перегружены производнымикомпонентами:
— Assign позволяет присваивать значения свойствам.
— AssignTo позволяет присваивать содержимое одногообъекта другому (например, как делает это производный от TPersistent классTClipboard).
— DefineProperties позволяет определить процедурузагрузки и сохранения в потоке особых дополнительных свойств. По умолчаниюсохраняются только свойства, объявленные как _published.
Класс TComponent непосредственно произведен отTPersistent. Как уже было сказано, все компоненты являются производными отTComponent и могут находится в его владении. TComponent инкапсулирует общее длявсех компонент функциональное поведение, обусловленное свойствами и методами, которыеобеспечивают:
— перенос на форму из Палитры компонент и манипуляции вокне Редактора форм.
— способность владения и обслуживания других компонент.
-специальные характеристики поточности, с которыми можетманипулировать Инспектор объектов на этапе проектирования.
— возможность манипулирования некоторыми невидимымикомпонентами на стадии проектирования.
Класс TComponent определяет ряд особых свойств:
— Owner — ссылается на владельца компоненты.
— ComponentCount — число компонент в перечне, которымивладеет данная компонента.
— Componentlndex — индекс компоненты в перечне, начиная с0.
— Components — Свойство, содержащее перечень компонент,которыми владеет данная компонента.
— ComponentState — текущее состояние компоненты.
— ComponentStyle — стиль, определяющий поведениекомпоненты.
— Name — имя компоненты.
— Tag — свойство типа int, которое не имеетпредопределенного значения и может содержать любые данные или указатели, поусмотрению программиста.
Класс TComponent определяет ряд методов, которые придают объектуправо владения другими компонентами и возможность доступа к ним посредствомИнспектора объектов:
— Destroying и DestroyComponents устанавливают атрибутыданной компоненты и компонент, которыми она владеет, в состояние, указывающеена то, что они подлежат уничтожению.
— HasParent возвращает булево значение, указывающее наналичие родителя компоненты. Обращаться к этому методу следует до ссылок кродителю данной компоненты.
— InsertComponent добавляет компоненту, передаваемую вкачестве параметра, к перечню компонент, которыми владеет данная компонента, аRemoveComponent удаляет компоненту из этого перечня.
— FindComponent возвращает указатель экземпляракомпоненты, о которой известно только имя, но неизвестна ссылка на владельца
Класс TControl определяет общие для видимых компонентчлены данных, методы и события.
Поскольку элементы TControl обладают способностьюотображать себя, некоторые его свойства оперируют с положением, размером ивидом объекта (Top, Left, Width, Height и Cursor, Hint), а другие свойстваотносятся к параметрам области клиента (ClientRect, ClientWidth иClientHeight).
TControl также вводит свойства, устанавливающиевидимость, доступность, цвет и шрифт элементов управления (Visible, Enabled,Color и Font). Свойства Text и Caption обеспечивают установку редактируемыхтекстов и названий.
Наличие свойства Parent (Родитель), содержащегосоответствующую ссылку, обусловлено возможностью класса TControl иметьродителя. Этот родитель может быть производным от TWinControl, посколькуродители обязаны быть оконными элементами управления.
TControl содержит ряд событий, возникающих приманипуляциях мышью над, видимыми элементами управления (OnClick, OnDblClick,OnMouseDown, OnMouseMove, OnMouseUp, OnDragOver, OnDragDrop и OnEndDrag).
Большинство компонент являются производными отTWinControl или TGraphicControl. Эти базовые классы рассматриваются ниже.
Класс TWinControl инкапсулирует оконные элементыуправления с дескрипторами. Некоторые производные от TWinControl (компонентыTEdit, TListBox и TComboBox) инкапсулируют стандартные элементы управленияWindows — поля редактирования, простые и комбинированные списки и т.д. Поэтомупрограммисту не придется манипулировать с ними посредством стандартных функцийWindows API, а пользоваться свойствами и методами, предоставляемыми самимикомпонентами.
Производные компоненты от TWinControl обладают тремяосновными характеристиками: они имеют оконные дескрипторы, способны приниматьфокус ввода и могут являться родителями других элементов управления. Поэтомумногие свойства TWinControl предназначены для изменения фокуса, обслуживаниясобытий клавиатуры и отображения потомков компоненты:
— Brush. Управляет цветом и орнаментом канвы,используемой при заливке графических фигур и фона.
— Controls. Содержит список элементов управления, длякоторых TWinControl является родителем.
— ControlCount. Содержит число элементов управления, длякоторых TWinControl является родителем.
— Ctl3d. Определяет, требуется ли трехмерное отображениекомпоненты.
— Handle. Ссылается на оконный дескриптор объектаWindows, который инкапсулирует TWinControl. Это свойство передается темстандартным функциям Windows API, которые принимают дескриптор как параметр.
— HelpContext. Задает номер контекстной справки,соответствующий некоторому окну в файле помощи с расширением .hlp. Это свойствопозволяет организовать контекстно-чувствительный поиск в справочной службе дляотдельных компонент.
— Showing. Указывает, видима или невидима компонента.
— TabStop. Указывает, можно ли использовать клавишутабуляции для выбора нужной компоненты.
— TabOrder. Определяет позиции табулятора выборакомпонент.
Методы TWinControl главным образом ориентированы наразработчиков компонент и предназначены для управления фокусом, получениястатусной информации, диспетчеризации сообщений и позиционирования:
— Broadcast используется для рассылки сообщений всемпотомкам TWinControl.
— 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);
void __fastcall SpeedButton1MouseMove(TObject *Sender,
TShiftState Shift, int X, int Y);
void __fastcall FormMouseMove(TObject *Sender,TShiftState Shift,
int X, int Y);
void __fastcall SpeedButton2MouseMove(TObject *Sender,
TShiftState Shift, int X, int Y);
private:// User declarations
public:// User declarations
__fastcall TForm1(TComponent* Owner);
};
//---------------------------------------------------------------------------
extern PACKAGE TForm1 *Form1;
//---------------------------------------------------------------------------
#endif
// Заголовочный файл Unit2.H с объявлением класса главнойформы Form2
//---------------------------------------------------------------------------
#ifndef Unit2H
#define Unit2H
//---------------------------------------------------------------------------
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
//---------------------------------------------------------------------------
class TForm2: public TForm
{
__published:// IDE-managed Components
TMainMenu *MainMenu1;
TMenuItem *N1;
TMenuItem *N2;
TMenuItem *N3;
TMenuItem *N4;
TSpeedButton *SpeedButton1;
TTreeView *TreeView1;
TMemo *Memo1;
TMenuItem *N5;
TMenuItem *N6;
TFontDialog *FontDialog1;
TSpeedButton *SpeedButton2;
TSpeedButton *SpeedButton3;
TFindDialog *FindDialog1;
TMenuItem *N7;
TMenuItem *N9;
TSpeedButton *SpeedButton4;
TSaveDialog *SaveDialog1;
void __fastcall SpeedButton1Click(TObject *Sender);
void __fastcall TreeView1DblClick(TObject *Sender);
void __fastcall FormClose(TObject *Sender, TCloseAction&Action);
void __fastcall N6Click(TObject *Sender);
void __fastcall SpeedButton3Click(TObject *Sender);
void __fastcall SpeedButton2Click(TObject *Sender);
void __fastcall TreeView1KeyDown(TObject *Sender, WORD&Key,
TShiftState Shift);
void __fastcall Memo1KeyDown(TObject *Sender, WORD&Key,
TShiftState Shift);
void __fastcall N4Click(TObject *Sender);
void __fastcall N3Click(TObject *Sender);
void __fastcall N7Click(TObject *Sender);
void __fastcall FindDialog1Find(TObject *Sender);
void __fastcall N9Click(TObject *Sender);
void __fastcall SpeedButton4Click(TObject *Sender);
private:// User declarations
public:// User declarations
__fastcall TForm2(TComponent* Owner);
};
//---------------------------------------------------------------------------
extern PACKAGE TForm2 *Form2;
//---------------------------------------------------------------------------
#endif
// Заголовочный файл Unit3.H с объявлением класса формыForm3
//---------------------------------------------------------------------------
#ifndef Unit3H
#define Unit3H
//---------------------------------------------------------------------------
#include
#include
#include
#include
#include
#include
#include
//---------------------------------------------------------------------------
class TForm3: public TForm
{
__published:// IDE-managed Components
TSpeedButton *SpeedButton1;
TLabel *Label1;
TLabel *Label2;
TLabel *Label3;
TLabel *Label4;
void __fastcall SpeedButton1Click(TObject *Sender);
private:// User declarations
public:// User declarations
__fastcall TForm3(TComponent* Owner);
};
//---------------------------------------------------------------------------
extern PACKAGE TForm3 *Form3;
//---------------------------------------------------------------------------
#endif
// Заголовочный файл Unit4.H с объявлением класса формыForm4
//---------------------------------------------------------------------------
#ifndef Unit4H
#define Unit4H
//---------------------------------------------------------------------------
#include
#include
#include
#include
#include
#include
#include
//---------------------------------------------------------------------------
class TForm4: public TForm
{
__published:// IDE-managed Components
TSpeedButton *SpeedButton1;
TLabel *Label1;
TLabel *Label2;
TLabel *Label3;
TLabel *Label4;
TLabel *Label5;
void __fastcall SpeedButton1Click(TObject *Sender);
private:// User declarations
public:// User declarations
__fastcall TForm4(TComponent* Owner);
};
//---------------------------------------------------------------------------
extern PACKAGE TForm4 *Form4;
//---------------------------------------------------------------------------
#endif
// Файл Unit1.cpp для формы Form1
//---------------------------------------------------------------------------
#include
#pragma hdrstop
#include «Unit1.h»
#include «Unit2.h»
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
int c,c1;
bool fl,fl2;
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
: TForm(Owner)
{
}
//---------------------------------------------------------------------------
void __fastcall TForm1::SpeedButton1Click(TObject*Sender)
{
Form2->Visible=true;
Form1->Visible=false;
}
//---------------------------------------------------------------------------
void __fastcall TForm1::SpeedButton2Click(TObject*Sender)
{
Application->Terminate();
}
//---------------------------------------------------------------------------
void __fastcall TForm1::SpeedButton1MouseMove(TObject*Sender,
TShiftState Shift, int X, int Y)
{
fl=true;
}
//---------------------------------------------------------------------------
void __fastcall TForm1::FormMouseMove(TObject *Sender,TShiftState Shift,
int X, int Y)
{
fl=false;
}
//---------------------------------------------------------------------------
void __fastcall TForm1::SpeedButton2MouseMove(TObject*Sender,
TShiftState Shift, int X, int Y)
{
Form1->Repaint();
}
//---------------------------------------------------------------------------
// Файл Unit2.cpp для главной формы Form2
//---------------------------------------------------------------------------
#include
#pragma hdrstop
#include «Unit2.h»
#include «Unit1.h»
#include «Unit3.h»
#include «Unit4.h»
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm2 *Form2;
int i=0;
bool fg1,fg2;
int v1,v2,c2;
int SelPos;
AnsiString a;
//---------------------------------------------------------------------------
__fastcall TForm2::TForm2(TComponent* Owner)
: TForm(Owner)
{
}
//---------------------------------------------------------------------------
void __fastcall TForm2::SpeedButton1Click(TObject*Sender)
{
Application->Terminate();
}
//---------------------------------------------------------------------------
void __fastcall TForm2::TreeView1DblClick(TObject *Sender)
{
if(Form2->TreeView1->Selected->AbsoluteIndex==1)
{Form2->Memo1->Lines->LoadFromFile(«pages/1.dat»);
a=Form2->Memo1->Lines->Text;
};
if(Form2->TreeView1->Selected->AbsoluteIndex==2)
{Form2->Memo1->Lines->LoadFromFile(«pages/2.dat»);
a=Form2->Memo1->Lines->Text;
};
if(Form2->TreeView1->Selected->AbsoluteIndex==3)
{Form2->Memo1->Lines->LoadFromFile(«pages/3.dat»);
a=Form2->Memo1->Lines->Text;
};
if(Form2->TreeView1->Selected->AbsoluteIndex==4)
{Form2->Memo1->Lines->LoadFromFile(«pages/4.dat»);
a=Form2->Memo1->Lines->Text;
};
if(Form2->TreeView1->Selected->AbsoluteIndex==5)
{Form2->Memo1->Lines->LoadFromFile(«pages/5.dat»);
a=Form2->Memo1->Lines->Text;
};
if(Form2->TreeView1->Selected->AbsoluteIndex==6)
{Form2->Memo1->Lines->LoadFromFile(«pages/6.dat»);
a=Form2->Memo1->Lines->Text;
};
if(Form2->TreeView1->Selected->AbsoluteIndex==7)
{Form2->Memo1->Lines->LoadFromFile(«pages/7.dat»);
a=Form2->Memo1->Lines->Text;
};
if(Form2->TreeView1->Selected->AbsoluteIndex==8)
{Form2->Memo1->Lines->LoadFromFile(«pages/8.dat»);
a=Form2->Memo1->Lines->Text;
};
if(Form2->TreeView1->Selected->AbsoluteIndex==9)
{Form2->Memo1->Lines->LoadFromFile(«pages/9.dat»);
a=Form2->Memo1->Lines->Text;
};
if(Form2->TreeView1->Selected->AbsoluteIndex==10)
{Form2->Memo1->Lines->LoadFromFile(«pages/10.dat»);
a=Form2->Memo1->Lines->Text;
};
…………………………………………………………
}
//---------------------------------------------------------------------------
void __fastcall TForm2::FormClose(TObject *Sender,TCloseAction &Action)
{
Application->Terminate();
//---------------------------------------------------------------------------
void __fastcall TForm2::N6Click(TObject *Sender)
{ if (FontDialog1->Execute())
{Form2->Memo1->Font=Form2->FontDialog1->Font;
Form2->TreeView1->Font=Form2->FontDialog1->Font;
}
}
//---------------------------------------------------------------------------
void __fastcall TForm2::SpeedButton3Click(TObject*Sender)
{
intz=Form2->TreeView1->Items->Owner->Selected->SelectedIndex;
if (zTreeView1->Items->Count-1){
Form2->TreeView1->Items->Item[z+1]->Selected=true;
Form2->TreeView1->OnDblClick(Sender); }
}
//---------------------------------------------------------------------------
void __fastcall TForm2::SpeedButton2Click(TObject*Sender)
{
intz=Form2->TreeView1->Items->Owner->Selected->SelectedIndex;
if (z>0){
Form2->TreeView1->Items->Item[z-1]->Selected=true;
Form2->TreeView1->OnDblClick(Sender);}
}
//---------------------------------------------------------------------------
void __fastcall TForm2::TreeView1KeyDown(TObject *Sender,WORD &Key,
TShiftState Shift)
{
if(Key==VK_RETURN){Form2->SpeedButton3->OnClick(Sender);}
}
//---------------------------------------------------------------------------
void __fastcall TForm2::Memo1KeyDown(TObject *Sender,WORD &Key,
TShiftState Shift)
{
if(Key==VK_RETURN){Form2->SpeedButton3->OnClick(Sender);}
}
//---------------------------------------------------------------------------
void __fastcall TForm2::N4Click(TObject *Sender)
{
Form3->Visible=true;
}
//---------------------------------------------------------------------------
void __fastcall TForm2::N3Click(TObject *Sender)
{
Form4->Visible=true;
}
//---------------------------------------------------------------------------
void __fastcall TForm2::N7Click(TObject *Sender)
{
Form2->FindDialog1->Execute();
}
//---------------------------------------------------------------------------
void __fastcall TForm2::FindDialog1Find(TObject *Sender)
{AnsiString d;
for (i=0;iFindDialog1->FindTextA.Length();i++)
{d=d+i;}
if(Form2->FindDialog1->Options.Contains(frFindNext)) {
SelPos=a.Pos(Form2->FindDialog1->FindTextA);
if (SelPos>0){
Memo1->SelStart=SelPos-1;
Memo1->SelLength=Form2->FindDialog1->FindTextA.Length();
a.Delete(SelPos,Form2->FindDialog1->FindTextA.Length());
a.Insert(d,SelPos);
}
else {
ShowMessage(«Текст'»+Form2->FindDialog1->FindTextA+"' не найден");
a=Form2->Memo1->Lines->Text;}
Form2->SetFocus();
Form2->Memo1->SetFocus();}
}
//---------------------------------------------------------------------------
void __fastcall TForm2::N9Click(TObject *Sender)
{
if (Form2->N9->Checked) {
Form2->N9->Checked=false;
Form2->SpeedButton1->ShowHint=false;
Form2->SpeedButton2->ShowHint=false;
Form2->SpeedButton3->ShowHint=false;
Form2->TreeView1->ShowHint=false;
}
else {Form2->N9->Checked=true;
Form2->SpeedButton1->ShowHint=true;
Form2->SpeedButton2->ShowHint=true;
Form2->SpeedButton3->ShowHint=true;
Form2->TreeView1->ShowHint=true;
}
}
//---------------------------------------------------------------------------
void __fastcall TForm2::SpeedButton4Click(TObject*Sender)
{
if (SaveDialog1->Execute()) {
Memo1->Lines->SaveToFile(SaveDialog1->FileName);
}
ChDir(ExtractFilePath(Application->ExeName));
}
//---------------------------------------------------------------------------
// Файл Unit3.cpp для формы Form3
//---------------------------------------------------------------------------
#include
#pragma hdrstop
#include «Unit3.h»
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm3 *Form3;
int c3;
//---------------------------------------------------------------------------
__fastcall TForm3::TForm3(TComponent* Owner)
: TForm(Owner)
{
}
//---------------------------------------------------------------------------
void __fastcall TForm3::SpeedButton1Click(TObject*Sender)
{
Form3->Close();
}
//---------------------------------------------------------------------------//
Файл Unit4.cpp для формы Form4
//---------------------------------------------------------------------------
#include
#pragma hdrstop
#include «Unit4.h»
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm4 *Form4;
int c4;
//---------------------------------------------------------------------------
__fastcall TForm4::TForm4(TComponent* Owner)
: TForm(Owner)
{
}
//---------------------------------------------------------------------------
void __fastcall TForm4::SpeedButton1Click(TObject*Sender)
{
Form4->Close();
}
//---------------------------------------------------------------------------
Приложение Б
Диаграмма вариантов использования
/>