Выложим на форму 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 принадлежит их авторам.
Перепечатка материалов разрешается с указанием авторства и гиперссылки на первоисточник информации.