Простейший текстовый редактор
Выложим на форму 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. Можете поэкспериментировать
Комментарии