Все лабы для ИУ-7 - решения и задания (СоздТекстового редактора)

Посмотреть архив целиком



6

Упр 2 Сем 2 Создание текстового редактора для работ с текстовыми файлами


Создание текстового редактора для работ с текстовыми файлами


  1. Создание макета формы.

Запустите Turbo Delphi, (или если Turbo Delphi уже запущена) введите команду File\New\VCL Forms ApplicationDelphi for Win32

Макет формы представляет образ формы в интегрированной среде разработки программы с размещенными на ней компонентами.

Компонентом называют размещаемый на макете формы имеющий образ объект, а также соответствующий значок в Палитре компонентов, предоставляющий определённые функциональные возможности для разрабатываемой программы. Предописанные компоненты Delphi представляют классы, имеющие такие же имена, но с префиксом T. Например, компонент Memo – многострочный текстовый редактор класса TMemo позволяет хранить строки текста, отображать их в своём окне, иметь полосы прокрутки, выделять фрагменты текста и работать в выделенными фрагментами и т.д..

    1. Разместите на форме компонент Memo1 – многострочный редактор текста: на панели инструментов Standard щелкните на значке TMemo, а затем щелчком на форме, буксировкой и перетаскиванием маркеров придайте ему такие размеры и положение, чтобы осталось сверху место для размещения других компонентов.

    2. Разместите на форме значок MainMenu1: на панели инструментов Standard щелкните на значке MainMenu, а затем на свободном месте на форме. Этот компонени будет использован для создания на форме строки меню с подменю.

    3. Аналогично, используя панель инструментов Dialogs, разместите на форме значки OpenDialog1 – окна диалога выбора открываемого файла, SaveDialog1 - окна диалога выбора файла для сохранения редактируемого текста.

В результате макет формы должен принять вид как на рис 1, но без строки меню.


    1. Выполните программу, убедитесь в том, что невизуальные компоненты – значки меню и диалогов не отображаются на форме, а в остальном вид формы полностью соотетствует её макету.

Резюме

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

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

  • Некоторые компоненты не отображаются на форме во время работы программы и их размещение на макете формы определяется лишь удобством разработки программы. В рассматриевом примере такими компонентами являются все, кроме Memo1.

  • Визуальными компонентами называют те, которые имеют окна, то есть могут быть видимыми при работе программы. Например, компоненты Memo, Label, Edit.

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

  1. Создание структуры меню.


    1. Двойным щелчком на значке MainMenu1 откройте Конструктор меню (см. рис. 2), дайте первому пункту строки меню название Файл, а первому пункту его подменю название Создать.

