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

advertisement
Упр 2 Сем 2 Создание текстового редактора для работ с текстовыми файлами
1
Создание текстового редактора для работ с текстовыми файлами
1.
Создание макета формы.
Запустите Turbo Delphi, (или если Turbo Delphi уже запущена) введите команду File\New\VCL Forms Application – Delphi for Win32
Макет формы представляет образ формы в интегрированной среде разработки программы с размещенными на ней компонентами.
Компонентом называют размещаемый на макете формы имеющий образ объект, а также соответствующий значок в Палитре компонентов, предоставляющий определённые функциональные возможности для разрабатываемой программы. Предописанные компоненты Delphi представляют классы, имеющие такие же имена, но с префиксом T. Например, компонент Memo – многострочный текстовый редактор класса TMemo позволяет хранить строки текста, отображать их в своём окне, иметь полосы прокрутки, выделять фрагменты текста и работать в выделенными фрагментами и т.д..
1.1. Разместите на форме компонент Memo1 – многострочный редактор текста: на панели инструментов Standard щелкните на значке TMemo, а затем щелчком на форме, буксировкой и перетаскиванием маркеров придайте ему такие размеры и положение, чтобы осталось сверху место для размещения других компонентов.
1.2. Разместите на форме значок MainMenu1: на панели инструментов Standard щелкните на значке
MainMenu, а затем на свободном месте на форме. Этот компонени будет использован для создания
на форме строки меню с подменю.
1.3. Аналогично, используя панель инструментов DiOpenDialog1 SaveDialog1
MainMenu1
alogs, разместите на форме значки OpenDialog1 –
окна диалога выбора открываемого файла,
SaveDialog1 - окна диалога выбора файла для сохранения редактируемого текста.
В результате макет формы должен принять вид как на
рис 1, но без строки меню.
1.4. Выполните
Рис. 1. Макет формы с элементами управления
программу, убедитесь в том, что невизуальные компоненты – значки меню и диалогов
не отображаются на форме, а в остальном вид формы полностью соотетствует её макету.
Резюме
Создание макета формы начинается с размещения на ней компонентов, позволяющих реализовать
некоторые функции разрабатываемой программы. Компоненты представлены значками в Палитре
компонентов, сгруппированными на вкладках по специфике применения. Для размещения компонента на макете формы следует щелкнуть его значок на вкладке Палитры компонентов, а затем
щелкнуть на макете формы.
 После размещения компонентов на форме буксировкой можно придать форме и компонентам необходимые положение и размеры.
 Некоторые компоненты не отображаются на форме во время работы программы и их размещение на макете формы определяется
лишь удобством разработки программы. В рассматриевом примере такими компонентами являются все, кроме Memo1.
 Визуальными компонентами называют те, которые имеют окна,
то есть могут быть видимыми при работе программы. Например,
компоненты Memo, Label, Edit.
 Невизуальными компонентами называют такие, которые не имеют на форме соответствующих значкам образов при работе программы. Например, компоненты, представляющие окна диалога.


