Разработка текстового редактора в С++ Builder

МИНИСТЕРСТВО  ОБРАЗОВАНИЯ И НАУКИ РОССИЙСКОЙ ФЕДЕРАЦИИ

Федеральное государственное бюджетное образовательное учреждение

высшего профессионального  образования

«Кубанский государственный университет»

Филиал в  г. Новороссийске

Кафедра информатики и математики

 

Допустить к  защите

«_______»______________2012  г.

Научный руководитель – 

Кандидат  физико-математических наук

С.В. Дьяченко ________________

 

КУРСОВАЯ  РАБОТА

 

Разработка  текстового редактора в С++ Builder

 

 

 

Работу выполнил: ______________  Гриценко С.С.

Филиал ФГБОУ ВПО «Куб ГУ»  в г. Новороссийске

Специальность     010501.65 «ПМиИ» 3 курс ОФО

 

Нормоконтролер   ______________  специалист по УМР Данилова Е.А.

 

 

 

 

 

 

Новороссийск 2012

 

 

СОДЕРЖАНИЕ

 

Введение……………………………………………………….............................3 1История языка C++………………………........................................................5

    1. Стандартизация языка…………….....................................................7
    2. История названия……………………….............................................8
    3. Достоинства…………………………………………...........................8

2 C++ Builder…………………………………………..........................................12

           2.1 Интегрированная Среда Разработки..............................................13

3 Системные диалоги......................................................................................14

      3.1 Компоненты закладки Dialog..........................................................14

      3.2 Диалоги открытия и сохранения файлов ……….………................16

      3.3 Диалог выбора шрифта…………....................................................17

      3.4 Диалоги печати и установки  принтера.............................................20

4 Реализация программы в среде «С++ Builder 6»..........................................23

Заключение………………………………………..……………………………..30

Библиографический список…..............................................................................31

 

 

 

 

 

 

 

 

 

 

 

 

                                       

 

 

ВВЕДЕНИЕ

 

C++Builder является объектно-ориентированным языком программирования и на примере создания текстового редактора я хочу продемонстрировать всю мощь и быстроту визуального, объектно-ориентированного программирования. Программа должна обеспечивать ввод и редактирование текста в окне представления и отображать полосы прокрутки. Меню программы должно содержать команды печати, команды вырезания, копирования и вставки текста, а так же команды открытия и сохранения файлов, а так же соответствующие пункты меню «Файл», «Правка», «Шрифт». Меню «Файл» должно содержать 5 пунктов: «Открыть файл», «Сохранить файл», «Установка принтера», «Печать», «Выход». Меню «Правка» должно содержать 4 пункта, такие как: «Копировать», «Вставить», «Вырезать», «Удалить». И пункт меню «Шрифт», который содержит в себе один подпункт «Настройка шрифта».

Несколько лет назад  исследователи заметили, что программисты в течение определенного времени  пишут и отлаживают  приблизительно одинаковый по объему код, независимо от используемого языка программирования. Объем работы примерно тот же, но результаты разные. Написание 100 строк  на С требует столько же затрат, сколько и 100 строк кода на ассемблере, но возможности кода на С гораздо шире. Поняв это, исследователи начали разрабатывать языки высокого уровня, которые увеличивали бы потенциал отдельного программиста, сокращая тем самым строки и стоимость разработки проектов.

В 70-х годах среди создателей языков программирования приобрела  популярность концепция объекта. Объект является совокупностью кода и данных, созданной для воспроизведения свойств физических объектов или абстрактных понятий.

Объектно-ориентированное  программирование – это методология, которая концентрируется больше на связях между объектами, чем на деталях реализации. Данные связи  обычно развиваются по принципу деревьев, при этом новые типы объектов образуются уже из существующих. Сокрытие реализации объекта ведет к тому, что пользователя больше волнует связь с остальными объектами, чем поведение объекта. Данное отличие очень важно, поскольку оно означает принципиальный отказ от «императивных» языков (таких как С), в которых функции и вызовы функций составляют основу деятельности.

В С++ некоторые объекты являются частью самого языка. Но в целом задача создания новых объектов ложится на пользователя. В C++Builder имеется множество типов объектов, но реальное использование языка требует создания новых типов. Эффективность ООП проявляется только при создании и применении групп связанных между собой объектов. Такие группы называют иерархиями классов. Развитие этих иерархий классов является основой деятельности в ООП.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

1 История языка C++

 

Язык возник в начале 1980-х годов, когда сотрудник фирмы Bell Laboratories Бьёрн Страуструп придумал ряд усовершенствований к языку C под собственные нужды. До начала официальной стандартизации язык развивался в основном силами Страуструпа в ответ на запросы программистского сообщества. В 1998 году был ратифицирован международный стандарт языка C++: ISO/IEC 14882:1998 «Standard for the C++ Programming Language»; после принятия технических исправлений к стандарту в 2003 году — нынешняя версия этого стандарта — ISO/IEC 14882:2003.

Ранние версии языка, известные  под именем «C с классами», начали появляться с 1980 года. Идея создания нового языка берёт начало от опыта программирования Страуструпа для диссертации. Он обнаружил, что язык моделирования Simula имеет такие возможности, которые были бы очень полезны для разработки большого программного обеспечения, но работает слишком медленно. В то же время язык BCPL достаточно быстр, но слишком близок к языкам низкого уровня и не подходит для разработки большого программного обеспечения. Страуструп начал работать в Bell Labs над задачами теории очередей (в приложении к моделированию телефонных вызовов). Попытки применения существующих в то время языков моделирования оказались неэффективными. Вспоминая опыт своей диссертации, Страуструп решил дополнить язык C (преемник BCPL) возможностями, имеющимися в языке Симула. Язык C, будучи базовым языком системы UNIX, на которой работали компьютеры Bell, является быстрым, многофункциональным и переносимым. Страуструп добавил к нему возможность работы с классами и объектами. В результате, практические задачи моделирования оказались доступными для решения как с точки зрения времени разработки (благодаря использованию Симула-подобных классов) так и с точки зрения времени вычислений (благодаря быстродействию C). В начале в C были добавлены классы (с инкапсуляцией), производные классы, строгая проверка типов, inline-функции и аргументы по умолчанию.

Разрабатывая C с классами (позднее C++), Страуструп также написал программу cfront — транслятор, перерабатывающий исходный код C с классами в исходный код простого C. Новый язык, неожиданно для автора, приобрёл большую популярность среди коллег и вскоре Страуструп уже не мог лично поддерживать его, отвечая на тысячи вопросов.

