программирование :: delphi

От Delphi 4 к Delphi 5 часть 2



От Delphi 4 к Delphi 5 Меню Delphi

Прежде чем рассмотреть процесс создания меню для приложений, рассмотрим меню Delphi и возможности, которые оно предлагает (рисунок 1). Рисунок 1, в верхней части показано меню Delphi 4, ниже показано меню Delphi 5. Строка меню является неизменной.

Можно настроить по своему усмотрению содержимое раздела, например, раздел меню Tools.

Для этого необходимо открыть меню Tools (инструментальные средства), из раскрывшегося списка необходимо выбрать команду Configure Tools. После щелчка левой кнопкой мыши по команде Configure Tools откроется диалоговое окно Tool Options (выбор инструментальных средств). После нажатия кнопки Add (добавить) откроется окно Tools Properties (свойства инструментов). Используя панель с текстовыми полями Title (название) и Program (программа), внести название необходимой программы. В списке Tools появится выбранная программа.

Используя кнопку Browse (просмотр), можно найти нужную программу. После ее выделения необходимо нажать кнопку Открыть, это избавит вас от необходимости вводить имя программы в окна Tools Properties и от ошибок при вводе. Используя кнопку Macros и Insert, можно добавить макросы из предложенного списка. При необходимости удаления ненужного инструмента используется кнопка Delete после выделения инструмента.

Раздел меню File.

На рисунке 2 показан раздел меню File для Delphi 4, Delphi 5.

Для работы с проектами используются команды New, New Application, Open, Reopen, Save Project, Save All, Close All. С файлами исходного кода работают команды New, New Form, Open, Reopen, Save, Save As, Close, Print.

Основной командой является команда File/New, которую можно использовать для начала работы с новым приложением, она позволяет создавать новые элементы любого вида: формы, приложения, модули данных и т.д. из открывающегося диалогового окна New Items (рисунок 3).

Это диалоговое окно представляет собой хранилище объектов. В случае выбора готовой модели из New Items возможно использовать копию имеющегося шаблона или унаследовать элемент из соответствующего диалогового окна. В данном случае вы будете иметь возможность работать над проектом или формой с готовыми компонентами и кодом. Основываясь на их базу, можно построить свою программу после соответствующих изменений. Окно New Items имеет четыре предопределенных страницы, содержание которых изменить нельзя (New, Active X, Multitier, Your project). Содержание остальных страниц Forms, Dialogs, Projects, Business может изменяться пользователем.

Команда New Application - создать новый проект. По умолчанию новый проект создается с пустой формой, но вы можете изменить его, задав в качестве проекта по умолчанию какой-то из проектов, находящихся в хранилище New Items.

Команда New Form включает в текущий проект новую форму, по умолчанию это пустая форма, но вы можете изменить режим по умолчанию, выбрав форму из хранилища New Items.

Команда New Frame - создать новый фрейм. Фрейм - это новый вид объектов, представляет собой панель, на которой могут располагаться другие компоненты. Главное отличие от других панелей - это механизм наследования. Благодаря этому появляются возможности создания иерархии панелей. Фрейм имеет собственный модуль кода, отдельный от модулей форм.

Команда Open позволяет открыть файл модуля, проекта или текстовый файл.

Команда Open Project позволяет открыть существующий проект или группу проектов.

Для того чтобы открыть проект или файл исходного кода, которым вы пользовались недавно, можно воспользоваться командой File/Reopen. Данная команда имеет каскадированное меню со списком файлов, которые использовались недавно.

Команда Save позволяет сохранить текущий модуль. Если раньше модуль был сохранен, то данная команда сохраняет его без запроса под тем же именем. В случае если не было первого сохранения на диске, команда работает как Save As..., предлагая ввести имя файла. Сохранение модуля предполагает сохранение файла .pas и всех файлов связанной с ним формы.

Команда Save As позволяет сохранить текущий модуль под новым именем.

Команда Save Project As - сохранить текущий проект под новым именем, имена модулей входящих в проект не изменяются.

