Описание работы
Наше приложение будет состоять всего из одной формы, на которой надо разместить 4 компонента типов TMainMenu, ТМеmо и две TOpenDialog (рис. 16). С помощью этих компонентов мы реализуем два способа решения поставленной задачи. Рассмотрим их.
Для создания главного меню в Delphi используется компонент типа TMainMenu. Для этого необходимо поместить его на форму и дважды щелкнуть по нему. После этого на экране появится окно редактора меню (рис. 17).
Замечание
Для изменения пунктов меню используйте клавиши Insert, Delete и Ctrl+->
Сначала меню состоит из одного пустого элемента. Для добавления нового пункта меню можно просто начать изменять любой пустой пункт меню в редакторе меню (он обведен пунктирным прямоугольником). Для вставки - нового пункта меню в любой позиции необходимо нажать клавишу Insert. Для удаления пункта меню клавишу Delete. Для создания подменю второго уровня - клавишу Ctrl+->.
Таблица 8. Основные свойства объектов типа TMenuItem | ||
Свойство | Тип | Комментарий |
Caption | String | Текст, появляющийся в меню. Если перед некоторой буквой поставить знак &, то во время выполнения программы этот знак будет не виден, а буква будет изображаться с подчеркиванием, что позволит ее использовать в качестве горячей клавиши. Если текст состоит всего из одного знака «минус», то пункт меню становится разделительной линией. |
Cheeked | Boolean | При установке значения True слева от пункта меню будет отображаться «галочка». |
Enabled | Boolean | Если значение будет равно False, то пункт меню будет недоступен для выбора и станет отображаться серым цветом. |
Shortcut | TShortCut | Горячая клавиша, которую можно будет использовать для быстрого вызова пункта меню. Кроме того, она будет отображаться справа от пункта меню. |
Visible | boolean | Если значение будет равно False, то пункт меню будет невидим |
Для изменения описания пунктов меню необходимо выбрать требуемый. При этом он станет доступным в инспекторе объектов, где можно изменить все необходимые свойства. В табл. 8 приведено краткое описание основных свойств элементов меню.
В данной лабораторной работе необходимо создать в главном меню два вида подменю. В первом подменю «Файл» можно создать три пункта и один разделитель. Это команды «Открыть...» для выбора файла в диалоге и загрузки его в главную форму, «Выполнить...» для выбора выполняемого файла в диалоге и его запуска, а также команда «Выход».
Все остальные подменю должны соответствовать предыдущим лабораторным работам и оформлены примерно так, как показано на рис. 18. Первым пунктом такого подменю должно быть название файла проекта, например Labl.dpr. Затем после разделителя список всех модулей, входящих в состав проекта. А в конце после разделителя имя выполняемого файла.
После создания меню необходимо создать обработчики событий выбора пунктов меню. Для их создания можно просто дважды щелкнуть в нужный пункт меню, находясь в редакторе меню, либо просто выбрать этот пункт в меню формы.
Самый простой из обработчиков соответствует пункту меню «Выход». В нем просто нужно вызвать метод формы Close.
Наша программа должна выполнять два вида действий - загрузку файла для просмотра в многострочный текстовый редактор и запуск программы на выполнение. Для этого создадим две соответствующие процедуры OpenFile и ExecuteFile с одним входным параметром строкового типа для передачи имени файла. Процедура OpenFile должна открыть текстовый файл, считать все его строчки и поместить их в многострочный редактор типа ТМето. Наиболее важные свойства компоненты данного типа приведены в табл. 9.
Процедура ExecuteFile должна запускать выполняемый файл. Для этого можно воспользоваться функцией WinExec, определенной в модуле Windows. Функция имеет два параметра. Первый типа PChar задает имя файла, второй целочисленный - способ запуска. В большинстве случаев способ запуска можно задавать равным 0. Тип данных PChar эквивалентен типу *char, используемому в языке С. Для приведения к нему обычной строки Delphi, например FileName типа string, можно просто записать PChar(FileName).
Таблица 9. Основные свойства объектов типа ТМето | ||
Свойство | Тип | Комментарий |
Align | TAlign | Определяет режим автоматического изменения размера компоненты. Значение, равное alClient, позволяет автоматически растягивать компонент по размеру содержащего его визуального компонента, например формы. |
ReadOnly | Boolean | При установке значения True, текст нельзя будет редактировать. |
Lines | TStrings | Содержимое многострочного редактора. |
ScrollBars | TScrollStyle | Определяет видимость полос прокрутки. Значение равное ssBoth включает обе полосы. |
Замечание
Для назначения пунктам меню уже созданного обработчика событий необходимо в инспекторе объектов просто выбрать из ниспадающего списка нужный метод-обработчик.
Теперь рассмотрим обработчики событий выбора пунктов меню «Открыть...» и «Выполнить...». В них нужно вызвать диалоги выбора файлов типа TOpenDialog и вызвать соответствующую процедуру OpenFile или ExecuteFile. Наиболее важные свойства компонента типа TOpenDialog приведены в табл. 10. Для того чтобы выдать диалог на экран, необходимо использовать его метод Execute, возвращающий логическое значение, которое равно True, если пользователь выбрал файл.
Замечание
Для задания фильтра в компонентах для выбора файлов, можно вызвать редактор для свойства Filter, нажав кнопку с многоточием справа от его значения в инспекторе объектов. В нем имеется таблица с двумя колонками: в левой помещается описание варианта фильтра, а в правой - сам фильтр.
Теперь рассмотрим обработчики событий для пунктов меню, соответствующих файлам с расширениями dpr, pas и ехе. Для первых двух логично написать один общий обработчик, который загружает текстовый файл. Предполагая, что все лабораторные работы находятся в своих каталогах, например, так, как на рис. 1, будем формировать имя файла автоматически, составляя его из некоторого каталога, содержащего все лабораторные работы, например, 'H:\Work\Delphi', затем имени главного меню, например, 'Lаb1', и имени файла, указанного в тексте пункта меню, например, 'MainUnit.pas'. Основные процедуры в обоих обработчиках те же процедуры OpenFile и ExecuteFile.
В листингах 11-12 приведены тексты файлов проекта и модуля.