В 1983 году произошло переименование языка из C с классами в C++. Кроме того, в него были добавлены новые возможности, такие как виртуальные функции, перегрузка функций и операторов, ссылки, константы, пользовательский контроль над управлением свободной памятью, улучшенная проверка типов и новый стиль комментариев (//). Его первый коммерческий выпуск состоялся в октябре 1985 года. В 1985 году вышло также первое издание «Языка программирования C++», обеспечивающее первое описание этого языка, что было чрезвычайно важно из-за отсутствия официального стандарта. В 1989 году состоялся выход C++ версии 2.0. Его новые возможности включали множественное наследование, абстрактные классы, статические функции-члены, функции-константы и защищённые члены.

В 1990 году вышло «Комментированное справочное руководство по C++», положенное впоследствии в основу стандарта. Последние обновления включали шаблоны, исключения, пространства имён, новые способы приведения типов и булевский тип.

Стандартная библиотека C++ также развивалась  вместе с ним. Первым добавлением  к стандартной библиотеке C++ стали  потоки ввода/вывода, обеспечивающие средства для замены традиционных функций C printf и scanf. Позднее самым значительным развитием стандартной библиотеки стало включение в неё Стандартной библиотеки шаблонов.

Никто не обладает правами на язык C++, он является свободным. Однако сам  документ стандарта языка (за исключением  черновиков) не доступен бесплатно.

1.1 Стандартизация языка

 

В 1998 году был опубликован стандарт языка ISO/IEC 14882:1998 (известный как C++98), разработанный комитетом по стандартизации C++ (ISO/IEC JTC1/SC22/WG21 working group).

В 2003 году был опубликован стандарт языка ISO/IEC 14882:2003, где были исправлены выявленные ошибки и недочёты предыдущей версии стандарта.

В 2005 году был выпущен отчёт «Library Technical Report 1» (кратко называемый TR1). Не являясь официально частью стандарта, отчёт описывает расширения стандартной библиотеки, которые, как ожидалось авторами, должны быть включены в следующую версию языка C++. Степень поддержки TR1 улучшается почти во всех поддерживаемых компиляторах языка C++.

С 2009 года велась работа по обновлению предыдущего стандарта, предварительной версией нового стандрата сперва был C++99, а спустя год C++0x, сегодня — C++11, куда были включены дополнения в ядро языка и расширение стандартной библиотеки, в том числе большую часть TR1.

1.2 История названия

 

Название C++ было придумано Риком Масситти (Rick Mascitti) и впервые было использовано в декабре 1983 года. Ранее, на этапе разработки, новый язык назывался «C с классами».

Имя языка, получившееся в итоге, происходит от оператора унарного постфиксного инкремента C ++ (увеличение значения переменной на единицу). Имя C+ не было использовано потому, что является синтаксической ошибкой в C и, кроме того, это имя было занято другим языком. Язык также не был назван D, поскольку «является расширением C и не пытается устранять проблемы путём удаления элементов C».

 

1.3 Достоинства

 

C++ — чрезвычайно мощный язык, содержащий средства создания эффективных программ практически любого назначения, от низкоуровневых утилит и драйверов до сложных программных комплексов самого различного назначения. В частности:

  • Поддерживаются различные стили и технологии программирования, включая традиционное директивное программирование, ООП, метапрограммирование.
  • Предсказуемое выполнение программ является важным достоинством для построения систем реального времени. Весь код, неявно генерируемый компилятором для реализации языковых возможностей (например, при преобразовании переменной к другому типу), определён в стандарте. Также строго определены места программы, в которых этот код выполняется. Это даёт возможность замерять или рассчитывать время реакции программы на внешнее событие.
  • Автоматический вызов деструкторов объектов при их уничтожении, причём в порядке, обратном вызову конструкторов. Это упрощает (достаточно объявить переменную) и делает более надёжным освобождение ресурсов (память, файлы, семафоры и т. п.), а также позволяет гарантированно выполнять переходы состояний программы, не обязательно связанные с освобождением ресурсов (например, запись в журнал).
  • Пользовательские функции-операторы позволяют кратко и ёмко записывать выражения над пользовательскими типами в естественной алгебраической форме.
  • Язык поддерживает понятия физической (const) и логической (mutable) константности. Это делает программу надёжнее, так как позволяет компилятору, например, диагностировать ошибочные попытки изменения значения переменной. Объявление константности даёт программисту, читающему текст программы дополнительное представление о правильном использовании классов и функций, а также может являться подсказкой для оптимизации. Перегрузка функций-членов по признаку константности позволяет определять изнутри объекта цели вызова метода (константный для чтения, неконстантный для изменения). Объявление mutable позволяет сохранять логическую константность при использовании кэшей и ленивых вычислений.
  • Используя шаблоны, возможно создавать обобщённые контейнеры и алгоритмы для разных типов данных, а также специализировать и вычислять на этапе компиляции.
  • Возможность имитации расширения языка для поддержки парадигм, которые не поддерживаются компиляторами напрямую. Например, библиотека Boost.Bind позволяет связывать аргументы функций.
  • Возможность создания встроенных предметно-ориентированных языков программирования. Такой подход использует, например библиотека Boost.Spirit, позволяющая задавать EBNF-грамматику парсеров прямо в коде C++.
  • Используя шаблоны и множественное наследование можно имитировать классы-примеси и комбинаторную параметризацию библиотек. Такой подход применён в библиотеке Loki, класс SmartPtr которой позволяет, управляя всего несколькими параметрами времени компиляции, сгенерировать около 300 видов «умных указателей» для управления ресурсами.
  • Кроссплатформенность: стандарт языка накладывает минимальные требования на ЭВМ для запуска скомпилированных программ. Для определения реальных свойств системы выполнения в стандартной библиотеке присутствуют соответствующие возможности (например,std::numeric_limits <T>). Доступны компиляторы для большого количества платформ, на языке C++ разрабатывают программы для самых различных платформ и систем.
  • Эффективность. Язык спроектирован так, чтобы дать программисту максимальный контроль над всеми аспектами структуры и порядка исполнения программы. Ни одна из языковых возможностей, приводящая к дополнительным накладным расходам, не является обязательной для использования — при необходимости язык позволяет обеспечить максимальную эффективность программы.
  • Имеется возможность работы на низком уровне с памятью, адресами.
  • Высокая совместимость с языком C, позволяющая использовать весь существующий C-код (код на C может быть с минимальными переделками скомпилирован компилятором C++; библиотеки, написанные на C, обычно могут быть вызваны из C++ непосредственно без каких-либо дополнительных затрат, в том числе и на уровне функций обратного вызова, позволяя библиотекам, написанным на C, вызывать код, написанный на С++).

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

2 C++ Builder

 

C++ Builder — мощная система визуального объектно-ориентированного проектирования, позволяющая решать множество задач, в частности:

• Создавать законченные приложения для Windows самой различной направленности, от чисто вычислительных и логических, до графических и мультимедиа.

• Быстро создавать (даже начинающим программистам) профессионально выглядящий оконный интерфейс для любых  приложений, написанных на любом языке; интерфейс удовлетворяет всем требованиям Windows и автоматически настраивается на ту систему, которая установлена на компьютере пользователя, поскольку использует многие функции, процедуры, библиотеки Windows.

• Создавать свои динамически присоединяемые библиотеки (DLL) компонентов, форм, функций, которые затем можно использовать из других языков программирования.

• Создавать мощные системы работы с локальными и удаленными базами данных любых типов; при этом имеются  средства автономной отладки приложений с последующим выходом в сеть.

• Формировать и печатать сложные  отчеты, включающие таблицы, графики  и т.п.

• Создавать справочные системы (файлы .hlp), как для своих приложений, так и для любых других, с которыми можно работать не только из приложений, но и просто через Windows.

• Создавать профессиональные программы  инсталляции для приложений Windows, учитывающие всю специфику и все требования Windows.

• И многое, многое другое.

2.1 Интегрированная Среда Разработки

Интегрированная Среда Разработки — это среда, в которой есть все необходимое для проектирования, запуска и тестирования приложений и где все нацелено на облегчение процесса создания программ. ИСР интегрирует в себе редактор кодов, отладчик, инструментальные панели, редактор изображений, инструментарий баз данных — все, с чем приходится работать. Эта интеграция предоставляет разработчику гармоничный набор инструментов, дополняющих друг друга. Результатом является быстрая и в значительной степени свободная от ошибок разработка сложных прикладных программ.

 

 

 

 

 

 

 

 

 

 

 

3 Системные диалоги

В приложениях часто приходится выполнять стандартные действия: открывать и сохранять файлы, задавать атрибуты шрифтов, выбирать цвета  палитры, производить контекстный  поиск и замену и т.п.

Разработчики C++Builder позаботились о том, чтобы включить в библиотеку простые для использования компоненты, реализующие соответствующие диалоговые окна. Они размещены на странице Dialogs (Риcунок 1 - Компоненты Dialog).

Рисунок 1 - Компоненты Dialog

 

3.1 Компоненты закладки Dialog

    

Компоненты закладки Dialog (Рис. 1) позволяют создавать диалоги с пользователем программы.

Диалоги придают программе гибкость и позволяют пользователю манипулировать объектами программы во время  ее работы. Закладка содержит десять компонентов  стандартных диалогов: 
   • OpenDialog (диалог открытия) позволяет создать в программе диалог открывания файлов. Данный диалог имеет возможность установки фильтров на имя и расширение открываемых файлов. 
   • SaveDialog (диалог сохранения) создает в программе диалог с возможностью выбора в программе имени файла для сохранения. Данный диалог обычно используется в связке с компонентом OpenDialog. 
   • OpenPictureDialog (диалог открытия рисунка) предназначен для создания диалогов открытия файлов с графическим изображением. Он отличается от компонента OpenDialog возможностью предварительного просмотра файла изображения непосредственно в окне диалога. 
   • SavePictureDialog (диалог сохранения рисунка) создает диалог сохранения файла с изображением. Так же, как и OpenPictureDialog, имеет возможностью предварительною просмотра файла изображения непосредственно в окне диалога. 
   • FontDialog (диалог выбора шрифта) предоставляет возможность создания диалога для выбора шрифта текста в программе. 
   • ColorDialog (диалог выбора цвета) предназначен для создания диалога для выбора цвета из палитры цветов Windows. Полученный числовой параметр цвета после этого можно передать любому компоненту, имеющему свойство Color. 
   • PrintDialog (диалог выбора принтера) позволяет организовать в программе диалог выбора печатающего устройства из числа установленных на компьютере. Кроме того, данный диалог позволит задать число копий, выбрать или задать диапазон печатаемых страниц и т. п. 
   • PrinterSetupDialog (диалог установки принтера) создает в программе диалог настройки параметров печатающего устройства, к числу которых относятся выбор типа бумаги и ее ориентация, параметры отображения графики. 
   • FindDialog (диалог поиска) открывает в программе диалог поиска текста с возможностью настройки параметров поиска. 
   • Replace Dialog (диалог замены) открывает в программе диалог поиска текста с возможностью замены найденного фрагмента на заданный пользователем. Обладает всеми возможностями компонента FindDialog.

Кроме рассмотренных выше закладок с компонентами на палитре присутствует множество других закладок (Samples, Office2k, Internet Express, BDE, ADO и т. п.) для более сложных компонентов, используемых профессиональными программистами.

         

3.2 Диалоги открытия и  сохранения файлов

   

Компоненты OpenDialog — диалог «Открыть файл» и SaveDialog — диалог «Сохранить файл как...», пожалуй, используются чаще всего, в большинстве приложений. Примеры открываемых ими аналоговых окон приведены на рис. 3.1 и 3.2.

           

Рисунок 2.1 - Диалог "Открыть файл"

Рисунок 3.2 – Диалог «Сохранить»

Все свойства этих компонентов одинаковы, только их смысл несколько различен для  открытия и закрытия файлов. Основное свойство, в котором возвращается в виде строки выбранный пользователем  файл, — FileName. Значение этого свойства можно задать и перед обращением к диалогу. Тогда оно появится в диалоге как значение по умолчанию в окне Имя файла (см. рис. 3.1 и 3.2).

Типы  искомых файлов, появляющиеся в диалоге  в выпадающем списке Тип файла (рис. 3.1 и 3.2), задаются свойством Filter. В процессе проектирования это свойство проще всего задать с помощью редактора фильтров, который вызывается нажатием кнопки с многоточием около имени этого свойства в Инспекторе Объектов. При этом открывается окно редактора, вид которого представлен на рис. 3.3. В его левой панели Filter Name вы записываете тот текст, который увидит пользователь в выпадающем списке Тип файла диалога. А в правой панели Filter записываются разделенные точками с запятой шаблоны фильтра. В примере рис. 3.3 задано два фильтра: текстовых файлов с расширениями .txt и .doc и любых файлов с шаблоном *.*.

                      

                   

Рисунок 3.3 -  Окно редактора  фильтров

                             

 

3.3 Диалог выбора шрифта — компонент  FontDialog

 

Компонент FontDialog вызывает диалоговое окно выбора атрибутов шрифта, представленное на рис. 3.4. В нем пользователь может выбрать имя шрифта, его стиль (начертание), размер и другие атрибуты. 

Рисунок 3.4 - Диалоговое окно выбора атрибутов шрифта

 

Основное  свойство компонента — Font типа TFont, в котором вы можете задать при желании начальные установки атрибутов шрифта и в котором вы можете прочесть значения атрибутов, выбранные пользователем в процессе диалога.

Свойства MaxFontSize и MinFontSize устанавливают ограничения на максимальный и минимальный размеры шрифта. Если значения этих свойств равны 0 (по умолчанию), то никакие ограничения на размер не накладываются. Если же значения свойств заданы (обычно это целесообразно делать исходя из размеров компонента приложения, для которого выбирается шрифт), то в списке Размер диалогового окна (см. рис. 8.8) появляются только размеры, укладывающиеся в заданный диапазон. При попытке пользователя задать недопустимый размер ему будет выдано предупреждение вида «Размер должен лежать в интервале ...» и выбор пользователя отменится. Свойства MaxFontSize и MinFontSize действуют только при включенной опции fdLimitSize (см. ниже).

Свойство Device определяет, из какого списка возможных шрифтов будет предложен выбор в диалоговом окне: fdScreen — из списка экрана (по умолчанию), fdPrinter — из списка принтера, fdBoth — из обоих.

Свойство Options содержит множество опций:

  • fdAnsiOnly - Отображать только множество шрифтов символов Windows, не отображать шрифтов со специальными символами.
  • fdApplyButton - Отображать в диалоге кнопку «Применить» независимо от того, предусмотрен ли обработчик события OnApply
  • fdEffects - Отображать в диалоге индикаторы специальных эффектов (подчеркивание и др.) и список «Цвет».
  • fdFixedPitchOnly - Отображать только шрифты с постоянной шириной символов.
  • fdForceFontExist - Позволять пользователю выбирать шрифты только из списка, запрещать ему вводить другие имена.
  • fdLimitSize - Разрешить использовать свойства MaxFontSize и MinFontSize, ограничивающие размеры шрифта.
  • fdNoFaceSel - Открывать диалоговое окно без предварительно установленного имени шрифта.
  • fdNoOEMFonts - Удалять из списка шрифтов шрифты OEM.
  • fdScalableOnly - Отображать только масштабируемые шрифты, удалять из списка не масштабируемые (шрифты bitmap).
  • fdNoSimulations - Отображать только шрифты и их начертания, напрямую поддерживаемые файлами, не отображая шрифты, в которых жирный стиль и курсив синтезируется.
  • fdNoSizeSel - Открывать диалоговое окно без предварительно установленного размера шрифта.
  • fdNoStyleSel - Открывать диалоговое окно без предварительно установленного начертания шрифта.
  • fdNoVectorFonts - Удалять из списка векторные шрифты (типа Roman или Script для Windows 1.0).
  • fdShowHelp - Отображать в диалоговом окне кнопку «Справка».
  • fdTrueTypeOnly - Предлагать в списке только шрифты TrueType.
  • fdWysiwyg - Предлагать в списке только шрифты, доступные и для экрана, и для принтера, удаляя из него аппаратно зависимые шрифты.

По умолчанию все эти опции, кроме fdEffects, отключены. Если установить опцию fdApplyButton, то при нажатии пользователем кнопки «Применить» возникает событие OnApply, в обработчике которого вы можете написать код, который применит выбранные пользователем атрибуты, не закрывая диалогового окна.

Приведем примеры применения компонента FontDialog. Пусть ваше приложение включает окно редактирования Memo1, шрифт в котором пользователь может выбирать командой меню Шрифт. Вы ввели в приложение компонент FontDialog, имя которого по умолчаниюFontDialog1. Тогда обработчик команды Шрифт может иметь вид:

if  (FontDialog1->Execute()) Memo1->Font=FontDialog1->Font;

 

3.4 Диалоги печати и установки принтера

 

Компонент PrintDialog вызывает диалоговое окно печати, представленное на рис. 3.5. В нем пользователь может выбрать принтер и установить его свойства, указать число копий и последовательность их печати, печатать в файл или непосредственно на принтер, выбрать печатаемые страницы или печатать только выделенный фрагмент.

     

Рисунок 3.5 - Диалоговое окно настройки печати

 

 

Компонент PrintDialog не осуществляет печать. Он только позволяет пользователю задать атрибуты печати. А сама печать должна осуществляться программно с помощью объекта Printer или иным путем. Рассмотренные ранее диалоговые компоненты возвращали одно свойство — имя файла, цвет, или один объект — Font, содержащий множество свойств. В отличие от них компонент PrintDialog возвращает ряд свойств, характеризующих выбранные пользователем установки. Это следующие свойства:

  • PrintRange - Показывает выбранную пользователем радиокнопку из группы «Печатать»: prAllPages — выбрана кнопка «Все страницы», prSelection — выбрана кнопка «Страницы с ... по ...», prPageNums — выбрана кнопка «Страницы».
  • FromPage - Показывает установленную пользователем начальную страницу в окне «Страницы с ... по ...».
  • ToPage - Показывает установленную пользователем конечную страницу в окне «Страницы с ... по ...».
  • PrintToFile - Показывает, выбран ли пользователем индикатор «Печать в файл».
  • Copies - Показывает установленное пользователем число копий.
  • Collate - Показывает, выбран ли пользователем индикатор «Разобрать».

Теперь  остановимся на компоненте PrinterSetupDialog, вызывающем диалоговое окно установки принтера, представленное на рис. 3.6. Это единственный диалоговый компонент, не имеющий никаких специфических свойств, которые надо было бы устанавливать или читать. Диалог выполняет операции по установке принтера, на котором будет производиться печать, и задании его свойств. Этот диалог не возвращает никаких параметров. 

             

Рисунок 3.6 - Диалоговое окно установки принтера

 

  

 

 

 

 

 

 

 

 

 

 

 

 

 

4  Реализация программы в среде «С++ Builder 6»

    

Запускаем Borland C++ Builder 6 и создаем новый проект. Поскольку текстовый редактор предназначен для работы с текстовыми строками, нам понадобится компонент Memo из вкладки Standard. Помещаем его в центре формы проекта. Теперь помещаем на форму компонент MainMenu из той же вкладки и добавляем кнопки «Сохранить», «вставить» и так далее. Они понадобятся для формирования в программе органов управления для открытия и сохранения файлов и для других функций. Поскольку редактор должен при открытии и сохранении файлов обращаться к дисковым накопителям, необходимо добавить на форму диалоги Open Dialog и Save Dialog из вкладки Dialogs. Кроме того, добавляем на форму диалог Font Dialog из этой же вкладки. Он облегчит нам задачу настройки шрифтов из программы. Эти компоненты являются невидимыми при работе программы, поэтому место их размещения на форме не имеет значения. Но все же лучше располагать такие компоненты без наложения, для того чтобы они не скрывали друг друга.

Теперь  приступим к изменению свойств  компонентов. Начнем с компонента Memo, выбрав его в инспекторе объектов. Вначале удалим надпись Memo1 с компонента, для того чтобы она не появлялась при запуске приложения. Для этого изменим свойство Lines, щелкнув по кнопке с тремя точками правее надписи Tstrings этого свойства. При этом откроется окно редактора строки String List Editor, в котором необходимо удалить строку Memo1 и нажать кнопку ОК. Далее растягиваем Memo1 на всю клиентскую область, для этого в свойстве Align выбираем AlClient.

Настройку главного меню произведем с помощью  дизайнера меню, вызываемого двойным  щелчком левой кнопки мыши по компоненту MainMenu. Ранее мы уже ввели один пункт меню под названием «Файл». Следующий по горизонтали пункт меню назовем «Правка». Теперь заполним пункты меню по вертикали. Щелкаем левой кнопкой мыши по пункту меню «Файл», а затем ниже него по пустому полю. Свойство Caption этого пункта меню изменяем на «Открыть» и нажимаем клавишу <Enter>. Следующий пункт называем «Сохранить». Аналогично расширяем по вертикали пункты меню «Правка», добавив пункты: «Копировать», «Вставить», «Вырезать», «Удалить». 
На этом этап создания главного меню программы редактора завершен. Все введенные пункты меню теперь будут присутствовать в приложении, но пока не будут выполняться, поскольку не созданы функции для выполнения соответствующих команд. Создаем их. Для этого воспользуемся компонентами диалогов, помещенных ранее на форму приложения. С помощью диалогов работы с файлами можно задать направленность приложения путем определения типов открываемых файлов. Это делается с помощью свойства Filter.

Выбираем в инспекторе объектов компонент OpenDialog1 и нажимаем кнопку с тремя точками правее свойства Filter. При этом появится диалоговое окно Filter Editor, в котором производится настройка типов файлов. Окно разбито на два поля. В левом поле Filter Name вводятся строки пояснения. В правом поле Filter — расширения файлов. Для указания нескольких типов файлов необходимо записать их через точку с запятой. Если задать несколько строк с пояснениями и типами файлов, то при работе приложения их можно будет выбирать с помощью выпадающего списка. Заполняем оба поля диалогового окна Filter Editor в соответсвии с рисунком 4 и нажимаем ОК. 

                     

Рисунок 4 -  Окно редактора фильтров

Аналогично выполняем настройку компонента SaveDialog1. Для корректности работы приложения оба эти диалога должны иметь одинаковую настройку свойства Filter. Чтобы облегчить эту работу и избежать ошибок, можно использовать два способа. Первый способ уже был показан ранее, когда несколько компонентов кнопок выделялось в группу и задавалось свойство одновременно для всех выделенных компонентов. Второй способ заключается в том, что, задав свойство для одного из компонентов, можно скопировать и вставить его для других компонентов с помощью комбинации клавиш <Ctrl>+<C> и <Ctrl>+<V> соответственно. Так, после задания свойства Filter компонента OpenDialog1 с помощью Filter Editor в поле этого свойства появится запись: Текстовые файлы |*.txt *.doc|, Все файлы |*.*|. Выделив эту строку с помощью клавиш <Ноmе> и <Shift>+<End>, скопируем ее с помощью клавиш <Ctrl>+<C>. Теперь можно вставить эту строку в свойство Filter для компонента SaveDialog1. Замечательно то, что работу этих компонентов можно проверить еще до выполнения программы. Дело в том, что после задания свойства Filter этих компонентов двойной щелчок по компонентам приводит к открытию диалога на основе заданных свойств. Например, после двойного щелчка по компоненту SaveDialog1 откроется окно, изображенное на рисунке 4.1.

Разработка текстового редактора в С++ Builder