Уроки по Delphi

       

Завершение проектирования MyEdit.


На сегодняшнем уроке мы с вами закончим рассматривать и написание программы простейшего текстового редактора. Предыдущую версию программы можно забрать здесь.

Итак, наша программа, лишенная некоторых нерассмотренных возможностей, практически готова. Ее можно применять как для просмотра, так и для редактирования текстовых файлов небольшого размера и вполне может заменить стандартный блокнот в Windows. К тому же, наша программа может работать с несколькими текстовыми файлами одновременно.

Организуем закрытие главного окна при выборе пункта меню "Выход". Для этого по известной нам методике, вызываем главное окно проекта MainForm на редактирование. Для этого нажимаем Shift+F12 и выбираем его в списке. Дальше, чтобы организовать реализацию события выбора пункта меню пользователем OnClick можно двумя способами:

1. Для дважды кликнуть по компоненту главного меню MainMenu1, после чего вызывается на редактирование редактор пунктов этого меню. После чего нужно выбрать пункт "Выход" и в инспекторе объектов (вкладка Events) выбрать процедуру OnClick на этом пункте, тем самым создав новую процедуру обработки события.

2. Просто из уже готового (отображаемого) меню в окне MainForm выбрать пункт "Выход". Delphi автоматически по умолчанию воспринимает как выбор программистом события OnClick для этого меню и создает все ту же пустую процедуру реакции программы на событие.

Какой из этих методов в дальнейшей работе – выбирать вам. Второй экономит время написания программы, первый нагляднее. Такой способ быстрого выбора событий для компонентов, которые установлены по умолчанию, характерны для всех компонентов в delphi. Например, двойной щелчок мышки по форме создает событие OnCreate для этой формы, для кнопки TBotton – событие OnClick, TMemo – событие OnChange. Постепенно в ходе обучения я буду обращать внимание на такие моменты оптимизации вашей работы.

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




procedure TMainForm.N8Click(Sender: TObject);
begin
Close; // Закрыть главное окно (закрыть программу)
end;
Можно написать MainForm.Close, что равнозначно вышесказанному. Но поскольку данный модуль (Unit) предназначен для работы с формой (MainForm) и с его компонентами, то все команды в этом модуле воспринимаются как команды для окна, если мы непосредственно не указываем получателя.
Закрывая главное окно, мы тем самым закрываем все дочерние окна. Команда закрытия главного окна работает следующим образом.
1. После получения команды закрытия поочередно посылается аналогичная команда на все дочерние окна.


2. Если в дочерних окнах файл был изменен, происходит запрос на сохранение, в течении которого главное окно ждет.
3. Если пользователь ответил на запрос "Отмена", то одно из дочерних окон не закрывается и процесс закрытия главного окна прекращается. Текстовый файл по прежнему доступен для редактирования.
4. В случае успешного закрытия всех дочерних окон закрывается и главное окно приложения.
5. Программа после закрытия главного окна завершает работу.
Весь такой трудоемкий процесс закрытия происходит очень быстро и незаметно для пользователя, и что главное – полностью автоматически. Во-первых (как это не прискорбно для некоторых "любителей" Windows) благодаря свойствам операционной системы управления MDI-приложениями; во-вторых благодаря нам, мы этот случай рассматривали только при закрытии единственного дочернего окна и не подозревая, что применяем ко всему проекту. Все в программах, как и в этом мире взаимосвязано, особенно все, что касается дочерних процессов.
У нас в меню "Файл" остался один незадействованный пункт "Закрыть". Его применяют для закрытия активного дочернего окна (если пользователю лень нажать на крестик в правом верхнем углу). Мы этот пункт уже применили в меню "Окна", и поэтому его необходимость повторного существования отпадает. Его можно удалить или назначить соответствующее свойство из списка стандартных действий.