Справка. Чтобы добавить пункт меню/подменю, следует щелчком выделить свободную рамку в Конструкторе меню, набрать текст названия пункта меню в строке Caption окнаИнспектора объектов – Object Inspector на вкладке Properties (см. рис. 4) и нажать клавишу Enter. Если это название набрано русскими буквами, то именем пункта меню, используемым в программе, будет имя вида N<число>. Например, для первого пункта меню - N1, для второго - N2, и так далее.

    1. Аналогично создайте пункт меню Работа с двумя подпунктами с временными именами А и Б (в дальнейшем эти имена должны быть заменены на имена пунктов вашего варианта задания (см. ниж).

Форма и расположеные на ней компоненты образуют иерархическю структуру, отображаемую в окне Дерева объектов (окне Structure). Для выполняемого задания её вид представлен на рис. 3.

Резюме

  • При добавлении на форму компонентов и пунктов подменю происходит добавление в объявление типа формы TForm1 одноименных полей соответствующих типов. Полный их перечень, включая и имя формы, представлен в раскрывающемся списке Инспектора объектов (см. рис. 4 и рис. 5). Выбор в этом списке строчки приводит к отображению на вкладках Инспектора объектов сведений о значениях свойств соответствующего объекта (на вкладке Properties) и методов обработки связанных с этим объектом событий (на вкладке Events).

  • После размещения компонентов на форме буксировкой можно придать форме и компонентам необходимые положение и размеры, изменяя таким образом значения их свойств, которые будут сохранены и при старте программы, если не изменены программно. Значения свойств формы и компонентов на стадии проектирования прог раммы можно изменять и непосредственно на вкладке Properties окна Инспектора объектов.

  1. Создание заглушек обработчиков событий.

О

procedure TForm1.N2Click(Sender: TObject);

begin

//Обработчик щелчка на пункте меню ФАЙЛ.СОЗДАТЬ

end;

Рис. 6

бработчик события – это метод, автоматически вызываемый при наступлении события, связанного с формой или компонентом и имеющий в программе определенную функцию, то есть выполняющий определённую работу в соответствующей ситуации. Например, обработчик щелчка на пункта меню Файл/Открыть… должен, в частности, обеспечить диалог по выбору файла и загрузку его текста в поле многострочного редактора (TMemo).

Ш

type

TForm1 = class(TForm)

Memo1: TMemo;

MainMenu1: TMainMenu;

OpenDialog1: TOpenDialog;

SaveDialog1: TSaveDialog;

N1: TMenuItem;

N2: TMenuItem;

N3: TMenuItem;

N4: TMenuItem;

N5: TMenuItem;

N6: TMenuItem;

N7: TMenuItem;

N8: TMenuItem;

N9: TMenuItem;

N10: TMenuItem;

procedure N2Click(Sender: TObject);

procedure N3Click(Sender: TObject);

procedure N4Click(Sender: TObject);

procedure N5Click(Sender: TObject);

procedure N6Click(Sender: TObject);

procedure N7Click(Sender: TObject);

procedure N9Click(Sender: TObject);

procedure N10Click(Sender: TObject);

procedure FormCreate(Sender: TObject);

private

{ Private declarations }

public

{ Public declarations }

end;

Рис. 7. Объявление типа формы после добавленияуправляющих элементов и создания заглушек методов

аблоном обработчика события будем называть конструкцию, состоящую только из заголовка метода и операторных скобок. Шаблон создётся автоматически, например, при двойном щелчке в поле, соответствующем событию формы или компонента, на вкладке События Инспектора объектов. Одновременно в объявление класса TForm1 добавляется заголовок метода.

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

    1. Для пункта меню Создать двойным щелчком в строке OnClick на вкладке Events в окне Инспектора объектов (см. рис. 5) или двойным щелчком на строке Создать {N2} в дереве объектов создайте шаблон обработчика события – щелчка на пункте меню Создать во время исполнения программы, и превратите его в заглушку, добавив комментарий, как показано на рис. 6.

Справка. Если не добавить что-либо в шаблон обработчика события, то он и соответствующий заголовок метода в объявлении класса TForm1 будут удалены из текста программы при её подготовке к выполнению.

    1. Аналогично, снабдив соответствующими комментариями, создайте заглушки обработчиков событий – щелчков на всех пунктах подменю строки меню.

    2. Аналогично, снабдив соответствующим комментарием, создайте заглушку обработчика события – создания формы, шаблон которого можно получить так: щелкнуть на свободном месте макета формы и в Инсперторе объектов на вкладке Events сделать двойной щелчок в строке OnCreate.

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

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

  1. Добавление переменных, представляющих текущее состояние процесса обработки данных.

Справка. Эти переменные используются разными методами и их объявление можно дать либо внутри объявления класса, либо в разделе var в интерфейсной части, либо в разделе var в части реализации. Если в дальнейшем предполагается запретить доступ к этим переменным вне данного модуля (например, в наследниках класса, объявляемых в других модулях или в основной программе), то их следует объявить в части реализации или в разделе private класса. TForm1.

Справка. Чтобы не появлялось окно консоли введите команду Project/Options/Linker и сбросьте флажок Generate Console Application.

    1. Добавьте в раздел реализации объявление переменной S:string. Она должна представлять спецификацию файла, обрабатываемого в текущий момент. Её пустое значение будет обозначать, что текст из элемента Memo1 еще не сохранен в файле.

  1. Создание обработчиков событий.

    1. Добавьте в метод procedure TForm1.FormCreate(Sender: TObject) обработки события FormCreate операторы и комментарии, как на рис.8.

    2. Создайте обработчик procedure TForm1.N6Click(Sender: TObject) события щелчка на пункте меню Файл\Сохранить как…, для чего сделайте двойной щелчок на соответствующей строке дерева объектов и в появившейся заглушке добавьте операторы и комментарии, как на рис. 9.

Для проверки работы. Запустите программу, наберите в поле Memo1 строки Иванов…. 5 5 5 и Медоватов. 4 4 5 (фамилии дополнены точками до 10 символов) и сохраните этот текст в текущей папке в файле F1.txt. Затем откройте этот файл на новой вкладке с именем F1.txt окна редактора текстов Delphi следующим образом: введите команду Файл/Открыть…, в появившемся окне диалога Open выберите в раскрывающемся списке Тип файлов: строку Any file(*.*), в списке файлов выберите F1 и щелкните на кнопке Открыть. В дальнейшем, если будет выполняться сохранение в файле, в среде Delphi будет появляться сообщение, предлагающее обновить текст на вкладке F1.txt.

    1. Создайте самостоятельно обработчик procedure TForm1.N5Click(Sender: TObject) события щелчка на пункте меню Файл\Сохранить, имея в виду следующее: если текст ещё не сохранялся в файле, точнее, если S=’’, то следует вызвать N6Click(Self) - обработчик, созданный для пункта меню Файл.Сохранить как… в предыдущем пункте задания, иначе – просто выполнив оператор Memo1.Lines.SaveToFile(S) – сохранение всего редактируемого текста в файле со спецификацией, хранящейся в S.

    2. procedure TForm1.N3Click(Sender: TObject);

      begin

      //Обработчик щелчка на пункте меню ФАЙЛ.ОТКРЫТЬ...

      if Memo1.Modified then begin //если текст Memo1 был

      // изменён, то предложить диалог для выбора файла

      case MessageDlg('Текст был изменен. Сохранить данные'+

      ' в файле по выбору?', mtConfirmation,

      [mbYes, mbNo, mbCancel], 0) of

      6{idYes}: begin // сохранить текст в файле, выбрав его

      //в диалоге ФАЙЛ.СОХРАНИТЬ КАК...

      N6Click(Self);

      //перейти к диалогу ФАЙЛ.ОТКРЫТЬ

      end;

      {2}idCancel: exit;//выйти из диалога ФАЙЛ.ОТКРЫТЬ

      //в редактор без сохранения

      {7}idNo:;//не сохранять текст в файле и

      //перейти к диалогу ФАЙЛ. ОТКРЫТЬ

      end; //case

      end;//if Memo1.Modified

      //Открытие окна диалога ФАЙЛ.ОТКРЫТЬ для выбора папки

      //и файла, текст из которого следует

      //поместить в Memo1 - рабочую область редактора.

      if Form1.OpenDialog1.Execute then begin //если выбран файл

      S:=OpenDialog1.FileName;//то S присвоить спецификацию файла,

      Memo1.Lines.LoadFromFile(S);//загрузить текст из файла в Memo1

      Memo1.Modified:=false;//считать, что текст не модифицирован,

      //а в заголовок формы добавить спецификацию файла

      Form1.Caption:='Form1' + ' ' + S;

      end;//if Form1.OpenDialog1.Execute

      end;

      Рис. 10. Обработчик события открытия файла

      Создайте обработчик procedure TForm1.N3Click(Sender: TObject) события щелчка на пункте меню Файл\Открыть…, для чего сделайте двойной щелчок на соответствующей строке дерева объектов и в появившейся заглушке добавьте операторы и комментарии, имея в виду следующее.

      1. Если редактируемый текст не был изменён (Memo1. Modified ложно), то сразу перейти к диалогу открытия файла, иначе следует предложить пользователю разрабатываемой программы выбрать в диалоге (см. справку по функции MessageDlg) вариант продолжения работы с измененным текстом:

    • I) или сохранить его в файле по выбору, вызвав N6Click(Self) и затем открыть новый файл;

    • II) или не сохранять текст и открыть новый файл;

    • III) или отменить выполнение команды, выйдя из метода по exit и продолжить редактирование текста, как если бы команда открытия файла вообще не вводилась.

