Разработка программы, динамически подсвечивающей ключевые слова из загружаемого пользователем словаря

Курсовой проект - Компьютеры, программирование

Другие курсовые по предмету Компьютеры, программирование

и будет как раз последней строкой в тексте. Но тут-то и кроется настоящая ошибка. Попав в эту ветвь if (т.е. после else) процедура Insert запрашивает длину строки с помощью сообщения EM_LINELENGTH и опять получает ошибочное значение. Обстоятельства нарастают как снежный ком, неотвратимо. Теперь неверная длина строки используется для определения номера последнего символа в тексте. А ведь длина настоящей последней строки возможно нулевая и это значит, что мы уже имеем номер последнего символа в тексте после предыдущего сообщения EM_LINEINDEX. После добавления к нему чужой длины, мы получаем номер символа заведомо выходящий за пределы текста. Из-за этого и произойдет вызов исключительной ситуации, но позже. Посылка сообщения EM_EXSETSEL с параметрами, выходящими за границы текста, проходит без катастрофических последствий, значение игнорируется, а курсор перемещается в конец текста. Сообщением EM_REPLACESEL добавляемая строка вставляется в конец текста. И вот, наконец, срабатывает цепь ошибок.

После вставки курсор перемещается за вставленную строку, т.е. в конец текста. Новое положение курсора не соответствует предыдущему плюс длина вставленной строки ровно на длину чужой строки, и это становится причиной вызова исключения.

Драма с грубыми ошибками и их игнорированием получает трагическое завершение из-за пустяка.

Избежать этой неприятной ситуации можно, если переопределить GetCount, Insert и Delete в классе TRichEditStrings, или исправить эти функции в исходных текстах, или написать свои.

Массив данных Array предоставляет возможность использования одно- и многомерных массивов (индексируемых последовательностей) данных.

Статические массивы задаются с фиксированным, неизменным размером. Они могут быть одно- и многомерными - последние являются массивами массивов (массивов и т.д.).

Длина и размерность такого многомерного массива всегда задается наивысшим, крайним левым массивом - родительским массивом.

Длина каждой размерности определяется двумя способами, которые могут легко сочетаться в многомерном массиве:

Индексный тип

Здесь индекс - целый тип, обычно Byte или Word. Диапазон значений этого типа задает диапазон значений размерности. Например, тип Byte имеет диапазон значений от 0 до 255.

Порядковое..Порядковое

В качестве альтернативы диапазон значений каждой размерности может быть задан явно порядковыми значениями, такими как 22..44.

Динамические массивы не имеют заранее выделенного участка памяти. При их определении создается только указатель. Для таких массивов должна быть задана их длина перед началом их использования.

Например, SetLength(dynArray, 5) задает одномерный массив dynArray длиной 5 элементов. Это действие выделяет память под массив. Все динамические массивы начинаются с индекса 0; каждый подмассив многомерных динамически массивов может иметь разный размер - он, конечно, является отдельным массивом.

После одной такой операции SetLength на элементы установленного массива можно ссылаться, даже если остальные массивы не определены.

И статические, и динамические массивы могут быть переданы подпрограммам как параметры. Если определение параметра-массива не имеет диапазона значений (т.е. это динамический массив), то вы должны, как это ни парадоксально, передать статический массив как параметр. Delphi передает длину как скрытый параметр в подпрограмму.

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

Для того, чтобы предать динамический массив по ссылке, массив и определение подпрограммы с параметром-массивом должны быть заданы через определение типа массива.

Описание используемых процедур и функций

 

Процедура btnOpenClick используется для отображения диалога открытия текстового файла.

Процедура btnSaveClick используется для отображения диалога сохранения текстового файла.

Процедура btnExitClick используется для закрытия программы без сохранения изменений.

Процедура FormCreate содержит в себе настройки для диалоговых окон открытия и сохранения файла.

Процедура btnAddDictonaryClick используется для отображения диалога открытия файла словаря. Кроме этого, в данной процедуре происходит чтение файла словаря и последующая обработка данных.

Процедура RichEdit1Change служит для мгновенной обработки введенных в поле RichEdit1 символов.

 

Описание структуры приложения и интерфейса пользователя

 

Форма Form1. Приложение является проектом, созданным на Delphi, имеет простой и понятный интерфейс, удобный как для опытного, так и для рядового пользователя:

 

 

Используются стандартные компоненты, такие, как RichEdit, OpenDialog, MainMenu, SaveDialog и StatusBar.

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

 

 

Для открытия текстового файла, следует выбрать подменю Открыть файл из раздела меню Файл. Для открытия текстового файла с расширением, отличным от *.txt, следует выбрать Все файлы в диалоговом окне открытия файла:

 

 

Программа может работать и как обычный текстовый редактор:

 

 

Для того чтобы включить выделение ключевых слов, достаточно открыть подменю Подключить словарь из меню Настройки и выбрать файл словаря, сохраненный в специальном расширении:

 

Ключевые с?/p>