Для этого открываем редактор главного меню (MainMenu1) двойным щелчком мыши. Выбираем пункт меню "Закрыть" и в свойстве Action (Object Inspector на странице Properties) выбираем стандартное действие Close1. Тут, возможно, из-за различий в версиях delphi некоторые различия. Поступайте в таких случаях всегда "по смыслу", находя наиболее похожие или применимые значение для выбора, или в самых запущенных случаях обращайтесь к автору этого урока за помощью.
И наконец, самый последний пункт меню "О программе". Ведь каждый уважающий себя программист обязательно ставит свою подпись на каждом программном продукте. В таком окне еще обычно даются каналы связи технической поддержки, версия программы и дата изготовления. Можно написать еще много разной информации, чего сразу не припомнишь.
Изготавливаем новое окно для нашего проекта. Это окно будет модальным, т.е. пользователь ничего не сможет сделать с другими окнами, пока не закроет это. Модальное окно появляется поверх других окон, делая все остальные недоступными.
Выбираем из меню "File" главного окна delphi пункт "New Form". Появляется новая чистая форма. Сразу изменяем ее размер на более малый, ведь окно About никогда огромным не бывает, впрочем как вам угодно.
Дальше описываю все дальнейшие ваши шаги с пояснениями.
1. Изменяем свойство Name для этого нового окна из Form1 в About. Теперь доступ к нему из программы будет только по этому идентификатору.
2. Изменяем свойство Caption на "О программе". Заголовок окна содержит этот текст, понятный пользователю, куда он попал, и какая здесь содержится информация.
3. Выбираем пункт меню delphi "Save All" и сохраняем новое окно под именем AboutUnit.
4. Изменяем свойство Pisition на poScreenCenter. Это означает, что окно "О программе" будет изначально появляться ровно по центру экрана, независимо от текущего экранного разрешения.
5. Изменяем свойство BorderStyle на bsDialog. Это окно у нас служит в качестве диалогового, и значит пользователь не должен иметь возможность его свернуть или развернуть на весь экран.


6. Устанавливаем в форму кнопку TBitBtn
, находящейся на палитре компонентов на странице Additional. Располагаем эту кнопку в удобное для вашего взгляда положение. Например в правый нижний угол. Дальше изменяем свойство Kind для этой кнопки в bkOK. Кнопка сразу приобретет новое название OK и на ней появится рисунок зеленой галочки. Если пользователь выберет эту кнопку, то окно About закроется без написания каких-нибудь процедур с нашей стороны.
7. Располагаем в форме несколько компонентов TLabel
(сколько нужно), в которых в свойстве Caption пишите всю необходимую в таких случаях информацию. Шрифт можно изменить в свойстве Font.
8. Теперь непосредственно привяжем вызов этого окна выбором соответствующего пункта меню. Для этого выбираем пункт меню "О программе" в главном окне нашей программы MainForm и в процедуре OnClick, для этого пункта меню, пишем одну строчку.
procedure TMainForm.N15Click(Sender: TObject);
begin
About.ShowModal;
end;
Дальше выбираем пункт меню Use Unit из меню файл главного окна delphi и выбираем модуль AboutUnit. Мы только что подключили к главному модулю проекта модуль окна About. Если этого не сделать – ничего страшного. При запуске программы на исполнение delphi примет это за упущение со стороны программиста и сделает запрос на автоматическое подключение соответствующего модуля, после чего вам следует повторно запустить программу на выполнение.
Это вроде бы все. Можете запускать программу и любоваться своей работой. Как всегда, рассмотренный материал в виде примера можно скачать в конце урока здесь.
Эта программа совсем не сложная, хотя и содержит некоторые строки, непонятные для новичков. Но и без этого вы смогли убедиться, что писать программы в программной оболочке delphi не сложно.
В следующих уроках мы с вами будем начнем новый пример и будем постепенно продвигаться в азах программирования, приобретая новые знания.
С уважением, ведущий уроков Semen semen@krovatka.net

Содержание раздела