logo search
Методичка лаб по ООП с ИИТ

Лабораторная работа 4. Создание простого текстового редактора.

Текстовый редактор – это приложение, которое применяет каждый пользователь персонального компьютера. Знакомство с текстовыми редакторами начинается с простейшего текстового редактора, например Блокнот. Среда программирования Delphi позволяет создать простейший текстовый редактор достаточно быстро.

Задание 1.

1. Поместите компонент Bevel (на странице Additional) на новую форму и присвойте его свойству Align значение alTop.

2. На компонент Bevel поместите четыре кнопки. Озаглавьте их &0реn..., &Save, Save &As... и E&xit.

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

3. Поместите на форму компонент Memo и установите следующим обра­зом его свойства:

Свойство Значение

Align alClient

ScrollBars ssBoth

Lines (пусто)

4. Измените заголовок формы на My Editor. Затем поместите на форму компонент OpenDialog и присвойте его свойствам следующие значения:

Свойство Значение

Default Ext ТХТ

Options.ofHideReadOnly True

Options.ofFileMustExist True

Options.ofNoReadOnlyReturn True

Title Open Text File

5. Для того чтобы открыть окно Filter Editor (Редактор фильтра), дважды щелкните на свойстве Filter.

6. Заполните две первые строки в колонке Filter Name (Имя фильтра) на­званиями фильтров Text files и All files, а в колонке Filter (Фильтр) вве­дите соответствующие фильтры: *.ТХТ и *.*.

7. Поместите на форму компонент SaveDialog и установите для его свойств такие значения:

Свойство Значение

Default Ext ТХТ

Options.ofHideReadOnly True

Options.ofOverwritePrompt True

Options.ofNoReadOnlyReturn True

Title Save Text File

8. Введите тот же набор фильтров, что и для диалога открытия файла.

9. Создайте обработчик события OnClick для кнопки Exit, содержащий одну команду Close;

10. Для обработчика события OnClick кнопки Open используйте следую­щие строки:

WITH OpenDialog1 DO

IF Execute THEN

BEGIN

Memo1.Lines.LoadFromFile(Filename);

HistoryList.Add(Filename);

Caption:='My Editor-'+

ExtractFilename(Filename);

SaveDialog1.Filename:=Filename;

Filename:='';

End;

11. Дважды щелкните на кнопке Save и введите следующую строку в каче­стве ее обработчика события OnClick: .

Memo1.Lines.SaveToFile( SaveDialog1.Filename);

12. Наконец, для кнопки Save As укажите следующее:

WITH SaveDialog1 DO

IF Execute THEN

BEGIN

Memo1.Lines.SaveToFile(Filename);

Caption:='My Editor - ' +

ExtractFilename(Filename);

End;

Мы создали простой текстовый редактор. Он по­зволяет загружать, редактировать и сохранять небольшие и средние файлы. Воз­можности этого редактора приблизительно такие же, как и у приложения Notepad (Блокнот) Windows. Можно вырезать, копировать и вставлять текст, используя стандартные комбинации клавиш Windows. Имя каждого открытого файла добав­ляется в список диалога открытия файла на случай, если вам потребуется открыть его снова. Этот проект нам еще понадобится, поэтому сохраним его. Назовем мо­дуль MYEDITU.PAS, а главный проект — MYEDIT.PRJ.

Задание 2.

Добавим в приложение диалог выбора шрифта.

1.Загрузите опять проект MyEdit и поместите на форму компонент FontDialog. Переместите кнопку Exit вправо и вставьте кнопку с заголовком &Font между кнопками Save As и Exit. В обработчик события OnClick новой кнопки поместите следующий код:

WITH FontDialog1 DO

IF Execute THEN

BEGIN

Memo1.Font:= Font;

Следующую строку поместите в обработчик события OnApply компонента FontDialog:

Memo1.Font:= FontDialog1. Font;

2. Запустите программу и загрузите файл. С помощью кнопки Font выберите ка­кой-нибудь шрифт. Используя все возможности, создайте самый необычный вари­ант. Содержимое файла будет отображаться выбранным вами шрифтом с примене­нием указанного размера, стиля и цвета. Опять откройте диалог выбора шрифта и переместите его так, чтобы он не закрывал самого окна редактора. Внесите не­сколько изменений в окне диалога и щелкните на кнопке Apply (Применить). Из­менения станут действительными немедленно, а диалог Font (Шрифт) не закроет­ся. Это упрощает испытание различных возможностей. Обратите внимание, что в этом примере программы, после того как была использована кнопка Apply (При­менить), вы никак не сможете отменить внесенные изменения. С другой стороны, это не такая уж и большая беда — если не устраивает только что выбранный шрифт, можно вернуть шрифт, использовавшийся раньше.

3. Сохраните обновленный проект MyEdit, обладающий теперь возможностью из­менять шрифты.

Компонент Memo не обладает способно­стью отображать больше одного шрифта сразу. Для этого существуют другие компоненты.

Задание 3.

Добавим в свою программу диалог выбора цвета.

