Уроки Дельфийского. Часть 2

Как я и обещал в прошлый раз, во второй части «Уроков Дельфийского» будет рассказано, как написать простейший текстовый редактор. Также мы познакомимся с несколькими новыми компонентами и их свойствами.

Класс, встать: суд… то есть, я хотел сказать: учитель идет! Так, редеют наши ряды… Видимо, многим программирование показалось непосильной задачкой. Ну и ладно, зато остались самые стойкие. На­деюсь, домашнее задание все выполнили? Ах, не все… Двойка, Сидоров, двойка!

Ну-с, приступим! Как я и обещал, мы будем писать свой собственный Блокнот. Зачем он нужен, спросите вы? Да просто как хороший пример для изучения компонент, функций и процедур1. Если не хотите писать Блокнот, можете приступать сразу к Word'у, но за последствия я не отвечаю.
Итак, для начала создайте новый проект (File -> New -> Application). Теперь сохраните его в отдельную папку под именем, к примеру, MyNotepad. Затем смените имя формы на MainForm (можно назвать и по-другому, но тогда будьте внимательнее при копировании моего кода).
А теперь давайте размещать компоненты. Нам понадобятся: Memo (1 шт.), MainMenu (1 шт.) и StatusBar (1 шт.) 2. После того, как компоненты положены на форму, нужно разместить и настроить их так, чтобы интерфейс нашей программы не отличался от Блокнота. Сделать это очень просто. Объясняю по порядку.
– Поле редактирования Memo. Для удобства назовем его Editor (свойство Name=Editor) и установим свойство Align равным alClient. При этом Memo “развернется”, заняв все свободное место.
– Изменяем заголовок формы (Caption=Блокнот).
– Дважды щелкнем на компоненте MainMenu (это главное меню приложения) — откроется “Дизайнер меню”. Работать с ним очень просто: добавляйте новые пункы, располагайте их в нужном порядке и при необходимости меняйте их свойства. Постарайтесь сделать меню, точно копи­рующее Блокнот. Думаю, с этим вы справитесь самостоятельно.
– Cтрока состояния. Так как в Блокноте в ней отображается только позиция курсора, то можно не делить ее на секции (SimplePanel=true).
– Для того, чтобы сменить значок приложения, откройте свойства проекта (Project -> Options) и на вкладке Application загрузите нужный значок (его можно предварительно “выдрать” из самого Блокнота программами типа ResHacker). В этом же окне вы можете сменить заголовок приложения.
– Для изменения значка формы можно воспользоваться ее свойством Icon (напротив этого свойства Инспектор покажет маленькую кнопочку, нажатие на которую вызовет диалог открытия файла).
– Ну и, наконец, если вы работаете в WinXP, то можно включить поддержку тем оформления этой операционной системы. Для этого достаточно бросить на форму компоненту XPManifest (вкладка Win32).
Все! Теперь можете запустить наш Блокнот и полюбоваться на него. Выглядит он очень похоже (см. рисунок), а вот рабо­тает пока не очень… Это мы сейчас и будем исправлять.

Начнем с самого простого — окна “О программе”. Так как это окно вызывается из меню, выберите в дизайнере соответствующий пункт меню. При этом Delphi создаст заготовку процедуры (помните, как это было с кнопкой из первого урока?). В этом обработчике запишем следующий код:
procedure TForm1.N5Click (Sender: TObject);
const
AboutString='Блокнот. Версия 1.0'+#10#13+
'Учебная программа.'+#10#13+
'Автор © 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.
Думаю, теперь общий принцип работы с меню и диалогами вам понятен. Остав­шиеся пункты будут домашним заданием. На следующем уроке мы перейдем к новой теме — «Процедуры и функции».

1. О функциях и процедурах мы подробно поговорим на следующем уроке.
2. Находится на вкладке Win32.


Рекомендуем почитать: