Преимущества
и особенности Delphi
Визуальная среда разработки
Delphi позволяет создавать
приложения интерактивным выбором необходимых компонентов из Component Palette и
перетягиванием их на форму. Основное же достоинство этого метода заключается в
том, что Delphi при этом самостоятельно создает необходимый код. Это напоминает
по своим возможностям Visual Basic и другие подобные языки программирования,
однако в случае Delphi вы получаете настоящий объектно - ориентированный код и
все возможности этого подхода, включая расширение функциональных возможностей
компонентов Delphi до уровня, удовлетворяющего ваши запросы. Вы можете
использовать компоненты Delphi, можете наследовать их и добавлять собственные
методы, а кроме того , вы можете использовать управляющие элементы Active X.
Оптимизирующий 32 - битовый компилятор
Одно из основных отличий Delphi
от других похожих инструментов визуальной разработки приложений заключается в
наличии действительно быстрого, эффективного компилятора. Компилятор выдает не
только сообщение о ошибках, но и огромное количество предупреждений и
подсказок, которые позволяют создавать более ясный код. Важным достоинством
является также выдача одновременно нескольких сообщений об ошибках, что
позволяет быстрее исправлять их.
Встречают по одежке…
Одна из больших проблемм
невизуального программирования - создание пользовательского интерфейса, т. е.
Решение всех вопросов взаимодействия с пользователем: что он будет видеть на
экране, какой внешний вид должны иметь кнопки. Зачастую больше времени занимает
именно разработка и создание "одежек", чем собственно рабочей части
программы. С другой стороны, при разработке не стоит забывать и о второй части
пословицы - "провожают по уму". Что стоит коммуникационная программа
с множеством меню, кнопочек и подсказок, анимированная и озвученная, если она
просто не знает, как работать с модемом? Delphi позволяет создавать программу,
вложив максимум сил и умения в ее рабочую часть, и всячески помогает вам в той
области, где не имеет конкурентов, - в области создания пользовательского
интерфейса. Потратив некоторое время на обучение работе Delphi, вы сможете
легко и просто создавать пользовательские интерфейсы, не сравнимые ни с какими
другими, созданные с помощью традиционного инструментария. Более того, они
будут не просто элегантны, но при необходимости будут обладать
"изюминкой" в виде разработанных вами новых управляющих элементов ,
что не займет у вас много сил и времени с таким помощником, как Delphi.
Расширяемость Delphi
Благодаря объектно -
ориентированной природе Delphi вы можете создавать свои компоненты не только с
нуля, но и используя богатый набор имеющихся компонентов. Помимо создания новых
компонентов , расширяемость Delphi включает также возможность интегрирования в
среду Delphi целых подпрограмм, называемых экспертами. Expert Interface
позволяет вам дополнять среду своими пунктами меню и диалоговыми окнами для
расширения ее функциональности.
Но основным
преимуществом Delphi является его среда программирования с визуальным
конструктором программ. Эта среда (вместе с объектной библиотекой VCL)
позволяет эффективно программировать под MS Windows, не отвлекаясь на
выяснение всех деталей Win API, а работать над логикой программы.
С точки зрения
профессионального программиста не менее важно то, что Delphi обладает
высокоразвитыми средствами для работы с базами данных. Базы данных позволяют
эффективно управлять информацией. Delphi позволяет эффективно создавать
приложения, работающие с базами данных.
Файл проектов является центральной точкой исходного кода проекта. Он сохраняется с расширением .DPR, и для каждого проекта может быть только один такой файл. Файл проектов связывает все файлы, из которых состоит приложение. При создании нового проекта создается файл PROJECT.DPR. В нем содержатся ссылки на все формы проекта и относящиеся к ним модули, а также код инициализации приложения. Если проект еще не был сохранен, то файл проекта существует только в оперативной памяти компьютера. Для каждого проекта содержимое файла может выглядеть следующим образом:
program
Projectl;
uses
Forms, Unitl in 'Unit1.pas' {Forml};
{$R
*.RES}
begin
Application.Initialize;
Application.CreateForm(TForml,
Forml);
Application.Run;
end.
Следует отметить, что использование модуля Forms обязательно для всех программ, создаваемых в среде Delphi, так как в этом модуле содержится описание класса TApplication, который лежит в основе всех Delphi-приложений. В приведенном примере первая строка содержит имя проекта. Это же имя используется в качестве имени приложения, если не задано другое. Оператор uses сообщает компилятору, что программа использует модуль с исходным кодом формы UNIT1.PAS, который описывает главную форму, включенную в данное приложение. Название формы (ее идентификатор) приведено в фигурных скобках. Следует иметь ввиду, что имя формы должно быть отлично от имени модуля, описывающего эту форму. Директива in указывает на то, что модуль является обязательной частью проекта, а не просто файлом, используемом в проекте. Директива $R подключает к проекту все необходимые ресурсы (файлы с расширением .RES). Само изображение формы хранится в виде Windows-ресурса и имеет расширение .DFM.
Далее начинается главный блок программы, в котором создается форма и содержится команда запуска основного цикла приложения. Вызов метода Application.Initialize приводит к инициализации самого приложения, представленного экземпляром класса TApplication. Метод Application.Create-Form загружает и инициализирует форму, a Application.Run начинает выполнение приложения и загружает главную форму. При добавлении к проекту новой формы или нового модуля. Del-phi автоматически добавляет соответствующий оператор uses в файл проекта. Аналогично добавляются методы Application.CreateForm, для загрузки и инициализации дополнительных форм, используемых в данном приложении.
Во избежание потери целостности приложения не рекомендуется вносить изменения в файлы проектов, т.к. среда Delphi автоматически управляет этими файлами.
Если несколько проектов объединены в группу, то для управления взаимосвязанными проектами используется файл группы проектов. Файлы групп проектов имеюг расширение .BPG.
В ситуации, когда группа проектов сосио-'.т из одного проекта, файл группы проектов существует в оперативной памяти компьютера. Это означает, что при сохранении файлов модуля и проекта файл группы проектов не записывается автоматически на диск. В этом случае файл группы проектов может быть сохранен на диске командой Save Project Group As контекстного меню окна Project Manager. BPG-файлы тоже можно редактировать самостоятельно, однако это не рекомендуется делать.
Файл формы. Для каждой формы, включаемой в проект, создается отдельный модуль (файл с исходным текстом, имеющий расширение .PAS). В этом файле хранится код, написанный в процессе разработки приложения. Код, создаваемый для формы в начале работы с новым проектом, имеет вид:
unit
Unitl;
interface
uses
Windows, Messages,
SysUtils, Classes,
Graphics, Controls, Forms,
Dialogs;
type
TForml
= class(TForm)
Private
{Private declarations}
public {Public declarations}
end;
var
Forml: TForml;
implementation {$R *.DFM} end.
По умолчанию файл называется UNIT 1.PAS , но его можно назвать любым другим именем, вроде MAIN.PAS. Имя файла автоматически записывается в первой строке программного кода. В списке используемых модулей uses
Windows, Messages, SysUtils, Classes,
Graphics,
Controls, Forms,
Dialogs; перечислены основные
модули, определяющие функциональность приложения. В секции
описания типов описывается класс, соответсвующей форме. В строке
Var Forml: TForml;
создается переменная, представляющая собой экземпляр класса.
Директива компилятора $R подключает двоичный образ формы, который по умолчанию называется UNIT1.DFM и используется для сохранения информации о внешнем виде главной формы. Иначе говоря, сама форма сохраняется в виде Windows-ресурса в файле с расширением .DFM. Этот бинарный файл подключается к проекту на этапе компиляции программы. Для того чтобы просмотреть этот файл, следует выполнить команду File \ Open и выбрать тип файла (*.DFM). Вот как выглядит файл формы, созданный Delphi:
object
Forml: TForml
Left
= 192
Top = 107
Width = 544
Height =
375
Caption = 'Forml’
Color = clBtnFace
Font.Charset = DEFAULT_CHARSET
Font.Color
= clWindowText
Font.Height = -11
Font.Name = 'MS Sans
Serif
Font.Style =
[ ] OldCreateOrder
= False PixelsPerlnch = 96
TextHeight = 13 end
Другими словами, файл формы - это список свойств всех компонентов, включенных в форму. Следовательно, при добавлении компонентов в форму данный файл будет дополняться описанием свойств этих компонентов. Необходимо заметить, что DFM-файл всегда имеет имя соответствующего PAS-файла.
Управление
проектами
В среде Delphi работа ведется с проектами - наборами файлов, из которых состоит приложение. Ими могут быть файлы с исходным текстом модулей (расширение .PAS), формы, являющиеся графическим представлением приложения (расширение .DFM), и сами файлы проектов (расширение .DPR). Следует отметить тот факт, что каждому файлу формы обязательно соответствует файл с исходным текстом модуля, но файл с исходным текстом модуля не обязательно должен иметь соответствующую ему форму.
Вначале работы над проектом среда разработки фактически предоставляет в распоряжение готовую программу. Эта программа состоит из одного окна с заголовком Form]. В окне Forml имеется системное меню, кнопки минимизации, максимизации, закрытия и восстановления. Для компилирования и запуска проекта на выполнение следует воспользоваться командой Run \ Run или нажать кнопку F9. Необходимо отметить одну из важных особенностей Delphi, состоящую в том, что процесс работы с программой (написание, компилирование, компоновка, выполнение, тестирование и отладка) осуществляется в одной и той же среде разработки. Следовательно, легко можно переходить от разработки к выполнению программы, что позволяет быстро протестировать результат работы.
Программный код стандартного приложения генерируется автоматически. На рис. 1.26 изображена стандартная программа, создаваемая при запуске Delphi и находящаяся в режиме выполнения.
Перед отображением на экране главного окна приложения создаются и сохраняются файлы, необходимые проекту. В частности такими файлами являются:
откомпилированный файл модуля;
откомпилированный файл проекта;
файлы исходных текстов;
файл проекта;
файл группы проектов;
файлы ресурсов;
файлы конфигурации;
резервные файлы.
По умолчанию все файлы сохраняются в подкаталоге PROJECTS основного каталога Delphi 5. Для изменения места размещения нужно указать соответствующие пути в диалоговом окне Projecr Options вкладка Directories/Conditionals (см. рис. 1.30). Необходимо обратить внимание на то, что файл с исходным кодом на языке Object Pascal, файл проекта и файл группы проектов при компилировании могут быть не записаны на диск. Однако при выполнении команды File \ Close на экране появится запрос о том, следует ли сохранять произведенные изменения. При положительном ответе на экране появится диалоговое окно Save Unit As (см. рис. 1.27). Это окно предназначено для задания имени файла модуля, а также выбора каталога, в котором будет сохранен файл. В строке имя файла следует указать имя, под которым файл будет сохранен на жестком диске. После чего нажать на кнопку Сохранить.
Затем выбрать команду File \ Save Project As . В результате будет открыто окно Save Project As, похожее на предыдущее. В окне нужно указать активный каталог
и имя файла проекта. Рекомендуется
все файлы одного проекта хранить в одном и том же каталоге. Каталог желательно выбирать, начиная работу
над новым проектом, чтобы впоследствии можно было сосредоточиться на разработке проекта, не
возвращаясь к вопросам выбора каталога хранения. Рассмотрим
файлы, из которых состоит проект, на примере автоматически созданного проекта.
Файл ресурсов. Двоичный файл, содержащий все необходимые для проекта ресурсы (пиктограммы, курсоры мыши, графические изображения или строки), называется файлом ресурсов. Такие файлы имеют расширение .RES и создаются компилятором автоматически. Название у них такое же, как и у файла проекта. Это означает, что если файл проекта называется PROJECT 1.DPR, то файл ресурсов - PROJECT I.RES.
Файл опций. Для каждого проекта создается файл опций, содержащий значения опций компилятора, компоновщика, названия рабочих каталогов, условные директивы и параметры командной строки. Эти файлы обновляются каждый раз при сохранении проекта и имеют расширение .DOF. В файле с расширением .DSK хранится информация о состоянии рабочего пространства, что позволяет восстанавливать внешний вид рабочей среды проекта. CFG-файл используется компилятором при трансляции и содержит установки конфигурации проекта.
Наряду с перечисленными, компилятор создает так называемые резервные копии файлов, первый символ в расширении которых - «тильда» (~).
• *.~DP - резервная копия файла проектов. Создается при повторном сохранении проекта;
• *.~ВР - резервная копия файла группы проектов. Создается при повторном сохранении файла группы проектов;
• *.~РА - резервная копия модуля проекта. Создается при повторном сохранении проекта, если в исходном коде модуля были сделаны изменения
• *.~DF - резервная копия файла формы. Создается, если DFM-файл был открыт в текстовом виде и в него были внесены изменения.
После компиляции программы получаются файлы с расширениями:
• DCU - скомпилированные модули (создаются для каждого файла с исходным текстом модуля);
• ЕХЕ - исполняемый файл.
Управление проектом
Как уже говорилось, вся информация,
относящаяся к текущей разрабатываемой
программе, объединяется в рамках
системы Delphi 7в один проект, который хранит
все необходимые настройки в
специальных файлах. Проектом управляет Менеджер
проекта — программа, входящая в
состав системы Delphi
7. В функции
Менеджера
входит визуальное представление
структуры проекта и его содержимого (это могут
быть не только файлы с исходными
текстами и файлы форм, но и любые другие
файлы). Менеджер проекта
дополнительно позволяет вести одновременно несколько
проектов, объединенных в одну
группу. Он вызывается командой View >- Project
Manager (Вид х Менеджер проекта) и
наглядно показывает структуру группы ProjectGroupl
В эту группу пока что входит
единственный проект Projectl, состоящий, в свою
очередь, из единственного модуля
Unitl (он включает форму MyForm и файл Unitl.pas
Упровление проектом 1 33
с исходными текстами, описывающими
работу этой формы). Тип результирующего
приложения, которое будет получено
в результате компиляции (это либо исполни-
мый код — файл .ЕХЕ, либо
динамическая библиотека — файл -DLL), указан полужир-
ным шрифтом. Для проекта,
созданного командой File >• New > Application
(Файл >•
Создать > Приложение), по
умолчанию считается, что он предназначен для получе-
ния исполнимого кода, поэтому в
Менеджере проекта полужирной строкой выделено
Projectl.exe.
Любой компонент из проекта можно
удалить, щелкнув на кнопке Remove (Удалить).
С помощью кнопки New (Создать)
можно добавить новый компонент как в проект,
так и в группу. Свойства любого из
объектов, доступных в Менеджере (от группы
проектов до отдельной формы), можно
изменить, щелкнув на значке объекта правой
кнопкой мыши. Контекстное меню
содержит набор пунктов, позволяющих выпол-
нить и настройку, и компиляцию, и
редактирование. Для быстрого перехода из Мене-
джера проекта к редактированию
конкретного объекта (исходного текста или формы)
достаточно дважды щелкнуть на значке
этого объекта.
К группе проектов можно добавлять
ранее созданные проекты. Это выполняется
командой Add Existing Project
(Добавить существующий проект) контекстного меню.
Ранее созданные формы и соответствующие им файлы с
исходными текстами
добавляются к конкретному проекту
командой Add (Добавить).
Структура проекта представлена в
виде ≪дерева≫. Это стандартный подход
к отобра-
жению иерархически организованной
информации в Windows.
Стандартны и
основ-
ные приемы по работе с подобными
≪деревьями≫: отдельные ≪листья* и ≪ветви≫
Создание программ для Windows
Использование визуальных компонентов
Компоненты первостепенной важности
расположены на панели Standard (Стандартные) палитры компонентов (рис. 2.1).
Они соответствуют основным
элементам управления Windows,
без которых не
обходится ни одна программа.
Все компоненты Delphi 7 хранятся в библиотеке визуальных компонентов Visual Component Library (VCL). Каждый из компонентов,а также форма (будущее окно) описаны соответствующими
классами Паскаля: к названию компонента добавляется буква Т;например, форма описывается классом TForm, кнопка (компонентButton} — классом TButton и так далее.
События и
реакции на них
Структура программы для Windows представляет собой набор
подпрограмм, каждая из которых ответственна за обработку конкретного события и
вызывается только при его получении. Программист сам решает, какие события в
программе требуется обрабатывать. В нашем примере необходимо реагировать только
на щелчок на кнопке. Системные
события: выбор
пункта системного меню, закрытие приложения — обрабатываются в программе,
созданной с помощью системы Delphi 7,
автоматически.
Подобный
подход к созданию программ называется событийно-ориентированным.
Обработчик щелчка на кнопке (метод
класса TMyForm) создается на форме так: выполняется двойной щелчок на этой
кнопке и Delphi 7 генерирует заготовку кода
подпрограммы, которая будет выполнять обработку щелчка.
procedure
TMyForm.ButtonlClick(Sender: TObject);
begin
end;
Автоматически созданное имя
процедуры — ButtonlClick. Ему предшествует имя класса TMyForm, к которому
относится данная процедура. Параметр Sender определяет, какой объект программы
вызывает данную подпрограмму. Хотя она будет вызываться автоматически при
щелчке на кнопке Buttonl, ее можно вызывать и непосредственно из текста
программы, как обычную подпрограмму. Например, чтобы проверить, является ли
вызов данного обработчика реакцией на нажатие
кнопки Buttonl, можно использовать
следующий условный оператор:
If Sender = Buttonl then ...
Второй способ формирования
обработчика события
Чтобы сформировать в программе
обработчик щелчка на кнопке, достаточно выполнить двойной щелчок на этой кнопке
в Проектировщике форм. Однако для большинства компонентов Delphi 7 имеются события,
обработчики которых невозможно создать подобным способом (например, Нажатие
клавиши или Изменение размера). Подготовить обработчик требуемого события можно
так.
·
Выберете
на форме нужный объект, к которому будет относиться рассматриваемое событие
(например
кнопку Buttonl).
·
В
Инспекторе объектов перейдите на вкладку Events (События).
·
Найдите
в списке событий строку с именем нужного события. В данном случае это событие
OnClick (При щелчке). Так как для объекта Buttonl обработчик уже создан, то в
строке
OnClick
должно располагаться имя обработчика ButtonlClick.
·
Дважды
щелкните на правой части соответствующей строки,
Система Delphi 7 автоматически сгенерирует нужный программный
код и переключится в редактор.
1. TMainMenu позволяет
Вам поместить главное меню в программу. При помещении TMainMenu на форму это
выглядит, как просто иконка. Иконки данного типа называют "невидимыми
компонентом", поскольку они невидимы во время выполнения программы.
Создание меню включает три шага: (1) помещение TMainMenu на форму, (2) вызов
Дизайнера Меню через свойство Items в Инспекторе Объектов, (3) определение
пунктов меню в Дизайнере Меню.
TPopupMenu позволяет создавать всплывающие меню. Этот тип меню
появляется по щелчку правой кнопки мыши на объекте, к которому привязано данное
меню. У всех видимых объектов имеется свойство PopupMenu, где и указывается
нужное меню. Создается PopupMenu аналогично главному меню.
TLabel служит для отображения текста на экране. Вы можете
изменить шрифт и цвет метки, если дважды щелкнете на свойство Font в Инспекторе
Объектов. Вы увидите, что это легко сделать и во время выполнения программы,
написав всего одну строчку кода.
TEdit - стандартный управляющий элемент Windows для ввода.
Он может быть использован для отображения короткого фрагмента текста и
позволяет пользователю вводить текст во время выполнения программы.
TMemo - иная форма TEdit. Подразумевает работу с большими
текстами. TMemo может переносить слова, сохранять в ClipBoard фрагменты текста
и восстанавливать их, и другие основные функции редактора. TMemo имеет
ограничения на объем текста в 32Кб, это составляет 10-20 страниц. (Есть VBX и
“родные” компоненты Delphi, где этот предел снят).
TButton позволяет выполнить какие-либо действия при нажатии
кнопки во время выполнения программы. В Delphi все делается очень просто.
Поместив TButton на форму, Вы по двойному щелчку можете создать заготовку
обработчика события нажатия кнопки. Далее нужно заполнить заготовку кодом:
procedure TForm1.Button1Click(Sender: TObject);
begin
MessageDlg('Are you
there?',mtConfirmation,mbYesNoCancel,0);
end;
TCheckBox отображает строку текста с маленьким окошком рядом. В
окошке можно поставить отметку, которая означает, что что-то выбрано. Например,
если посмотреть окно диалога настроек компилятора (пункт меню Options |
Project, страница Compiler), то можно увидеть, что оно состоит преимущественно
из CheckBox’ов.
TRadioButton позволяет выбрать только одну опцию из нескольких.
Если Вы опять откроете диалог Options | Project и выберете страницу Linker
Options, то Вы можете видеть, что секции Map file и Link buffer file состоят из
наборов RadioButton.
TListBox нужен для показа прокручиваемого списка. Классический
пример ListBox’а в среде Windows - выбор файла из списка в пункте меню File |
Open многих приложений. Названия файлов или директорий и находятся в ListBox’е.
TComboBox во многом напоминает ListBox, за исключением того, что
позволяет водить информацию в маленьком поле ввода сверху ListBox. Есть
несколько типов ComboBox, но наиболее популярен спадающий вниз (drop-down combo
box), который можно видеть внизу окна диалога выбора файла.
TScrollbar - полоса прокрутки, появляется автоматически в объектах
редактирования, ListBox’ах при необходимости прокрутки текста для просмотра.
TGroupBox используется для визуальных целей и для указания
Windows, каков порядок перемещения по компонентам на форме (при нажатии клавиши
TAB).
TRadioGroup используется аналогично TGroupBox, для группировки
объектов TRadioButton.
TPanel -
управляющий элемент, похожий на TGroupBox, используется в декоративных целях.
Чтобы использовать TPanel, просто поместите его на форму и затем положите
другие компоненты на него. Теперь при перемещении TPanel будут передвигаться и
эти компоненты. TPanel используется также для создания линейки инструментов и
окна статуса.
Это полный список объектов на первой странице Палитры Компонент. Если Вам нужна дополнительная информация, то выберите на Палитре объект и нажмите клавишу F1 - появится Справочник с полным описанием данного объекта.
Компонент Меню (TMainMenu)
Компонент TMainMenu предназначен
для добавления к программе главного меню, без которого не обходится практически
ни одно из приложений Windows.
Способ создания
Чтобы добавить к разрабатываемой
программе меню, надо выбрать на панели компонентов Standard (Стандартные)
компонент TMainMenu и поместить его на форме в произвольном месте (рис. 2.
Компонент TMainMenu — нееизуалъпый, в отличие от визуальных компонентов TEdit и TLabel, в
точности соответствующих своему внешнему виду в работающей программе. Это
означает, что хотя он виден на форме как небольшой квадрат, в окне созданной
программы в таком виде компонент не появится. Представление его на форме в
миниатюрном виде просто указывает на наличие в программе объекта, ответственного
за меню. А создается меню с помощью специального редактора.
Некоторые компоненты называются
невизуальными потому, что, во-первых, ряд элементов управления невозможно
разместить на форме без специальной подготовительной работы, а во-вторых, в
системе Delphi 7 имеется ряд компонентов, которые не
предназначены для отображения на экране, хотя их свойства можно настраивать с
помощью Инспектора объектов. Подобные компоненты используются, например, для
обращения к базам данных, для установки связи с Интернетом и прочего.
Редактор меню вызывается двойным
щелчком на объекте MainMenul. Первоначально меню пустое.
В Инспекторе объектов надо открыть
категорию Localizable (Настраиваемые) и в свойстве Caption
(Заголовок) ввести название первого
пункта, например стандартную команду &Файл с указанной
горячей клавишей, а затем нажать
клавишу ENTER.
Редактор меню переключится обратно
в проектируемое меню, где уже появится первый пункт.
Теперь надо опять нажать клавишу
ENTER, и система Delphi
7 переключится к
заголовку Caption для нового пункта. В него вводится очередное название
(например,&Сложить), опять нажимается клавиша ENTER, и цикл формирования
меню повторяется.
Чтобы вставить линию-разделитель, надо в свойстве Caption в первой позиции указать символ - (дефис).
Использование меню
Чтобы создать обработчик события,
возникающего при выборе одного из пунктов меню, надо в Редакторе меню дважды
щелкнуть на соответствующем пункте, например на пункте Выход. Как и в случае
кнопки, система Delphi 7 автоматически создаст новый метод.
procedure
TMyForm.N4Click(Sender: TObject);
begin
end;
N4 — это идентификатор пункта меню
Выход внутри программы. В описании класса
TMyForm он (наряду с другими
пунктами: N1, N2, N3) декларирован так:
N4: TMenuItem;
Другие способы завершения
программы
Рекомендованный разработчиками Delphi 7 способ завершения программы — это выполнение
команды
Application.Terminate;
Переменная Application — глобальная
переменная, доступная в любой программе, написанной в среде Delphi 7. Она имеет тип TApplication и
содержит базовый набор полей и методов, характерных для любой программы Windows. В частности, вызов метода Terminate
приводит к генерации сообщения Windows PostQuitMessage,
которое ставится в очередь сообщений (то есть, программа завершит работу не
сразу).
Вложенный
вызов обработчика
Чтобы выполнить сложение чисел,
введенных в поля Editl и Edit2, надо выбрать пункт меню Сложить. При щелчке на
нем в Проектировщике форм будет создан соответствующий обработчик.
procedure
TMyForm.N2Click(Sender: TObject];
begin
end;
Повторно писать ранее созданный код
(метод ButtonlClick) не имеет смысла. Проще и правильнее вызвать метод
ButtonlClick напрямую, передав ему параметр Sender.
procedure TMyForm.N2Click(Sender г TObj ect);
begin
ButtonlClick(Sender)
end ;
Обработка щелчка мыши
Управление большинством программ Windows осуществляется с помощью мыши. Помимо
стандартных действий с элементами управления, мышь также используется для самых
разных дополнительных операций (например, для вызова контекстного меню при
щелчке правой кнопкой). В системе Delphi 7 имеется
возможность обработки фактического щелчка мышкой на объекте. Такая возможность
используется, когда важно просто среагировать на щелчок, не анализируя
координаты
указателя. Для этого обрабатывают
событие OnClick, которое чаще всего используют
в таких объектах, как кнопка или
переключатель, где знание точных координат
указателя мыши не обязательно.
Такой подход далеко не всегда
устраивает разработчика, поэтому в Delphi 7
имеются
еще два события: OnMouseOown (При
нажатии кнопки мыши) и OnMouseUp( При отпуска-
нии кнопки мыши). Они содержат
подробную информацию о параметрах щелчка:
координаты указателя в рамках
клиентской области объекта, на котором был выпол-
нен щелчок, тип щелчка (одинарный
или двойной), какая кнопка мыши была нажата/
отпущена и состояние системных
клавиш SHIFT, ALT и CTRL
Обработчики этих событий отличаются
только названиями, списки их параметров
полностью совпадают.
procedure
TMyForm.ButtonlMouseDown
(
Sender : TObject ; Button : TMouseButton ;
Shift:
TShiftState,- X, Y: Integer);
Tип TMouseButton является
перечислимым типом и содержит три значения: mbLeft,mbRight, mbMiddle (признаки
использования, соответственно, левой, правой и средней кнопок мыши). Тип
TShiftState представляет собой множество: так как можно выполнить, например,
двойной щелчок, одновременно удерживая нажатыми клавиши ALT и SHIFT, необходимо
проверять комбинации допустимых значений (табл. 2.1).
type
TShiftState = set of
(ssShift,
ssAlt, ssCtrl,
ssLeft,
ssRight, ssMiddle, ssDouble) ;
ssShift Нажата клавиша SHIFT
ssAlt Нажата клавиша ALT
ssCtrl Нажата клавиша CTRL
ssLeft Нажата левая кнопка мыши
ssRight Нажата правая кнопка мыши
ssMiddle Нажата средняя кнопка мыши
ssDouble Выполнен двойной щелчок
При обработке щелчка мыши правильнее анализировать событие OnMouseUp, а не событие OnMouseDown. При отпускании кнопки соответствующее событие генерируется всегда один роз, а при нажатии кнопки Windows генерирует сообщение о нажатии непрерывно, что приводит к многократному вызову обработчика события OnMouseDown.
Компонент Контекстное меню
(TPopupMenu)
Контекстное меню, вызываемое в
любом грамотно сделанном приложении Windows по щелчку
правой кнопки мыши, является стандартной и удобной возможностью многих
программ. Компонент TPopupMenu (Всплывающее меню) предназначен для создания
именно таких контекстных меню.
После того как компонент TPopupMenu
размещен на форме (он почти не отличается от компонента
TMainMenu и также является
невизуальным), структура будущего меню формируется способом, описанным при
создании строки меню.
Единственное отличие состоит в том,
что в контекстном меню не может быть нескольких разделов верхнего уровня, так
как все его пункты располагаются в одном вертикальном столбце.
Вызов осуществляется с помощью метода Popup()
с двумя параметрами — координатами верхнего левого угла меню. Только
указываются эти координаты в экранной системе отсчета, а не в границах
клиентской области программы. Чтобы указать корректное значение координат, надо
добавить к ним смещение, определяющее начало клиентской части формы.
К сожалению, использовать свойства
формы Left и Тор, определяющие ее левую и верхнюю границы па экране (значения
эгим свойствам задаются автоматически при перемещении формы на экране в
Проектировщике форм) не удастся, потому что верхняя граница не учитывает
дополнительной высоты строки заголовка и панели командных кнопок. Правильный
подход состоит в том, чтобы пересчитать экранные координаты точки щелчка в
координаты клиентской области с помощью метода формы GetClientOrigin. Эта
функция обращается к стандартным функциям Windows и
возвращает корректное значение смещения. Результирующее значение имеет тип
TPoint (Координатная точка), представляющий собой запись из двух элементов: X и
Y.
Итак, чтобы в рассматриваемом примере
вызвать меню и показать его в месте щелчка мышкой (рис. 2.8), надо
предварительно определить сдвиг клиентской области относительно верхнего левого
углаэкрана. проверить, была ли нажата правая кнопка мыши,
и обратиться к методу Popup:
procedure
TMyForm. FormMouseUp (Sender : TObject;
Button;
TMouseButton;
Shift:
TShiftState; X, Y: Integer);
var
P: TPoint;
begin
P
:= GetClientOrigin;
if
Button = mbRight then PopupMenul.Popup(P.X+X,P.Y+Y);
end;
С помощью кнопки New (Создать)
можно добавить новый компонент как в проект,
так и в группу. Свойства любого из
объектов, доступных в Менеджере (от группы
проектов до отдельной формы), можно
изменить, щелкнув на значке объекта правой
кнопкой мыши. Контекстное меню
содержит набор пунктов, позволяющих выпол-
нить и настройку, и компиляцию, и
редактирование. Для быстрого перехода из Мене-
джера проекта к редактированию
конкретного объекта (исходного текста или формы)
достаточно дважды щелкнуть на значке
этого объекта.
К группе проектов можно добавлять
ранее созданные проекты. Это выполняется
командой Add Existing Project
(Добавить существующий проект) контекстного меню.
Ранее созданные формы и соответствующие им файлы с
исходными текстами
добавляются к конкретному проекту
командой Add (Добавить).
Структура проекта представлена в
виде ≪дерева≫. Это стандартный подход
к отобра-
жению иерархически организованной
информации в Windows.
Стандартны и
основ-
ные приемы по работе с подобными
≪деревьями≫: отдельные ≪листья* и ≪ветви≫
Создание программ для