Команда Save All - сохранить текущий проект и все его файлы.

Команда Close - закрыть текущий модуль.

Команда Close All - закрыть все файлы текущего проекта или группы.

Use Unit позволяет вам сформировать оператор uses. Когда вы находитесь в режиме Редактора кода, выбираете команду Use Unit - появляется диалоговое окно, позволяющее вставить код текущего модуля в раздел implementation оператор uses для того модуля (unit), который необходимо использовать для организации его вызова. Эта операция заменяет ручную операцию. Использование данной операции необходимо для организации взаимодействия форм в приложении (модальные, немодальные формы и т.д.).

Команда Print - напечатать текст модуля или форму. После выделения формы или модуля и выбора команды Print появится диалоговое окно с опциями печати.

Команда Exit - выход.

Раздел меню Edit.

Меню редактирования для версий Delphi 4, Delphi 5 одинаково (рисунок 4).

Меню Редактирования содержит команды Copy, Paste, Cut, Undo, Redo, очень необходимые для редактирования текста и для работы с компонентами. Можно копировать текст кода из вызванной процедуры Help, вставив его для своего приложения.

Если выделить компонент на форме и его скопировать, а затем открыть Редактор кода и вставить в выбранное место, то помещенное в буфер обмена изображение компонента в редакторе кода превратится в текстовое описание. После проведения редактирования текстовой части, внесения нужных изменений можно скопировать текстовую часть и вставить в форму, предварительно активизируя ее - получим новое изображение компонента или его новое положение на форме.

Меню Edit содержит команды под общим заголовком Align to Grid, позволяющее выравнивать компоненты на форме относительно друг друга, помещать компоненты на передний или задний план, изменять размеры и масштаб.

Команда Undo позволяет отменить предыдущую операцию. Если вы добавили в проект код, то команда будет называться Undo. Если вы удалили компонент или какой-то код (Delete), то данная команда будет называться Undelete.

Команда Redo отменяет команду Undo.

Командой Cut можно вырезать в буфер обмена (Clipboard) фрагмент текста или компоненты.

Команда Paste вставляет содержимое буфера обмена в форму или в текст.

Команда Delete позволяет удалять компоненты или фрагмент текста.

Команда Select All - выделить все - позволяет выделять все компоненты на текущей форме или весь программный код в текущем модуле.

Команда Align to Grid выравнивает компоненты по узлам сетки.

Команда Bring to Front позволяет помещать выделенный компонент поверх остальных.

Команда Send to Back позволяет поместить компонент или группу позади других компонентов.

Команда Align вызывает диалоговое окно Alignment (выравнивание).

Команда Size позволяет изменять размеры компонента до заданных значений высоты и ширины.

Команда Scale позволяет пропорционально изменять масштаб всего, что расположено на форме.

Команда Tab Order позволяет изменять порядок фокусировки компонентов на форме после компиляции приложения. Порядок фокусировки первоначально устанавливается Delphi, соответствуя порядку, в котором вы добавляете компоненты к форме. Вы можете изменить это положение, изменяя в диалоговом окне TabOrder собственность каждого компонента. Таким образом, используя клавишу "Табуляция", фокусировка компонентов будет идти в том порядке, который вы определили.

Команда Creation Order... позволяет изменять фокусировку для не визуальных компонентов, таких, как, например, Open Dialog, Timer и т.д.

Команда Flip Children позволяет изменить положение компонентов на форме на зеркальное положение.

Команда Lock Controls запрещает или разрешает перемещение компонентов на этапе редактирования.

Создание меню для приложения

Так как разговор зашел о меню, рассмотрим пример создания меню для вашего приложения.

Основное меню формы во время выполнения программы представляется посредством строки меню, находящейся внутри окна формы непосредственно под строкой заголовка формы. Основное меню может состоять из одного или нескольких стандартных пунктов, таких как File, Help, Edit, которые являются точками входа в соответствующее выпадающее меню.

