Подписаться на RSS рассылку
Главная » Учебник по Delphi для начинающих » Урок 6 - Простейший текстовый редактор

Урок 6 - Простейший текстовый редактор

Автор:

Tweet

Выложим на форму TMemo, и TMainMenu. Установим свойство Align в alClient для того, чтобы компонент растянулся на все свободное пространство формы. Установим свойство ScrollBars в ssBoth, а WordWrap в False. И уберем введенный в Memo1 текст поумолчанию, удалив этот текст из свойства Lines.

Щелкнем по MainMenu1 два раза - появится окно. Теперь создадим меню "Файл". В нем элементы: "Создать", "Открыть", "Сохранить", "Сохранить как...", разделительную полоску (символ "-") и "Выход"

Установим горячие клавиши как показанно на рис 1. Горячие клавиши устанавливаются в свойстве ShortCut

Рис. 1 - Меню "Файл"

Аналогично создаем меню "Правка":

Рис. 2 - Меню "Правка"

Аналогично создаем меню "Формат":

Рис. 3 - Меню "Формат"

Итак, начнем. Окошко редактора меню нам больше не нужно - его можно закрыть. На нашей форме уже появилось меню. Оно выпадает при щелчке, вобщем практически рабочее. Осталось только написать код, который будет выполняться при выборе чего-либо из меню. Щлекнем по меню "Файл", а там выберем "Выход".


Рис. 4 - Создание события onClick

После нажатия по меню "Выход" появляется окно редактора кода с уже готовой процедурой. Пишем:

Close;

Обратите внимание, что Close и Form1.Close это одно и тоже. Т.к. форма является родителем то имя родителя можно опускать.

Теперь после выбора меню "Выход" программа закроется.

Реализация переноса по словам

В меню "Формат" выберем "Перенос по словам":

procedure TForm1.N14Click(Sender: TObject);
begin
 If Memo1.WordWrap then
 begin
 Memo1.WordWrap:=false;
 Memo1.ScrollBars:=ssBoth;
 N14.Checked:=False;
 end
 else
 begin
 Memo1.WordWrap:=True;
 Memo1.ScrollBars:=ssVertical;
 N14.Checked:=True;
 end;
end;

Разберемся что мы делаем: если уже установлен режим переноса по словам то мы убираем его и устанавливаем галочку на N14. И наоборот.

Реализация функции "Сохранить как..."

Нам понадобится диалоговое окно сохранения документа. Воспользуемся компонентом TSaveDialog на вкладке Dialogs. Выложим его на форму. Установим фильтр, т.е. те файлы которые будет этот диалог отображать. Нам нужно *.txt, т.е. текстовые документы. Чтобы это сделать нужно найти свойство Filter и нажать на кнопку . Появится окно. Заполните его как показанно на рис. 5.


Рис. 5 - Редактор фильтра

Теперь измените свойство DefaultExt на *.txt. Это расширение которое будет добавляться к файлу.

Создадим процедуру сохранения файла. Напишем этот код сразу после {$R *.dfm}.

Procedure SaveAs;
begin
 If Form1.SaveDialog1.Execute then
 begin
 Form1.Memo1.Lines.SaveToFile(Form1.SaveDialog1.FileName);
 FileWork:=Form1.SaveDialog1.FileName;
 end;
end;

Далее выбераем в меню "Файл" —> "Сохранить как...". Там пишем:

SaveAs;

Что же тут делается и как все работает? Очень просто! Когда пользователь выберает пункт меню "Сохранить как..." то вызывается процедура SaveAs, которую мы уже написали. Теперь разберем процедуру SaveAs. Когда вызывается функция Execute у TSaveDialog то появляется диалог сохранения и если пользователь нажмет кнопку сохранить, то функция Executeвозвратит True иначе False. Если возвратится True то будет выполнена процедура SaveToFile, т.е. сохранение файла. В SaveDialog1.FileName хранится путь к файлу в который пользователь указывает в диалоге.

