Уроки Дельфийского. Часть 2
Как я и обещал в прошлый раз, во второй части «Уроков Дельфийского» будет рассказано, как написать простейший текстовый редактор. Также мы познакомимся с несколькими новыми компонентами и их свойствами.
Класс, встать: суд… то есть, я хотел сказать: учитель идёт! Так, редеют наши ряды… Видимо, многим программирование показалось непосильной задачкой. Ну и ладно, зато остались самые стойкие. Надеюсь, домашнее задание все выполнили? Ах, не все… Двойка, Сидоров, двойка!
Ну-с, приступим! Как я и обещал, мы будем писать свой собственный Блокнот. Зачем он нужен, спросите вы? Да просто как хороший пример для изучения компонент, функций и процедур (о функциях и процедурах мы подробно поговорим на следующем уроке). Если не хотите писать Блокнот, можете приступать сразу к Word’у, но за последствия я не отвечаю.
Итак, для начала создайте новый проект (File -> New -> Application). Теперь сохраните его в отдельную папку под именем, к примеру, MyNotepad. Затем смените имя формы на MainForm (можно назвать и по-другому, но тогда будьте внимательнее при копировании моего кода).
А теперь давайте размещать компоненты. Нам понадобятся: Memo (1 шт.), MainMenu (1 шт.) и StatusBar (1 шт.). Последний находится на вкладке Win32. После того, как компоненты положены на форму, нужно разместить и настроить их так, чтобы интерфейс нашей программы не отличался от Блокнота. Сделать это очень просто. Объясняю по порядку.
- Поле редактирования Memo. Для удобства назовем его Editor (свойство Name=Editor) и установим свойство Align равным alClient. При этом Memo «развернётся», заняв всё свободное место.
- Изменяем заголовок формы (Caption=Блокнот).
- Дважды щёлкнем на компоненте MainMenu (это главное меню приложения) — откроется «Дизайнер меню». Работать с ним очень просто: добавляйте новые пункты, располагайте их в нужном порядке и при необходимости меняйте их свойства. Постарайтесь сделать меню, точно копирующее Блокнот. Думаю, с этим вы справитесь самостоятельно.
- Cтрока состояния. Так как в Блокноте в ней отображается только позиция курсора, то можно не делить её на секции (SimplePanel=true).
- Для того, чтобы сменить значок приложения, откройте свойства проекта (Project -> Options) и на вкладке Application загрузите нужный значок (его можно предварительно «выдрать» из самого Блокнота программами типа ResHacker или Restorator). В этом же окне вы можете сменить заголовок приложения.
- Для изменения значка формы можно воспользоваться её свойством Icon (напротив этого свойства Инспектор покажет маленькую кнопочку, нажатие на которую вызовет диалог открытия файла).
- Ну и, наконец, если вы работаете в WinXP, то можно включить поддержку тем оформления этой операционной системы. Для этого достаточно бросить на форму компоненту XPManifest (вкладка Win32).
Всё! Теперь можете запустить наш Блокнот и полюбоваться на него. Выглядит он очень похоже (см. рисунок), а вот работает пока не очень… Это мы сейчас и будем исправлять.
.Начнём с самого простого – окна «О программе». Так как это окно вызывается из меню, выберите в дизайнере соответствующий пункт меню. При этом Delphi создаст заготовку процедуры (помните, как это было с кнопкой из первого урока?). В этом обработчике запишем следующий код:
procedure TForm1.N5Click(Sender: TObject);
const
AboutString='Блокнот. Версия 1.0'+#10#13+
'Учебная программа.'+#10#13+
'Автор (c) 2005 Читатель МегаБайта';
begin
ShowMessage(AboutString);
end;
Далее мы будем аналогичным образом создавать обработчики для остальных пунктов меню.
Вы можете присвоить любому пункту меню «горячую клавишу», для чего нужно просто установить свойство его ShortCut, выбрав нужную комбинацию клавиш.
Файл -> Создать. В этой процедуре мы пока напишем лишь одну строчку:
Editor.Lines.Clear;
Но помните, что в таком случае ваша программа не будет спрашивать пользователя о необходимости сохранения документа. Если вы знакомы с использованием конструкции if-then-else, то без труда сможете организовать такой запрос (намёк: у поля редактирования есть свойство, с помощью которого можно определить, изменялось ли поле).
Файл -> Открыть. Прежде чем создавать этот обработчик, бросьте на форму компоненту OpenDialog (стандартное диалоговое окно открытия файлов). Затем напишите следующий код:
if OpenDialog1.Execute then
begin
Editor.Lines.LoadFromFile(OpenDialog1.FileName);
end;
Этот код вызовет диалог открытия и после выбора в нём файла загрузит этот файл в поле редактирования. Рекомендую также изменить свойство OpenDialog.Filter, который, как вы, наверное, уже догадались отвечает за фильтр-маску диалога. Впишите в качестве маски что-нибудь вроде *.txt.
Файл -> Сохранить. Эта функция очень похожа на предыдущую, только для неё потребуется другой тип диалога — SaveDialog.
if SaveDialog1.Execute then
begin
Editor.Lines.SaveToFile(SaveDialog1.FileName);
end;
Функция работает во многом аналогично предыдущей, только не загружает документ, а сохраняет его в файл. Обратите внимание, что у компоненты SaveDialog есть свойство DefaultExt. Это свойство указывает на расширение, которое будет присвоено сохраняемому файлу по умолчанию. То есть если вы сделаете это свойство равным, к примеру, txt, то всем сохраняемым файлам, для которых явно не указали расширение, будет присвоено расширение .txt.
Думаю, теперь общий принцип работы с меню и диалогами вам понятен. Оставшиеся пункты будут домашним заданием. На следующем уроке мы перейдём к новой теме — «Процедуры и функции».