Среда Delphi включает специальный редактор для меню Menu Designer (разработчик меню). Для его вызова поместим компонент меню на форму со страницы Standard палитры компонентов, выбрав компонент MainMenu.

Причем его можно поместить на любое место формы. После компиляции программы меню разместится на заданном для нее месте правильно, а именно - под заголовком формы.

Menu Designer позволяет создавать меню из шаблона. Для вызова разработчика меню необходимо на выделенном компоненте меню, помещенном на форму, щелкнуть правой кнопкой мыши - откроется всплывающее меню с командами, верхняя среди них - команда Menu Designer (рисунок 5). Щелкнем по ней левой кнопкой мыши - откроется диалоговое окно Form1.MainMenu (диалоговое окно Дизайнера меню). Дизайнер меню - это специализированный редактор свойств компонента MainMenu. Щелкнув правой кнопкой мыши на активном прямоугольнике диалогового окна Form1.MainMenu, откроется всплывающее меню. Выберем в нем команду Insert From Template. Откроется диалоговое окно Insert Template (вставить шаблон). Из предложенного списка можно выбрать любое уже готовое меню для использования его в своем приложении (рисунок 6). Delphi содержит два разных выпадающих меню File, меню Edit, меню Window, два меню Help, а также полный шаблон полоски меню, который содержит четыре категории меню File, Edit, Help, Window. Общее свойство меню - наличие подчеркнутой буквы. Эту букву (чаще всего - первую букву текста) можно использовать для выбора меню с помощью клавиатуры.

Используя клавишу Alt и клавишу с буквой (подчеркнутой в меню) одновременно, на экране появляется соответствующее выпадающее меню. Если еще раз внимательно посмотреть на рисунок 1, где показано меню Delphi, то можно увидеть символ подчеркивания у всех первых букв команд меню.

Естественно, все элементы полоски меню должны иметь разные подчеркнутые символы. Это правило касается и элементов отдельного выпадающего меню. Элементы в разных выпадающих меню могут иметь одинаковую подчеркнутую букву.

Для определения подчеркнутой буквы необходимо поместить перед ней символ амперсанта (&). Например, &Edit, &Undo и т.д. Символ (&) амперсант можно поместить и в любом месте слова. Для этого необходимо использовать свойство Caption инспектора объектов для данной выделенной команды заголовка меню или выделенной команды, входящей в состав данного меню.

Элементам меню можно назначать "горячие" клавиши. Чтобы связать "горячую" клавишу с элементом меню (не существует "горячих" клавиш для команды заголовка выпадающего меню), необходимо указать значение свойства ShortCut на странице Properties инспектора объекта для активизированной команды меню, выбрав одну из стандартных комбинаций: Shift или Ctrl + буквенное значение клавиши. Возможно задание значений в комбинации Ctrl + Alt + буквенное значение клавиши, а также другие комбинации клавиш, которые Вы можете выбрать из свойства ShortCut. Предложенный список достаточно объемный. Можно ввести в программу "горячие" клавиши без обязательного отображения меню на форме после компиляции. Для этого можно создать выпадающее меню, связать его с формой, а затем для всех элементов установить свойство Visible (видимый) в False (ложь) и добавить соответствующие "горячие" клавиши. В данном случае меню не будет видно на форме, но "горячие" клавиши работать будут.

А теперь перейдем к примеру.

Приведу пример программы решения квадратного уравнения

ах2 +bx +c =0,

корни уравнения определяются из выражения

X1,2 =

1. Загрузим Delphi. Для вновь созданной формы, используя свойство Caption инспектора объекта, напишем заголовок "Решение квадратного уравнения". Для связывания меню с формой выберем компонент меню MainMenu со страницы Standard палитры компонентов. На форме появится пиктограмма меню, которая изначально пуста.

2. Чтобы определить элементы меню, необходимо открыть Редактор меню, являющийся специальным редактором свойств меню. Проведите двойной щелчок левой кнопкой мыши по пиктограмме MainMenu1. Откроется окно Дизайнера меню.