(см. текст обработчика рис. 10).

      1. Диалог для выбора открываемого файла запускается командой OpenDialog1.Execute (см справку по классу TOpenDialog). Если открываемый файл не был выбран (в окне диалога Открыть была нажата кнопка Отмена), то следует просто выйти из обработчика (вернуться к редактированию прежнего текста), иначе следует загрузить выбранный файл на редактирование, переменной S присвоить спецификацию этого файла и отобразить её в заголовке окна форма, а также свойству Memo1.Modified присвоить значение false – признак того, что загруженный на редактирование текст не изменён.

    1. Создайте самостоятельно обработчик procedure TForm1.N7Click(Sender: TObject) события щелчка на пункте меню Файл.Выход, для чего сделайте двойной щелчок на соответствующей строке дерева объектов и в появившейся заглушке добавьте операторы и комментарии, имея в виду следующее. Если редактируемый текст не был изменён (Memo1.Modified ложно), то сразу завершите работу программы оператором close, иначе следует предложить пользователю разрабатываемой программы выбрать в диалоге (см. справку по функции MessageDlg) вариант продолжения работы с измененным текстом:

    • I) или сохранить его в файле (пользователь нажал кнопку Yes) по выбору, вызвав N6Click(Self) и затем завершитm работу программы;

    • II) или не сохранять текст (пользователь нажал кнопку No) и завершить работу программы;

    • III) или отменить выполнение команды (пользователь нажал кнопку Cancel), выйдя из метода по exit и продолжить редактирование текста, как если бы команда завершить работу программы вообще не вводилась.