1. Поместите на новую форму диалог выбора цвета (компонент ColorDialog) и присвойте его свойству Color значение clWhite.

2. Установите свойство Ctl3D формы в False, а в качестве константы цве­та также выберите clWhite.

3. Поместите на форму новую кнопку, назовите её Color.

В обработчик события OnClick формы поместите следующие строки:

IF ColorDialog1.Execute THEN

Form1.Color := ColorDialog1.Color;

4. Запустите программу.

Задание 4.

Добавим в приложение диалог выбора принтера.

1. Загрузите опять проект MyEdit и поместите на него диалог настройки принтера компонент PrinterSetupDialog). Компонент Bevel расположите таким образом, чтобы осталось место для второго ряда кнопок, где разместите две новые кнопки, озаглавленные &Print... и P&rint Setup.... Создайте обработчик события OnClick кнопки Print Setup с единственной строкой кода:

PrinterSetupDialog1.Execute;

2.Запустите программу и щелкните на кнопке Print Setup (кнопка Print пока еще делать ничего не может). Появится диалог.

Задание 5.

Диалог Print Setup (Настройка принтера) используется для выбора и конфигурации принтера. Когда дело дойдет до печати, в действие вступит диалог Print (Печать).

1. В проект MyEdit добавьте компонент PrintDialog, оставив все его свойства со значениями, установленными по умолчанию. Дважды щелкните на кнопке Print, и замените пару begin—end следующим кодом:

VAR

POutput: TextFile;

N : LongInt;

BEGIN

IF PrintDialog1.Execute THEN

BEGIN

AssingPrn (POutput);

Rewrite (POutput);

Printer.Canvas.Font: = Memo1.Font;

FOR N: = 0 to Memo1.Lines.Count – 1 DO

Writeln(POutput, Memo1.Lines [N]);

CloseFile (POutput);

END;

END;

2. Перейдите в верхнюю часть модуля и добавьте Printers в оператор uses. (Найди­те строку в начале файла, начинающуюся со слова uses. После этого слова добавьте имя модуля и запятую.) Выберите на форме компонент FontDialog и присвойте его свойству Device значение fdBoth, чтобы ограничить выбор шрифтами, которые го­дятся и для экрана, и для принтера.

Мы только что добавили в ваш редактор возможность печати. Этот редактор не позволяет печатать несколько копий или направлять их в подбор, но вы сможете распечатать содержимое редактора любым шрифтом. А с помощью диалога Print Setup (Выбор принтера) вы сможете выбрать принтер, ориентацию бумаги и пара­метры конфигурации, соответствующие вашему принтеру.

Задание 6.

Добавим диалог поиска и замены текста.

1. Загрузите проект MyEdit и установите свойство HideSelection компонента Memo в False. На форме разместите компоненты FindDialog и ReplaceDialog и выберите их оба. Дважды щелкните на свойстве Options и установите frHideMatchCase, frHideWholeWord и frHideUpDown в True. Добавьте во второй ряд кнопки с заголовками Fi&nd... и &Replace... Для события OnClick кнопки Find используйте следующую строку:

FindDialogl.Execute;

а для кнопки Replace следующую строку:

ReplaceDialogl.Execute;

2. Выберите компонент FindDialog, перейдите на страницу Events и дважды щелк­ните на событии OnFind. Вставленную Delphi пару begin—end замените следую­щим блоком кода:

VAR

Buff, P, FT: Pchar;

BuffLen : Word;

begin

WITH Sender AS TFindDialog DO

BEGIN

GetMem (FT, Length (FindText) + 1);

StrPCopy (FT, FindText);

BuffLen := Memo1.GetTextLen + 1;

GetMem (Buff, BuffLen);

Memo1.GetTextBuf (Buff, BuffLen);

P:=Buff+Memo1.SelStart+Memo1.SelLength;

P:=StrPos(p,FT) ;

IF P = NIL THEN MessageBeep (0)

ELSE

BEGIN

Memo1.SelStart:=P-Buff;

Memo1.SelLength:=Length (FindText);

END;

FreeMem(FT,Length(FindText)+1);

FreeMem (Buff, BuffLen);

END;

end;

3.Когда закончите, щелкните на компоненте ReplaceDialog, перейдите на страницу Events в окне Object Inspector и щелкните на кнопке раскрытия списка обработчика события OnFind. Из появившегося списка выберите только что созданный обработчик события для FindDialog. Теперь создайте обработчик события OnReplace со следующими строками:

WITH Sender AS TReplaceDialog DO

WHILE True DO

BEGIN

IF Memo1.SelText <> FindText THEN

FindDialog1Find(Sender);

IF Memo1.SelLength = 0 THEN Break;

Memo1.SelText:=ReplaceText;

IF NOT (frReplaceAll IN Options) THEN Break;

END;

4. Сохраните программу, запустите ее и загрузите текстовый файл. Замените в нем все точки на восклицательные знаки и сохраните его.

Задание 7.

Создайте форму для открытия графических файлов.