3. Для выделенного (активизированного) элемента в свойстве Caption Инспектора объектов наберем заголовок "Уравнение". После набора текста нажмем клавишу Enter. Если вы хотите открывать меню сочетанием клавиш, необходимо поставить знак амперсанта перед одной из букв, например, перед первой буквой. После нажатия клавиши Enter новый компонент добавляется к меню на форме слева и справа. Таким образом, можно не только наращивать наше меню до необходимого количества команд для нашего заголовка "Уравнение", но и сформировать новое меню. Для нашего примера ограничимся одной командой в списке меню. Введем название для вновь появившейся команды, воспользовавшись инспектором объекта. Введем название "Корни". Назначим "горячие клавиши" для команды "Корни", используя свойство ShortCut. Например, выберем сочетание клавиш Ctrl + A.

4. Поместим на форму три компонента Edit на форму. Edit1, Edit2, Edit3 для ввода данных а, b, с для решения уравнения. Выровняем их на форме по своему усмотрению. Для компонентов Edit в инспекторе объекта на вкладке Properties найдем свойство Text. Удалим надпись в строке Edit1 и введем число 1, удалим надпись Edit2 и введем число 5, удалим надпись Edit3 и введем число 4. Все это проделано для того, чтобы не были пусты окна редакторов, иногда заранее введенные числа являются ориентиром для пользователей не знакомых с вашей программой, а также для исключения зависания программы из-за запуска ее при пустых окнах редактирования.

5. Поместим на форму компоненты Edit4, Edit5 для вывода результатов расчетов.

6. Поместим на форму пять компонентов Label, разместим их на форме над компонентами Edit.

Используя свойство Caption инспектора объекта для выбранного компонента Label1...Label5, введем соответствующие надписи "Ввод а", "Ввод b", "Ввод с", "Х1=","Х2=".