При выполнении этого пункта задания используя вкладки Index или Search справочной системы Turbo Delpi сначала следует найти справку по функции MessageDlg, затем – допустимые значения её параметров из числа стандартных. Например, вызов функции

MessageDLG('Сохранить файл?',mtInformation,[mbCancel,mbYes,mbNo],0)

обеспечит диалог вида


Справка по работе со справочной системой Turbo Delpi.

    • Запуск справочной системы командой Help/Borland Help.

    • Установка фильтра для отбора справок только по языку Delphi – выбором в раскрывающемся списке Filtered by: строки Language: Delphi.

    • Выбор справки по оглавлению справочной системы (по интересующей теме, подтеме и т.д) выполняют на вкладке Contents (если её нет, то введите команду Viev/Navigation/Contents…).

    • Выбор справки по ключевому слову (по стандартному имени типа, имени подпрограммы и т.п) выполняют на вкладке Index.

    • Выбор разделов справки по содержащемуся в них фразе, слову или части солва – из списка Search Result for…, формирующегося при вводе искомого текста в поле Look for: и нажатия кнопки Search.

    1. Создайте самостоятельно обработчик procedure TForm1.N2Click(Sender: TObject) события щелчка на пункте меню Файл.Создать, для чего сделайте двойной щелчок на соответствующей строке дерева объектов и в появившейся заглушке добавьте операторы и комментарии, имея в виду что: - окно Memo1 нужно очистить без всяких условий, - строка S должна стать пустой, то есть не должна представлять имя файла, - в заголовке формы оставить только её название, то есть Form1.

    2. Создайте самостоятельно обработчик procedure TForm1.N5Click(Sender: TObject) события щелчка на пункте меню Файл\Сохранить, для чего сделайте двойной щелчок на соответствующей строке дерева объектов и в появившейся заглушке добавьте операторы и комментарии, имея в виду следующее. Если строка S пустая, то есть не представляет имя файла, то следует передать управление обработчику команды Файл/Сохранить как…, выполнив оператор N6Click(Self), иначе – сохранить текст Memo1 в файле оператором Memo1.Lines.SaveToFile(S). Затем установить оператором Memo1.Modified:=false признак, что текст в Memo1 не модифицирован.

    3. Создайте самостоятельно обработчик procedure TForm1.N4Click(Sender: TObject) события щелчка на пункте меню Файл.Закрыть, для чего сделайте двойной щелчок на соответствующей строке дерева объектов и в появившейся заглушке добавьте операторы и комментарии, имея в виду, что если текст был изменен, то нужно в диалоге (см. справку по функции MessageDlg) выяснить, что желает пользователь. Если он нажмёт кнопук Cancel, то есть хочет вернуться к редактированию текста, то следует просо выйти из обработчика. Если он нажмёт кнопку No, то нужно удалить текст, вывести в заголовок окна название формы ‘Form1’ и присвоить S пустое значение. Если пользователь нажмёт кнопку Yes, то нужно выполнить те же действия, что и при нажатии кноки No, но предварительно сохранить текст оператором Memo1.Lines.SaveToFile(S), если S≠’’, или сохранить текст в файле по выбору, вызвав N6Click(Self), если S=’’.


  1. .Задания для самостоятельного выполнения

    1. На Упр 1 рассмотреть среду Delphi и разобрать выполнение работ по пунктам 1..5 этого текста, а на Лр 1 создать текстовый редактор по этим пунктам, самостоятельно разработав недостающие части программы.

    2. На Упр 2 рассмотреть типовые задачи по текстовым файлам, а на Лр 2 - добавить в меню пункт Работа и его подпункты в соответствии со своим вариантом задания и создать соответствующие им обработчики.


Случайные файлы

Файл
42984.rtf
168589.rtf
18941.rtf
38564.rtf
11648.rtf