Рис. 2. Конструктор меню
Упр 2 Сем 2 Создание текстового редактора для работ с текстовыми файлами
2.
2
Создание структуры меню.
2.1. Двойным щелчком на значке MainMenu1 откройте Конструктор меню (см. рис. 2), дайте пер-
вому пункту
строки меню
название
Файл, а первому пункту
его подменю
название Создать.
Справка.
Чтобы добавить
пункт
меню/подменю,
следует щелчком выделить
Рис. 5. Вкладка Events ИнРис. 4. Вкладка Properties
сперктора объектов после сосвободную
Инсперктора объектов
здания шаблона обработчика
рамку в Конпосле добавления пункта
щелчка на пункте меню СоРис. 3. Дерево объектов: форма
меню Создать.
структоре
здать.
и подчиненные ей объекты
меню,
набрать текст названия пункта меню в строке Caption окнаИнспектора объектов – Object Inspector на вкладке Properties (см. рис. 4) и нажать клавишу Enter. Если это название набрано русскими
буквами, то именем пункта меню, используемым в программе, будет имя вида N<число>. Например, для первого пункта меню - N1, для второго - N2, и так далее.
2.2.Аналогично создайте пункт меню Работа с двумя подпунктами с временными именами А и Б (в
дальнейшем эти имена должны быть заменены на имена пунктов вашего варианта задания (см. ниж).
Форма и расположеные на ней компоненты образуют иерархическю структуру, отображаемую в окне
Дерева объектов (окне Structure). Для выполняемого задания её вид представлен на рис. 3.
Резюме
При добавлении на форму компонентов и пунктов подменю происходит добавление в объявление
типа формы TForm1 одноименных полей соответствующих типов. Полный их перечень, включая и
имя формы, представлен в раскрывающемся списке Инспектора объектов (см. рис. 4 и рис. 5). Выбор в этом списке строчки приводит к отображению на вкладках Инспектора объектов сведений о
значениях свойств соответствующего объекта (на вкладке Properties) и методов обработки связанных с этим объектом событий (на вкладке Events).
 После размещения компонентов на форме буксировкой можно придать форме и компонентам необходимые положение и размеры, изменяя таким образом значения их свойств, которые будут сохранены и при старте программы, если не изменены программно. Значения свойств формы и компонентов на стадии проектирования прог раммы можно изменять и непосредственно на вкладке Properties
окна Инспектора объектов.
3. Создание заглушек обработчиков событий.
Обработчик события – это метод, автоматически вызываемый при наступлении события, связанного с
формой или компонентом и имеющий в программе опре- procedure TForm1.N2Click(Sender: TObject);
деленную функцию, то есть выполняющий определённую begin
работу в соответствующей ситуации. Например, обработ- //Обработчик щелчка на пункте меню ФАЙЛ.СОЗДАТЬ
чик щелчка на пункта меню Файл/Открыть… должен, в end;
Рис. 6
частности, обеспечить диалог по выбору файла и загрузку его текста в поле многострочного редактора (TMemo).

Упр 2 Сем 2 Создание текстового редактора для работ с текстовыми файлами
3
Шаблоном обработчика события будем называть конструкцию, состоящую только из заголовка метода
и операторных скобок. Шаблон создётся автоматически, например, при двойном щелчке в поле, соответствующем событию формы или компонента, на вкладке События Инспектора объектов. Одновременно в объявление класса TForm1 добавляется заголовок метода.
Заглушкой обработчика события будем называть его шаблон, дополненный комментариями и\или объявлениями и операторами, но не выполняющий полностью требуеtype
мых функций обработчика события.
TForm1 = class(TForm)
Memo1: TMemo;
3.1. Для пункта меню Создать двойным щелчком в строке OnMainMenu1: TMainMenu;
Click на вкладке Events в окне Инспектора объектов (см. рис.
OpenDialog1: TOpenDialog;
5) или двойным щелчком на строке Создать {N2} в дереве объSaveDialog1: TSaveDialog;
N1: TMenuItem;
ектов создайте шаблон обработчика события – щелчка на пункN2: TMenuItem;
те меню Создать во время исполнения программы, и превратиN3: TMenuItem;
те его в заглушку, добавив комментарий, как показано на рис. 6.
N4: TMenuItem;
N5: TMenuItem;
Справка. Если не добавить что-либо в шаблон обработчика собыN6: TMenuItem;
тия, то он и соответствующий заголовок метода в объявлении
N7: TMenuItem;
класса TForm1 будут удалены из текста программы при её подгоN8: TMenuItem;
N9: TMenuItem;
товке к выполнению.
N10: TMenuItem;
3.2. Аналогично, снабдив соответствующими комментариями,
procedure N2Click(Sender: TObject);
создайте заглушки обработчиков событий – щелчков на всех
procedure N3Click(Sender: TObject);
procedure N4Click(Sender: TObject);
пунктах подменю строки меню.
procedure N5Click(Sender: TObject);
3.3.Аналогично, снабдив соответствующим комментарием, соprocedure N6Click(Sender: TObject);
здайте заглушку обработчика события – создания формы, шабprocedure N7Click(Sender: TObject);
procedure N9Click(Sender: TObject);
лон которого можно получить так: щелкнуть на свободном меprocedure N10Click(Sender: TObject);
сте макета формы и в Инсперторе объектов на вкладке Events
procedure FormCreate(Sender: TObject);
сделать двойной щелчок в строке OnCreate.
private
{ Private declarations }
После добавления на форму управляющих элементов и заглушек
public
обработчиков событий объявление класса формы TForm1 примет
{ Public declarations }
вид, показанный на рис. 7.
end;
Выполните программу и убедитесь в наличии на форме меню и ок- Рис. 7. Объявление типа формы после
на текстового редактора. Выполняйте такие проверки после каж- добавленияуправляющих элементов и
создания заглушек методов
дого добавлени\изменения программы.
4. Добавление переменных, представляющих текущее состояние процесса обработки данных.
procedure TForm1.FormCreate(Sender: TObject);
begin
//Обработчик события СОЗДАНИЯ ФОРМЫ
//При создании формы удалить текст из
//Memo1 - рабочей области редактора
Memo1.Clear;
//заполнить рабочей областью редактора
//(то есть развернуть элемент Memo1 во)
//всю клиентскую область окна формы
Memo1.Align:=alClient;
//и установить равноширинный шрифт Courier
Memo1.Font.Name:='Courier';
//Пока S ='', редактируемый текст не сохранен в файле
S:='';
//а в дальнейшем S может представлять
//спецификацию файла.
//Считать, что текст не модифицирован
Memo1.Modified:=false;
end;
Рис. 8. Обработчик события создания формы
procedure TForm1.N6Click(Sender: TObject);
begin
//Обработчик щелчка на пункте меню ФАЙЛ.СОХРАНИТЬ КАК...
//Открытие окна диалога для выбора папки и
//задания имени и типа файла, в котором следует
//сохранить текст из Memo1-рабочей области редактора
if Form1.SaveDialog1.Execute then begin
//Если файл выбран,
//то S присвоить спецификацию файла,
S:=SaveDialog1.FileName;
//сохранить текст в файле и далее
Memo1.Lines.SaveToFile(S);
//считать, что текст не модифицирован,
Memo1.Modified:=false;
//а в заголовок формы добавить
//спецификацию файла
Form1.Caption:='Form1' + ' ' + S;
end;
end;
Рис. 9. Обработчик события сохранения текста в новом файле
Справка. Эти переменные используются разными методами и их объявление можно дать либо внутри
объявления класса, либо в разделе var в интерфейсной части, либо в разделе var в части реализации.
Если в дальнейшем предполагается запретить доступ к этим переменным вне данного модуля (напри-
Упр 2 Сем 2 Создание текстового редактора для работ с текстовыми файлами
4
мер, в наследниках класса, объявляемых в других модулях или в основной программе), то их следует
объявить в части реализации или в разделе private класса. TForm1.
Справка. Чтобы не появлялось окно консоли введите команду Project/Options/Linker и сбросьте флажок Generate Console Application.
4.1. Добавьте в раздел реализации объявление переменной S:string. Она должна представлять спецификацию файла, обрабатываемого в текущий момент. Её пустое значение будет обозначать, что
текст из элемента Memo1 еще не сохранен в файле.
5. Создание обработчиков событий.
5.1.Добавьте в метод procedure TForm1.FormCreate(Sender: TObject) обработки события
FormCreate операторы и комментарии, как на рис.8.
5.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.
5.3.Создайте самостоятельно обработчик procedure TForm1.N5Click(Sender: TObject) события
щелчка на пункте меню Файл\Сохранить, имея в виду следующее: если текст ещё не сохранялся в
файле, точнее, если S=’’, то следует вызвать N6Click(Self) - обработчик, созданный для пункта меню
Файл.Сохранить как… в предыдущем пункте задания, иначе – просто выполнив оператор
Memo1.Lines.SaveToFile(S) – сохранение всего редактируемого текста в файле со спецификацией,
хранящейся в S.
5.4. Создайте обработчик procedure
procedure TForm1.N3Click(Sender: TObject);
TForm1.N3Click(Sender:
TObject)
begin
события щелчка на пункте меню
//Обработчик щелчка на пункте меню ФАЙЛ.ОТКРЫТЬ...
Файл\Открыть…, для чего сделайте
if Memo1.Modified then begin //если текст Memo1 был
двойной щелчок на соответствующей
// изменён, то предложить диалог для выбора файла
строке дерева объектов и в появивcase MessageDlg('Текст был изменен. Сохранить данные'+
шейся заглушке добавьте операторы и
' в файле по выбору?', mtConfirmation,
[mbYes, mbNo, mbCancel], 0) of
комментарии, имея в виду следующее.
6{idYes}: begin // сохранить текст в файле, выбрав его
5.4.1. Если редактируемый текст
//в диалоге ФАЙЛ.СОХРАНИТЬ КАК...
не
был изменён (Memo1. Modified
N6Click(Self);
ложно), то сразу перейти к диалогу
//перейти к диалогу ФАЙЛ.ОТКРЫТЬ
открытия файла, иначе следует
end;
{2}idCancel: exit;//выйти из диалога ФАЙЛ.ОТКРЫТЬ
предложить пользователю разраба//в редактор без сохранения
тываемой программы выбрать в
{7}idNo:;//не сохранять текст в файле и
диалоге (см. справку по функции
//перейти к диалогу ФАЙЛ. ОТКРЫТЬ
MessageDlg) вариант продолжения
end; //case
работы с измененным текстом:
end;//if Memo1.Modified
//Открытие окна диалога ФАЙЛ.ОТКРЫТЬ для выбора папки
- I) или сохранить его в файле
//и файла, текст из которого следует
по выбору, вызвав N6Click(Self) и
//поместить в Memo1 - рабочую область редактора.
затем открыть новый файл;
if Form1.OpenDialog1.Execute then begin //если выбран файл
- II) или не сохранять текст и
S:=OpenDialog1.FileName;//то S присвоить спецификацию файла,
открыть новый файл;
Memo1.Lines.LoadFromFile(S);//загрузить текст из файла в Memo1
Memo1.Modified:=false;//считать, что текст не модифицирован,
- III) или отменить выполнение
//а в заголовок формы добавить спецификацию файла
команды, выйдя из метода по exit и
Form1.Caption:='Form1' + ' ' + S;
продолжить редактирование текста,
end;//if Form1.OpenDialog1.Execute
как если бы команда открытия файend;
ла вообще не вводилась.
Рис. 10. Обработчик события открытия файла
Упр 2 Сем 2 Создание текстового редактора для работ с текстовыми файлами
5
(см. текст обработчика рис. 10).
5.4.2. Диалог для выбора открываемого файла запускается командой OpenDialog1.Execute (см
справку по классу TOpenDialog). Если открываемый файл не был выбран (в окне диалога Открыть была нажата кнопка Отмена), то следует просто выйти из обработчика (вернуться к редактированию прежнего текста), иначе следует загрузить выбранный файл на редактирование, переменной S присвоить спецификацию этого файла и отобразить её в заголовке окна форма, а также
свойству Memo1.Modified присвоить значение false – признак того, что загруженный на редактирование текст не изменён.
5.5.
Создайте самостоятельно обработчик 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.
5.6. Создайте самостоятельно обработчик procedure TForm1.N2Click(Sender: TObject) события
щелчка на пункте меню Файл.Создать, для чего сделайте двойной щелчок на соответствующей строке
дерева объектов и в появившейся заглушке добавьте операторы и комментарии, имея в виду что: - окно
Memo1 нужно очистить без всяких условий, - строка S должна стать пустой, то есть не должна
представлять имя файла, - в заголовке формы оставить только её название, то есть Form1.
5.7. Создайте самостоятельно обработчик procedure TForm1.N5Click(Sender: TObject) события
щелчка на пункте меню Файл\Сохранить, для чего сделайте двойной щелчок на соответствующей
строке дерева объектов и в появившейся заглушке добавьте операторы и комментарии, имея в виду
следующее. Если строка S пустая, то есть не представляет имя файла, то следует передать управление
Упр 2 Сем 2 Создание текстового редактора для работ с текстовыми файлами
6
обработчику команды Файл/Сохранить как…, выполнив оператор N6Click(Self), иначе – сохранить
текст Memo1 в файле оператором Memo1.Lines.SaveToFile(S). Затем установить оператором
Memo1.Modified:=false признак, что текст в Memo1 не модифицирован.
5.8. Создайте самостоятельно обработчик procedure TForm1.N4Click(Sender: TObject) события
щелчка на пункте меню Файл.Закрыть, для чего сделайте двойной щелчок на соответствующей строке
дерева объектов и в появившейся заглушке добавьте операторы и комментарии, имея в виду, что если
текст был изменен, то нужно в диалоге (см. справку по функции MessageDlg) выяснить, что желает
пользователь. Если он нажмёт кнопук Cancel, то есть хочет вернуться к редактированию текста, то
следует просо выйти из обработчика. Если он нажмёт кнопку No, то нужно удалить текст, вывести в
заголовок окна название формы ‘Form1’ и присвоить S пустое значение. Если пользователь нажмёт
кнопку Yes, то нужно выполнить те же действия, что и при нажатии кноки No, но предварительно сохранить текст оператором Memo1.Lines.SaveToFile(S), если S≠’’, или сохранить текст в файле по выбору, вызвав N6Click(Self), если S=’’.
6. .Задания для самостоятельного выполнения
6.1. На Упр 1 рассмотреть среду Delphi и разобрать выполнение работ по пунктам 1..5 этого текста, а
на Лр 1 создать текстовый редактор по этим пунктам, самостоятельно разработав недостающие части
программы.
6.2. На Упр 2 рассмотреть типовые задачи по текстовым файлам, а на Лр 2 - добавить в меню пункт
Работа и его подпункты в соответствии со своим вариантом задания и создать соответствующие им
обработчики.
Download