Внастоящее время в компьютерном мире существует множество языков программирования

Вид материалаДокументы

Содержание


6.2. Создание программы «редактор текста»
Name) соответственно SBQuit, SBOpen
F – переменная типа текстовый файл для связки с файлом на диске; C
If ODText.Execute then
If CBChar.Checked then
Подобный материал:
1   ...   8   9   10   11   12   13   14   15   16

6.2. Создание программы «редактор текста»


Задача: Написать программу, считывающую посимвольно информацию из текстового файла, позволяющую отредактировать считанный текст и сохранить файл на диске.

Окно программы представлено на рис.6.1.

Процесс создания программы происходит по следующему алгоритму:
  1. Запустить Delphi;
  2. Сохранить проект («work6.dpr», «main.pas»);
  3. Настроить вид экрана:
  • Для отображения быстрой справки – подсказки для видимых элементов окна необходимо установить свойство формы 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). Назначить такие комбинации (выбрать из списка) – для пункта «Открыть» – ; «Сохранить» – ; «Выход» – ;
  • Для открытия файла поместить стандартный диалог открытия файлов:
  • Поместить объект открыть файл (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;
  • Форма настроена!
  1. Приступить к программированию событий:
  • Запрограммировать выход из программы на кнопку 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;
  1. Для улучшения программы можно выполнить следующее:
  1. Ввести индикатор изменения текста в поле ввода – как только текст изменен отобразить индикатор изменения;
  2. При осуществлении сохранения файла проверять нет ли уже файла с таким именем и выдавать запрос на перезапись;
  1. Например, пункт 5.1. можно выполнить так:
    • На форму (на панель) добавить элемент метка (Label, Standard,). Изменить его свойства:
    • Имя изменить на LModify (Name);
    • Заголовок на «Текст изменён» (Caption);
    • Видимость (если текст не изменён, то и индикатор изменения не показывать) установить видимость в значение False (Visible);
    • Запрограммировать событие элемента MText нажатие клавиши onKeyPress и ввести текст:
    • LModify.Visible := true;
    • При сохранении текста (событие onClick кнопки SBSave) после строки «{изменить заголовок окна на имя сохранённого файла}» добавить строку изменения состояния индикатора:
    • LModify.Visible := false;
  1. При желании пункт 5.2. запрограммировать самостоятельно (рекомендация: попытаться открыть файл с введенным именем и если файл открывается (файл существует!), то требуется вывести запрос на перезапись);
  2. Программа готова – запуск <F9>