6.2. Создание программы «Редактор текста» Задача. Написать программу, считывающую посимвольно информацию из текстового файла, позволяющую отредактировать считанный текст и сохранить файл на диске.
Окно программы представлено на рис. 6.1.
Процесс создания программы происходит по следующему алгоритму:
Запустить Delphi.
Сохранить проект («work6.dpr», «main.pas»).
Настроить вид экрана:
для отображения быстрой справки – подсказки видимых элементов окна –необходимо установить свойство формы ShowHint (показывать подсказку) в значение true. Все элементы, размещенные в окне, автоматически будут иметь свойство ShowHint в значении true;
в качестве дизайна окна использовать «главное меню» и панель «горячих клавиш». Поместить панель на форму и настроить ее свойства:
поместить панель (элемент Panel, вкладка Standard, значок );
изменить заголовок на ‘’ Caption;
изменить высоту панели так, чтобы она была чуть больше кнопок, которые будут в неё вставлены (Height = 40);
настроить панель, чтобы она всегда находилась вверху окна, независимо от его размера Align установить в значение alTop – вверху;
поместить на экран «горячие кнопки» (SpeedButton, Additional,). Такие кнопки обычно не имеют заголовка, а несут функциональную информацию по картинке и контекстной справке. Поместить 3 такие кнопки: «Выход», «Открыть файл», «Сохранить файл»:
назвать кнопки (Name) соответственно SBQuit, SBOpen и SBSave;
выбрать картинки для кнопок в соответствии с назначением кнопок (картинки можно взять из папки кнопок в папке общих программ Borland или в папке Delphi (папка «Images\Buttons»))Glyph; можно выбрать следующие картинки: FileOpen для открытия файла, FileSave для закрытия файла, DoorShot для выхода из программы;
назначить подсказки для кнопок: для кнопки SBQuit – «Выход из программы»; для SBOpen – «Открыть файл»; для SBSave – «Сохранить файл» Hint;
создать главное меню:
поместить главное меню на форму (MainMenu, Standard,);
этот значок запускает программу-мастера построения меню – щелкнуть на значке для запуска мастера;
построить иерархическое меню. Для этого в поле ввода набрать название пункта меню («Файл») (Caption), затем сместиться в подменю и ввести названия «Открыть» и «Сохранить», затем поставить разделитель пунктов – при вводе названия поставить «-» (минус);
для каждого пункта меню назначить «горячую клавишу», т. е. ту комбинацию клавиш, при нажатии на которую этот пункт меню будет активизироваться (свойство ShortCut). Назначить такие комбинации (выбрать из списка): для пункта «Открыть» – <Ctrl><O>; «Сохранить» – <Ctrl><S>; «Выход» – <Ctrl><Q>;
для открытия файла поместить стандартный диалог открытия файлов:
поместить объект открыть файл (Dialogs, OpenDialogs,);
дать ему имя ODText (Name);
настроить заголовок окна на «Открытие текстового файла» (Title);
назначить имя папки, из которой будут открываться файлы по умолчанию, дав ему имя «.» - текущая папка (папка программы) (InitialDir);
настроить фильтр файлов, которые будут открываться (Filter). Это свойство запустит мастера – слева в окне описание групп файлов (Filter Name), справа – шаблон группы (Filter). Изменить описание на «Текстовые файлы», а шаблон на «*.txt»;
для сохранения файлов необходимо:
поместить на форму элемент диалог сохранения (SaveDialog, Dialogs,);
настроить имя на SDText (Name);
остальные свойства настроить как и у объекта OpenDialog;
для переключения между режимами чтения файла (посимвольное чтение или чтение сразу всего файла) необходимо:
поместить на панель объект независимая метка (CheckBox, Standard,);
настроить имя на CBChar ( Name);
заголовок изменить на «Посимвольно» ( Caption);
кнопка активна (выполняется чтение посимвольно) ( Checked установить в true);
для вывода текста необходимо:
на форму поместить элемент примечаний (Memo, Standard,);
настроить имя на MText ( Name);
изменить свойство ScrollBars на ssBoth для добавления в поле вывода текста скроллеров – обеспечение перемещения по тексту, если текст окажется больше окна вывода;
очистить окно текста. Выбрать свойство Lines и удалить строку MText;
расположить поле вывода текста на всё доступное пространство формы. Для этого изменить свойство Align на alClient;
Приступить к программированию событий:
запрограммировать выход из программы на кнопку SBQuit (Событие onClick, команда – Close);
запрограммировать открытие файла на кнопку SBOpen (Событие onClick), добавив следующий текст:
добавить в разделе переменных процедуры следующие переменные: F – переменная типа текстовый файл для связки с файлом на диске; C – считываемый символ – переменная типа символ и W – переменная типа целое число для записи текста в поле MText, так как этот объект не позволяет добавлять строку посимвольно:
var
F : TextFile;
C : Char;
W : Word;
технология считывания следующая:
открыть диалог открытия файлов;
получить имя открываемого файла из этого диалога;
открыть файл;
проверить результат открытия файла, в случае ошибки выдать сообщение, иначе приступить к считыванию информации;
при чтении сразу всего файла считать текст,
иначе: пока не конец файла добавить в поле вывода текста пустую строку; пока не конец строки считать символ и добавить его к пустой строке;
текст, реализующий этот алгоритм:
If ODText.Execute then //Если в диалоге выбран файл
begin
MText.Clear; //Очистить поле вывода
AssignFile(F,ODText.FileName); //Связатьфайлс F
{$I-} //Отключить проверку
reset(F); //Открыть файл
{$I+} //Включить проверку
If IOResult = 0 then //Файл открыт удачно
begin
Form1.Caption := ODText.FileName;
{В заголовке окна отобразить имя открытого файла}
W := 0; //Счетчик строк
If CBChar.Checked then //Если посимвольный ввод
begin
while Not EOF(F) do //Поканеконецфайла
begin
MText.Lines.Add(''); //Добавить пустую строку
While Not EOLn(F) do //Пока не конец строки
begin
read(F,C); //Считать очередной символ
MText.Lines[W]:=MText.Lines[W]+C;
{Добавить к пустой строке считанный символ}
end;
Inc(W); //Увеличить счетчик строк
readln(F);
{Перейти к считыванию новой строки}
end;
end
else //Файл считывается сразу
begin
MText.Lines.LoadFromFile(ODText.FileName);
{Считать файл}
end;
CloseFile(F); //Закрытьфайл
end
else //Файлнеоткрыть
ShowMessage('Ошибка открытия файла '+ODText.FileName);
{Выдать сообщение об ошибке}
end; //Конец работы с файлом
В программе виден способ заполнения элемента MText текстом: текст представляет собой массив строк (свойство Lines) и либо загружается сразу из указанного файла (строка MText.Lines.LoadFromFile(ODText.FileName);), либо происходит обращение по индексу к нужной строке и заполнение её (строка MText.Lines[W]:=MText.Lines[W]+C; – к строке с индексом W добавить считанный символ C, учитывая, что нумерация строк начинается с 0);
запрограммировать сохранение введенного или отредактированного файла на диске кнопкой SBSave (Событие onClick):
If SDText.Execute then
{Если выбрано сохранение файла}
begin
Mtext.Lines.SaveToFile(SDText.FileName); //Сохранить файл
Form1.Caption := SDText.FileName;
{Изменить заголовок окна на имя сохранённого файла}
end;
Для улучшения программы можно выполнить следующее:
ввести индикатор изменения текста в поле ввода – как только текст изменен, отобразить индикатор изменения;
при сохранении файла проверять, нет ли уже файла с таким именем и выдавать запрос на перезапись.
Например, п 5а можно выполнить так:
на форму (на панель) добавить элемент метка (Label, Standard,). Изменить его свойства:
имя изменить на LModify (Name);
заголовок – на «Текст изменён» (Caption);
видимость (если текст не изменён, то и индикатор изменения не показывать) установить в значение false (Visible);
запрограммировать событие onKeyPress элемента MText, выполняемое при нажатие клавиш, и ввести текст:
LModify.Visible := true;
при сохранении текста (событие onClick кнопки SBSave) после строки «{изменить заголовок окна на имя сохранённого файла}» добавить строку изменения состояния индикатора:
LModify.Visible := false;
При желании п. 5б запрограммировать самостоятельно. (Рекомендация. Попытаться открыть файл с введенным именем и если это удаётся (файл существует!), то требуется вывести запрос на перезапись).
Программа готова – запуск <F9>.
Индивидуальное задание Модифицировать созданную программу для выполнения операции с текстом в зависимости от номера варианта:
В считанном тексте подсчитать количество гласных символов.
В считанном тексте подсчитать количество согласных символов.
Заменить все гласные буквы в тексте на порядковые номера – «а»-1, «е»-2 и т. д.
Добавить после каждого слова текста запятую.
Подсчитать количество слов в тексте.
Найти слово с максимальным соотношением согласные/гласные.
Найти в тексте самое длинное слово.
Подсчитать все знаки препинания в тексте.
Найти в тексте самое длинное предложение.
Выводить каждую строчку в обратном порядке.
Выводить только нечетные слова текста.
Выводить только четные слова текста.
Подсчитать количество предложений в тексте.
Выводить только те слова, длина которых больше введенного числа.
Выводить только те строки, которые содержат введенную подстроку.
Каждый символ, считываемый из файла, закодировать его кодом, после кода ставить знак «;».
Выводить каждое считанное предложение с новой строки.
Найти предложение с максимальным количеством слов.
Удалить из текста введенный фрагмент строки.
Заменить в тексте один введенный фрагмент на другой введенный фрагмент.
Итоги В шестой теме были изучены: функции для работы со строками; функции для работы с текстовыми файлами; стандартные диалоговые окна.
При построении демонстрационной программы получены навыки использования новых компонентов: панели; кнопки быстрого доступа – «горячие кнопки»; главного меню окна; диалоговых окон – открытие файла и сохранение файла; элемента независимого выбора.
|