Я ввел глобальную переменную FileWork. В ней будет храниться путь к файлу с которым работает пользователь. Это нужно для реализации функции "Файл" —> "Сохранить". Не забудьте ее объявить в разделе Var перед implementation. Должно быть вроде этого:

var
 Form1: TForm1;
 FileWork: String;

Реализация функции "Сохранить"

Выбераем "Файл" —> "Сохранить". И пишем:

If FileWork='' then SaveAs else Memo1.Lines.SaveToFile(FileWork);

Если пользователь уже сохранял файл то в FileWork будет что-то храниться, в любом случае не "пустота". Если хранится '', т.е. ничего не хранится то вызываем SaveAs. Она как раз и покажет диалог сохранения. Если переменная FileWork не пустая, то сохраняем файл по тому пути который указан в FileWork.

Реализация функции "Открыть"

Помимо TSaveDialog существует TOpenDialog . И если Вы хоть малость знаете английский, то уже поняли бы, что этот компонент предназначен для открытия файлов.

Выложите этот компонент на форму и свойство Filter измените так же как у SaveDialog1.

Вообще компоненты TSaveDialog и TOpenDialog очень похожи. Диалог открытия вызывается так же — функцией Execute, которая возвращает True если пользователь желает открыть файл.

Жмем "Файл" —> "Открыть". Пишем:

if OpenDialog1.Execute then
begin
 Memo1.Lines.LoadFromFile(OpenDialog1.FileName);
 FileWork:=OpenDialog1.FileName;
end;

Запускаем программу F9 и пробуем. Если все делали правильно, то все должно работать.

Реализация функции "Создать"

Жмем "Файл" —> "Создать". Пишем:

FileWork:='';
Memo1.Clear;

Тут все понятно и без объяснений. Но все же объясню: первая строчка очищает FileWork, т.е. программа не будет знать о том что мы с каким-то файлом работали. Вторая строчка очищает Memo1.

Реализация функций в меню "Правка"

По клику на меню "Вырезать":

Memo1.CutToClipboard;

По клику на меню "Копировать":

Memo1.CopyToClipboard;

По клику на меню "Вставить":

Memo1.PasteFromClipboard;

Реализация функций в меню "Шрифт..."

Нам понадобится еще один компонент - TFontDialog . Функция для вызова такая же как у TOpenDialog и TSaveDialog - Execute. Создаем событие по клику по меню "Шрифт...".

if FontDialog1.Execute then Memo1.Font:=FontDialog1.Font;

Если пользователь применил изменения, то свойству Font у Memo1 присваиваем выбранные пользователем настройки шрифта. Они хранятся в свойстве Font у FontDialog1.

Завершаем...

Основная часть программы написана. Осталось совсем немного. Нам нужно сделать активной форму, чтобы в инспекторе объектов появились ее свойства, но из-за Memo1 который растянут на всю форму не получается это сделать. Есть несколько вариантов. Можно просто выделить форму в Object TreeView. А можно выделить Memo1, затем зажать клавишу Shift и щелкнуть по Memo1 еще раз.

Итак, Вы активировали форму. Изменим заголовок окна: в свойстве Caption напишите "Блокнот". Свойство Position измените на poScreenCenter для того, чтобы форма появлялась по центру экрана.

Ну и напоследок добавим модуль XPMan в список модулей (секция uses). Выглядель это должно примерно так:

uses
 Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
 Dialogs, Menus, StdCtrls, XPMan;

Этот модуль подключает XMManifest к приложению, т.е. если у Вас установленна XP, то все компоненты приобретают XP-шный вид, а если Vista - то становятся стиля Висты, а не как в Win98 или Win2000. Можете поэкспериментировать

Скачать исходник программы


Урок 7 - Изучаем компоненты TImage, TGroupBox, TRadioGroup

Просмотров: 37821

Обсудить на форуме

Copyright © 2008 - 2018 Программирование на Delphi для начинающих и не только.

Полнота авторских прав на все материалы, опубликованные на сервере DelphiDevelop.ru принадлежит их авторам.

Перепечатка материалов разрешается с указанием авторства и гиперссылки на первоисточник информации.