7. Напишем код, приведенный ниже для описания переменных. Запишем его после блока Implementation модуля Паскаля.
implementation {$R *.DFM} var A,B,C,D,X1,X2:Real;
8. Введем код для компонентов Edit1, Edit2, Edit3, чтобы можно было вводить числовые значения положительные и отрицательные. В случае нажатия на клавишу с буквой, ввод в окно редактора не происходит и Windows посылает звуковой сигнал. Активизируя последовательно компоненты Edit, необходимо щелкнуть левой кнопкой мыши по вкладке Events инспектора объекта. В раскрывшемся списке выберем процедуру Edit1.KeyPress. Введем следующий код между служебными словами begin и end.
if not (key in ['-',',','0'..'9',#8]) then begin Key:=#0; MessageBeep (Cardinal(-1));
9. Выберем команду "Корни", для этого щелкнем по пиктограмме MainMenu. Активизируем команду"Корни". Для данной команды назначим "горячие клавиши". Для этого в инспекторе объекта выберем свойство ShortCut и из списка выберем сочетание клавиш Ctrl + A. Справа от надписи Корни появится надпись Ctrl + A. Изменим имя команды Корни в Окне инспектора объекта на Korny, не забудьте нажать клавишу Enter. То есть дадим имя сходное с процедурой, выполняемой после щелчка левой кнопкой мыши по команде Корни. 10. Для выполнения решения нашего примера и вывода результатов в окна редактирования Edit4, Edit5 дважды щелкнем левой кнопкой мыши по выделенной команде "Корни". В открывшемся окне Редактора кода введем следующий код между служебными словами begin и end:
A:=StrToFloat(Edit1.Text); B:=StrToFloat(Edit2.Text); C:=StrToInt(Edit3.Text); D:=B*B-4*A*C; if D>0 then begin D:=Sqrt(D); A:=2*A; X1:=(-B+D)/A; X2:=(-B-D)/A; Edit4.Text:=FloatToStr(X1); Edit5.Text:=FloatToStr(X2); end else MessageDlg(('Корни уравнения мнимые'),mtInformation,[mbOk],0) end;


11. Исходный текст для модуля Uravnenie_ имеет следующий вид:
it Uravnenie_; interface uses Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, Menus; type TForm1 = class(TForm) MainMenu1: TMainMenu; N1: TMenuItem; Korny: TMenuItem; Edit1: TEdit; Edit2: TEdit; Edit3: TEdit; Edit4: TEdit; Edit5: TEdit; Label1: TLabel; Label2: TLabel; Label3: TLabel; Label4: TLabel; Label5: TLabel; procedure Edit1KeyPress(Sender: TObject; var Key: Char); procedure Edit2KeyPress(Sender: TObject; var Key: Char); procedure Edit3KeyPress(Sender: TObject; var Key: Char); procedure KornyClick(Sender: TObject); private { Private declarations } public { Public declarations } end; var Form1: TForm1; implementation {$R *.DFM} {описание переменных} var A,B,C,D,X1,X2:Real; {разрешение ввода положительных и отрицательных чисел в окна редактирования строк текста для окна Edit1 исключим 0 для исключения деления на ноль} procedure TForm1.Edit1KeyPress(Sender: TObject; var Key: Char); begin if not (key in ['-','1'..'9',#8]) then begin Key:=#0; MessageBeep (Cardinal(-1)); end; end; procedure TForm1.Edit2KeyPress(Sender: TObject; var Key: Char); begin if not (key in ['-','0'..'9',#8]) then begin Key:=#0; MessageBeep (Cardinal(-1)); end; end; procedure TForm1.Edit3KeyPress(Sender: TObject; var Key: Char); begin if not (key in ['-','0'..'9',#8]) then begin Key:=#0; MessageBeep (Cardinal(-1)); end; end; procedure TForm1.KornyClick(Sender: TObject); begin { преобразование символов в числа с плавающей запятой} A:=StrToFloat(Edit1.Text); B:=StrToFloat(Edit2.Text); C:=StrToInt(Edit3.Text); D:=B*B-4*A*C; If D>0 then begin D:=Sqrt(D); A:=2*A; X1:=(-B+D)/A; X2:=(-B-D)/A; { обратное преобразование числа с плавающей запятой в символ} Edit4.Text:=FloatToStr(X1); Edit5.Text:=FloatToStr(X2); end { перед else ; не ставится} else ^t{Выдача диалогового окна с сообщением } MessageDlg(('Корни уравнения мнимые'),mtInformation,[mbOk],0) end; end.
На рисунке 7 представлен результат работы программы Уравнение. Необходимо отметить, что для удобства работы с вновь созданными проектами вам необходимо постоянно заботиться о создании новых папок для хранения проектов. Причем этот процесс не требует длительных затрат, а вы будете ограждены от путаницы в файлах вновь созданных проектов. Для этого необходимо перед сохранением файла модуля и файла проекта щелкнуть по третьей кнопке справа диалогового окна сохранения файлов. Установите себе за правило после создания приложения с пустой формой сразу сохранять его в созданной папке. Частое сохранение вашего проекта поможет вам избежать любых неожиданностей после сбоя компьютера или Delphi, вызванных техническими причинами или недопустимыми действиями вашего собственного еще не отлаженного приложения при его запуске. Сохранить проект можно командой Save All. Удобно также использовать соответствующие быстрые кнопки. При первом сохранении Delphi предложит вам сохранить файл модуля, а затем файл проекта. Литература:

1. Марко Канту. Delphi 2 для Windows 95/NT. Москва. ООО "Малип". 1997 г.

2. Джон Матчо. Дэвид Р. Фолкнер. Delphi. Москва. БИНОМ. 1995 г.

3. Эндрю Возневич. Delphi. Освой самостоятельно. Москва. Восточная книжная компания. 1996 г.

4. В.В.Фаронов. Delphi 3. Учебный курс. Москва. Издательство Нолидж. 1998 г.

5. А. Я. Архангельский. Программирование в Delphi 5. Москва. ЗАО "Издательство Бином". 2000 г.

Владимир Скуратов (c) компьютерная газета





© компьютерная газета