От Delphi 4 к Delphi 5 часть 13
От Delphi 4 к Delphi 5
Палитра компонентов.
Страница DECISION CUBE.
На этой странице (рисунок 1) сосредоточены компоненты, с помощью которых реализуется специальный доступ к многомерным наборам данных. Специфика доступа заключается в том, что пользователь программы получает средства манипуляции многомерным массивом данных и может просматривать, суммировать и упорядочивать их по разным измерениям без выполнения повторных запросов. Для Delphi 4 и Delphi 5 страница Decision Cube одинакова.
DecisionCube (куб решений) основной компонент для работы с многомерными наборами данных.
DecisionQuery (запрос) осуществляет выборку данных для DecisionCube.
DecisionSource (источник данных) служит посредником между DecisionQuery и интерфейсными элементами DecisionCube.
DecisionPivot (навигатор) предоставляет пользователю средства управления многомерными наборами данных.
DecisionGrid (таблица решений) предоставляет данные, полученные от DecisionQuery, в табличной форме.
DecisionGraph (график решений) предоставляет данные, полученные от DecisionQuery, в графической форме.
Автономный EXE-модуль Windows.
Чтобы запустить созданную вами программу на компиляцию, вы выбираете команду Run из главного меню Run среды Delphi. В течение некоторого времени программа компилируется и компонуется. Конечным этапом является создание автономного exe- модуля, который не нуждается ни в какой поддержке во время его выполнения, кроме Windows.
По команде Run среда Delphi проделывает следующие действия: транслирует исходный код, составляя ваш проект, в пригодные для компоновки двоичные объектные файлы ( .DCU), объединяет их вместе для формирования заключительного исполнимого (.EXE) файла. После этого происходит запуск вашей программы.
Необходимо отметить, что окно инспектора объекта исчезает, перед тем как появляется ваша форма, принадлежащая сформированному приложению. Среда Delphi входит в режим исполнения, в заголовке главного окна Delphi появляется слово " Running ". В течение тестового прогона программы инспектор объекта обычно недоступен. Однако вы можете сделать паузу в выполнении программы или временный останов ее, устанавливая контрольные точки в исходном коде внутри Редактора кода. В этом случае, приостановив программу, вы можете исследовать значения свойств переменных, а также использовать другие встроенные средства отладки, которые обеспечивает Delphi.
Таким образом, процесс создания исполняемого exe-файла для приложения включает три этапа.
Первый этап предполагает создание элементов визуального интерфейса (выбор компонентов, размещение их на форме), в частности, основной формы программы.
Второй этап предполагает написание кода Object Pascal для выполнения необходимых для формы действий.
Третий этап предполагает компиляцию исходного кода Object Pascal и ресурсов формы в исполнимый файл (.EXE), который может запускаться в Windows как отдельная программа.
Причем на последнем этапе создаются некоторые новые откомпилированные файлы модуля, имеющие расширения . DCU и . DLL . Файл . DCU (Delphi Compiled Units — откомпилированные модули Delphi) содержит объектный код соответствующего (.PAS) файла модуля. Компилятор Delphi создает его, когда вы выполняете одну из команд Run, Compile, Build All из меню Run. Delphi использует файлы. DCU, когда создает заключительную исполнимую программу (в фазе, называемой связывание и компоновка).
Откомпилированные файлы Динамических библиотек — это второй тип конечного исполняемого файла, который может создавать Delphi. Расширение для этого файла — . DLL (Dynamic Link Library). Он представляет собой откомпилированный модуль Windows, который может использоваться одновременно многими программами Windows.
Файлы DLL — это один из наиболее важных элементов Windows, они необходимы, прежде всего, для того, чтобы предоставлять услуги прикладным программам.
Основная часть собственно операционной системы Windows состоит из трех DLL, называемых KERNEL, USER, GDI. Эти библиотеки содержат код и данные для Интерфейса прикладного программирования Windows (API).
Итак, программы приложения Delphi — это исполняемые файлы, которые состоят из одного или нескольких форм или окон. Программа взаимодействует с пользователем во время выполнения, получает сообщения из очереди сообщений, поддерживаемой Windows в интересах данной программы.
В Delphi, начиная с третьей версии, можно разрабатывать прикладные программы двух видов — автономные выполняемые файлы . exe и программы с поддержкой пакетов ( packages ) времени выполнения. В последнем случае размер выполняемого файла существенно (на порядок и более) сокращается, но зато вы должны поставлять пользователю не только выполняемый модуль, но и файлы поддерживающих его пакетов. Есть свои достоинства и недостатки в использовании программы с поддержкой пакетов. Но, во всяком случае, во время отладки имеет смысл включать поддержку пакетов времени выполнения. Это существенно сократит размеры выполняемых файлов и сбережет достаточно много дискового пространства.
Структура проекта.
Файл проекта представляет собой программу, написанную на языке Object Pascal и предназначенную для обработки компилятором. Она автоматически создается Delphi и содержит лишь несколько строк. Чтобы увидеть их, необходимо раскрыть команду главного меню Project, далее щелкнуть левой кнопкой мыши по команде View Source. Delphi покажет окно кода с закладкой Project1 (рисунок 2).
В окне кода жирным шрифтом выделяются зарезервированные средой Delphi слова, а курсивом — комментарии. Текст этой программы начинается словом program и заканчивается словом end и точкой за ним. Сочетание end со следующей за ней точкой называется терминатором программной единицы. Если в тексте программы встретится такой терминатор, компилятор прекращает анализ программы и игнорирует оставшуюся часть текста.
Важную роль в Object Pascal играют зарезервированные слова, придавая тексту, написанному почти на естественном языке, читабельность, что существенно облегчает процесс запоминания правописания слов и понимание проводимых действий. Каждое зарезервированное слово несет в себе условное сообщение для компилятора, который анализирует текст программы так же, как и мы читаем его: слева направо и сверху вниз.
Комментарии не предполагают действий для компилятора, и он их игнорирует. Они очень важны для программиста, который с их помощью поясняет те или иные места программы. Наличие комментариев в тексте программы делает ее понятнее и позволяет легко вспомнить особенности реализации программы, которую вы написали.
В Object Pascal комментарием считается любая последовательность символов, заключенная в фигурные скобки. В приведенном выше тексте строка {$R *.RES} не является комментарием. Этот специальным образом написанный фрагмент кода называется директивой компилятора (в данном случае — указание компилятору на необходимость подключения к программе так называемого файла ресурсов). Директивы начинаются символом $, который стоит сразу за открывающейся фигурной скобкой.
В Object Pascal в качестве указателей комментария могут также использоваться пары символов (*,*) и //. Скобки (*,*) используются подобно фигурным скобкам, то есть комментарием считается находящийся в них фрагмент текста, а символы // указывают компилятору, что комментарий располагается за ними и продолжается до конца текущей строки.
Слово program, следующие за ним имя программы и точка с запятой образуют заголовок программы. За ним следует раздел описаний, в котором программист (или Delphi) описывает, например, используемые в программе идентификаторы. Идентификатором обозначаются элементы программы, например, такие как типы данных, переменные, процедуры, функции. Здесь же с помощью предложения, начинающегося зарезервированным словом uses (использовать), программист сообщает компилятору о тех фрагментах программы (модулях), которые необходимо рассматривать как ее неотъемлемые составные части, располагаемые в других файлах.
Следующие три строки файла проекта
Uses
Forms,
Unit1 in 'Unit1.pas' {Form1};
указывают, что, помимо файла проекта, в программе должны использоваться модули Forms и Unit1 . Модуль Forms является стандартным, то есть уже известным Delphi, а модуль Unit1 — новым, неизвестным, и среда Delphi в этом случае указывает имя файла с текстом модуля ( in 'Unit1.pas).
Тело программы начинается со слова begin и ограничивается терминатором ( end с точкой). Оно состоит из нескольких операторов языка Object Pascal. В каждом операторе реализуется некоторое действие. В файле проекта в теле программы — три исполняемых оператора:
Application.Initialize;
Application.CreateForm(TForm1, Form1);
Application.Run;
Каждый из операторов реализует обращение к одному из методов объекта Application.
Объект — это комбинация данных и кода. Другими словами, объект — это порция данных, значение которых определяют его текущее состояние, и набор подпрограмм, называемых методами, оперирующими этими данными и определяющими поведение объекта, т.е. его реакцию на внешние воздействия. Данные называются полями объекта, а подпрограммы — его методами. Объект в целом предназначен для решения какой-либо конкретной задачи и воспринимается в программе как неделимое целое. Они придуманы для того, чтобы увеличить производительность труда программиста и одновременно повысить качество разрабатываемых программ. Два главных свойства объекта — функциональность и неделимость — делают его самостоятельной частью программы и позволяют легко переносить его из одной программы в другую. Разработчики Delphi придумали сотни объектов, которые можно рассматривать как кирпичики, из которых программист строит свою программу. Именно такой принцип построения программ получил название объектно-ориентированного программирования (ООП) .
В объекте Application собраны данные и подпрограммы, необходимые для нормального функционирования приложения Windows в целом. Среда Delphi автоматически создает объект — программу Application для каждого нового проекта.
С помощью метода Initialize программа осуществляет ряд вспомогательных действий, необходимых для работы под управлением операционной системы Windows.
Строка Application.Initialize обозначает обращение к методу Initialize объекта Application . Прочитав эту строку, компилятор создает код, который заставляет процессор перейти к выполнению большого фрагмента программы, написанного разработчиками среды Delphi. После выполнения этого фрагмента управление переходит к следующей строке программы, в которой вызывается метод CreateForm и т.д.
Метод CreateForm объекта Application создает и показывает на экране окно главной формы, а метод Run реализует бесконечный цикл получения и обработки поступающих от Windows сообщений о действиях пользователя. В том случае, когда вы закроете форму, т.е. завершите работу с приложением, Windows передает программе специальное сообщение, которое, в конечном счете, заставит программу прекратить работу и освободить назначенные ей системные ресурсы (память и процессор).
Необходимо отметить, что файл проекта полностью формируется средой Delphi и не предназначен для редактирования. Более того, Delphi очень болезненно реагирует на попытки изменить текст этого файла и упрямо выбрасывает из него все, что не вставлено ею самой. Именно по этой причине файл проекта имеет особое расширение и обычно не показывается в окне кода. Теперь вам стала более понятной структура файла проекта и действия, которые в нем реализуются.
Компоненты Button, BitBtn.
Они представляют собой стандартные управляющие элементы Windows, отображаемые в виде затененной кнопки с надписью. Для инициализации действий необходимо нажать их, т.е. щелкнуть по ним левой кнопкой мыши.
Использование Button и BitBtn позволяет инициировать команды, и это дает возможность иметь еще один способ выбора некоторого действия в приложении и является альтернативой использования меню. На лицевой части кнопок имеется текст. Как и для компонента Label, его можно изменять с помощью свойства Caption страницы Properties инспектора объекта.
Деталями внешнего вида кнопки можно управлять, изменяя свойства шрифта, при этом возможно изменение гарнитуры, размера и цвета текста.
Вы можете определить действие компонента Button, создавая для него процедуру обработки события OnClick. Для этого необходимо поместить компонент на форму и дважды щелкнуть по нему левой кнопкой мыши. После этого откроется Редактор кода с созданным телом процедуры обработки события OnClick.
procedure TForm1.Button1Click(Sender: TObject);
begin
end;
Помещая между ключевыми словами begin и end программный код, вы определяете метод обработки, который будет производиться в вашем приложении.
Компонент Button имеет ряд уникальных свойств, связанных с его функциями в качестве инициатора команды.
Свойство Cancel, установленное в True, определяет, что кнопка связывается с клавишей Esc на клавиатуре. Всякий раз, когда пользователь программы нажимает Esc, первая по порядку кнопка, чье свойство Cancel установлено в True, выполняет обработчик событий OnClick. Имеется в виду порядок помещения кнопок на форму, т.е. первая помещенная на форму кнопка на этапе проектирования, у которой свойство Cancel установлено в True.
Обычно клавиша Esc используется для того, чтобы закрыть модальное диалоговое окно. Она имеет связь обычно с кнопкой, помеченной как Cancel или Close.
Свойство Default определяет поведение формы, когда пользователь нажимает клавишу Enter.
После того, как в приложении нажата эта клавиша, первая по порядку кнопка, у которой свойство Default установлено равным True, выполняет метод OnClick. Однако если другая кнопка получила фокус явно и является активной, то выполняется ее обработчик OnClick. Такого типа реакция, как и действие кнопки Cancel, описанное ранее, является частью стандартного поведения Windows, присущего почти всем модальным диалоговым окнам.
Рассмотрим свойство ModalResult.
В терминологии Windows модальными окнами называются специальные окна, которые, раз появившись на экране, блокируют работу пользователя с другими окнами вплоть до своего закрытия. Обычно с их помощью реализуется диалог, требующий от пользователя некоторого решения. Для этого в состав модального окна включается несколько кнопок. Если у кнопки определено свойство ModalResult, нажатие на нее приводит к закрытию этого окна и возвращает в программу его значение как результат диалога с пользователем.
Свойство ModalResult компонента Button является значимым только тогда, когда форма, на которой находится кнопка, отображается в модальном состоянии, как окно диалога. Если форма показана с помощью метода ShowModal, она остается активной до тех пор, пока пользователь не откажется от нее, выбрав соответствующее действие. Обычно ожидается, что пользователь выберет кнопку OK, соглашаясь принять данные формы, или кнопку Cancel, чтобы отклонить эти данные. Как упомянуто ранее, достигнуть тех же самых результатов пользователь может, нажимая Enter или Esc.
Чтобы блок кода, показавший модальную форму, имел информацию о том, которое из возможных действий произошло (например, принял ли пользователь или отклонил форму), метод ShowModal формы возвращает числовое значение — модальный результат.
Компонент Button определяет ModalResult для того, чтобы вы смогли задать разные возвращаемые значения для разных кнопок и, следовательно, обнаружить, какая кнопка была нажата, когда закрывается модальная форма.
Если вы устанавливаете отличное от mrNone значение для свойства кнопки ModalResult, то вам не нужно записывать специальный метод обработки события OnClick только для того, чтобы закрыть форму, выполнение происходит автоматически. В Delphi определены следующие стандартные значения ModalResult :
mrOk, mrCancel, mrAbort, mrRetry, mrIgnore, mrYes, mrNo, mrAll, mrNoToAll, mrYesToAll.
Пиктографическая кнопка BitBtn представляет собой разновидность стандартной кнопки Button, она расположена на странице Additional палитры компонентов . Ее отличительная особенность — свойство Clyph, с помощью которого определяется растровое изображение, рисуемое на поверхности кнопки.
Свойство Kind для кнопки BitBtn, которое можно найти на странице Properties инспектора объекта, позволяет определить стандартные разновидности кнопок (рисунок 3).
Нажатие любой из них, кроме bkCustom и bkHelp, закрывает модальное окно и возвращает в программу результат mrXXX: bkOk — mrOk, bkCancel — mrCancel и т.д. Кнопка bkClose для модального окна возвращает значение mrCancel, а для главного окна программы — закрывает его и завершает работу программы. Кнопка bkHelp автоматически вызывает раздел справочной службы, связанный с HelpContext формы, на которую она помещена. Если у кнопки была изменена пиктограмма Clyph, Delphi автоматически присвоит ей свойство Kind равное bkCustom. Это произойдет также в случае, когда кнопка указана как умалчиваемая (Default = True), но свойство Kind не содержит bkOk или bkYes, а также если свойство Cancel содержит True, а свойство Kind не содержит bkCancel или bkNo.
Свойства Cancel, Default, ModalResult кнопкой BitBtn унаследованы у своего родительского класса Button.
Свойство Layout определяет положение пиктограммы относительно края кнопки blClyphLeft, blClyphRight, blClyphBottom, blClyphTop.
Свойство Margin определяет расстояние в пикселях от края кнопки до пиктограммы.
Свойство Spacing определяет расстояние в пикселях от пиктограммы до надписи на кнопке.
Свойство Style определяет стиль оформления кнопки, зависящий от операционной системы. Style = (bsAutoDetect, bsWin31, bsNew). Стиль bsNew соответствует 32-разрядным версиям Windows 95, 98/NT и выше. Стиль bsAutoDetect изменяет оформление кнопки в зависимости от операционной системы, под управлением которой работает программа в данный момент.
И все же главное отличие кнопки BitBtn от Button заключается в свойстве Clyph. Чтобы понять, как это свойство используется, поместите кнопку BitBtn на форму. Перейдите к инспектору объекта на страницу Properties, не снимая активизации с кнопки BitBtn1. Сделайте двойной щелчок левой кнопкой мыши по кнопке с тремя точками справа от слова (None). Откроется диалоговое окно Picture Editor (рисунок 4), которое позволяет помещать заранее созданные вами или Windows изображения с расширением bmp.
Для того чтобы поместить изображение на BitBtn, необходимо щелкнуть по кнопке Load, откроется диалоговое окно, позволяющее найти необходимый файл. После того, как файл найден, необходимо щелкнуть по кнопке " Открыть " диалогового окна поиска файла и после этого щелкнуть по кнопке OK окна Picture Editor. Конечно, вам необходимо соблюдать соответствие размера рисунка с размерами кнопки.
Необходимые вам размеры изображения можно получить, если использовать Image Editor — визуальный редактор Delphi . Для того чтобы открыть окно Редактора изображений, необходимо выбрать в главном меню команду Tools, далее — команду Image Editor. Редактор отображает диалоговое окно (рисунок 5), где вы можете создавать изображения, открывать уже имеющиеся и сохранять различные типы файлов (иконка, курсор и побитовое изображение). Диалоговое окно имеет собственную зону меню, палитру цветов, инструментальные средства редактирования и возможность модификации по вашему заказу палитры инструментальных средств.
Имеется еще один хороший путь, позволяющий использовать готовые картинки из папки Clipart. Предлагается следующий порядок действий. Откройте новый документ в текстовом редакторе Word. Используйте главное меню, в нем команду "Вставка". Из раскрывшегося списка выберите команду "Рисунок", далее команду "Картинки" или "Из файла".
При выборе команды "Картинки" открывается диалоговое окно Microsoft Clip Gallery с перечнем рисунков. По команде "Из файла" в диалоговом окне появляется папка Clipart с перечнем папок, содержащих рисунки. После того как вы выбрали понравившийся рисунок, поместите его в свой документ щелчком левой кнопкой мыши по кнопке "Добавить " . Не снимая активизации с рисунка, используйте панель Рисование, найдите на ней команду "Действия", из раскрывшегося списка выберите команду "Разгруппировать" Затем, используя кнопку со стрелкой "Выбор объектов", расположенной справа от команды "Действия", необходимо объединить все элементы рисунка.
Для этого необходимо поместить все компоненты рисунка в рамку, которая образуется после щелчка левой кнопкой мыши по кнопке "Выбор объектов". Но для этого установите курсор на экране и, нажимая левую кнопку мыши, не отпуская ее, протяните по экрану. Снова воспользуйтесь командой "Действия", но теперь уже выберите из раскрывшегося списка команду "Группировать".
Все эти процедуры проделаны для того, чтобы в дальнейшем вы могли редактировать свой рисунок с использованием средств Word . После двойного щелчка левой кнопкой мыши по сгруппированному рисунку открывается диалоговое окно Формат объекта. С его помощью вы можете изменять размер картинки, цвет отдельных элементов и т.д. После того, как рисунок вас удовлетворил своим содержанием, необходимо скопировать его в буфер обмена.
Откройте редактор рисунков Paint. Найдите команду Правка, далее команду Вставить. Ваш рисунок появится в редакторе, здесь вы тоже можете производить преобразование рисунка. Далее найдите команду Файл, Сохранить как ... Сохраните свой рисунок в выбранной вами папке с расширение bmp.
Таким образом, сформированный рисунок можно помещать на кнопку BitBtn уже известным вам способом. Его также можно открыть и в редакторе изображений Image Editor для внесения необходимых изменений, далее вновь можете сохранить и поместить на выбранные кнопки. На рисунке 6 представлены две кнопки с изображениями, полученными таким способом. Как видите, обычный компонент BitBtn приобретает достаточно яркий вид. Само изображение может говорить о назначении этого компонента.
Необходимо отметить, что данная работа потребует от вас определенной тренировки и учета нюансов, возникающих при определении размера рисунка и т.д. Но, работая с редакторами, вы очень быстро научитесь учитывать их особенности, и в результате у вас будут красивые изображения на кнопке.
Литература:
Марко Канту. Delphi 2 для Windows 95/NT. Москва. ООО "Малип". 1997 г. Джон Матчо. Дэвид Р. Фолкнер. Delphi. Москва. БИНОМ. 1995 г. Эндрю Возневич. Delphi. Освой самостоятельно. Москва. Восточная книжная компания. 1996 г. В.В.Фаронов. Delphi 5. Учебный курс. Москва. Издательство Нолидж.2000 г. А. Я. Архангельский. Программирование в Delphi 5. Москва. ЗАО "Издательство Бином". 2000 г.
Владимир Скуратов
(c) компьютерная газета
Палитра компонентов.
Страница DECISION CUBE.
На этой странице (рисунок 1) сосредоточены компоненты, с помощью которых реализуется специальный доступ к многомерным наборам данных. Специфика доступа заключается в том, что пользователь программы получает средства манипуляции многомерным массивом данных и может просматривать, суммировать и упорядочивать их по разным измерениям без выполнения повторных запросов. Для Delphi 4 и Delphi 5 страница Decision Cube одинакова.
DecisionCube (куб решений) основной компонент для работы с многомерными наборами данных.
DecisionQuery (запрос) осуществляет выборку данных для DecisionCube.
DecisionSource (источник данных) служит посредником между DecisionQuery и интерфейсными элементами DecisionCube.
DecisionPivot (навигатор) предоставляет пользователю средства управления многомерными наборами данных.
DecisionGrid (таблица решений) предоставляет данные, полученные от DecisionQuery, в табличной форме.
DecisionGraph (график решений) предоставляет данные, полученные от DecisionQuery, в графической форме.
Автономный EXE-модуль Windows.
Чтобы запустить созданную вами программу на компиляцию, вы выбираете команду Run из главного меню Run среды Delphi. В течение некоторого времени программа компилируется и компонуется. Конечным этапом является создание автономного exe- модуля, который не нуждается ни в какой поддержке во время его выполнения, кроме Windows.
По команде Run среда Delphi проделывает следующие действия: транслирует исходный код, составляя ваш проект, в пригодные для компоновки двоичные объектные файлы ( .DCU), объединяет их вместе для формирования заключительного исполнимого (.EXE) файла. После этого происходит запуск вашей программы.
Необходимо отметить, что окно инспектора объекта исчезает, перед тем как появляется ваша форма, принадлежащая сформированному приложению. Среда Delphi входит в режим исполнения, в заголовке главного окна Delphi появляется слово " Running ". В течение тестового прогона программы инспектор объекта обычно недоступен. Однако вы можете сделать паузу в выполнении программы или временный останов ее, устанавливая контрольные точки в исходном коде внутри Редактора кода. В этом случае, приостановив программу, вы можете исследовать значения свойств переменных, а также использовать другие встроенные средства отладки, которые обеспечивает Delphi.
Таким образом, процесс создания исполняемого exe-файла для приложения включает три этапа.
Первый этап предполагает создание элементов визуального интерфейса (выбор компонентов, размещение их на форме), в частности, основной формы программы.
Второй этап предполагает написание кода Object Pascal для выполнения необходимых для формы действий.
Третий этап предполагает компиляцию исходного кода Object Pascal и ресурсов формы в исполнимый файл (.EXE), который может запускаться в Windows как отдельная программа.
Причем на последнем этапе создаются некоторые новые откомпилированные файлы модуля, имеющие расширения . DCU и . DLL . Файл . DCU (Delphi Compiled Units — откомпилированные модули Delphi) содержит объектный код соответствующего (.PAS) файла модуля. Компилятор Delphi создает его, когда вы выполняете одну из команд Run, Compile, Build All из меню Run. Delphi использует файлы. DCU, когда создает заключительную исполнимую программу (в фазе, называемой связывание и компоновка).
Откомпилированные файлы Динамических библиотек — это второй тип конечного исполняемого файла, который может создавать Delphi. Расширение для этого файла — . DLL (Dynamic Link Library). Он представляет собой откомпилированный модуль Windows, который может использоваться одновременно многими программами Windows.
Файлы DLL — это один из наиболее важных элементов Windows, они необходимы, прежде всего, для того, чтобы предоставлять услуги прикладным программам.
Основная часть собственно операционной системы Windows состоит из трех DLL, называемых KERNEL, USER, GDI. Эти библиотеки содержат код и данные для Интерфейса прикладного программирования Windows (API).
Итак, программы приложения Delphi — это исполняемые файлы, которые состоят из одного или нескольких форм или окон. Программа взаимодействует с пользователем во время выполнения, получает сообщения из очереди сообщений, поддерживаемой Windows в интересах данной программы.
В Delphi, начиная с третьей версии, можно разрабатывать прикладные программы двух видов — автономные выполняемые файлы . exe и программы с поддержкой пакетов ( packages ) времени выполнения. В последнем случае размер выполняемого файла существенно (на порядок и более) сокращается, но зато вы должны поставлять пользователю не только выполняемый модуль, но и файлы поддерживающих его пакетов. Есть свои достоинства и недостатки в использовании программы с поддержкой пакетов. Но, во всяком случае, во время отладки имеет смысл включать поддержку пакетов времени выполнения. Это существенно сократит размеры выполняемых файлов и сбережет достаточно много дискового пространства.
Структура проекта.
Файл проекта представляет собой программу, написанную на языке Object Pascal и предназначенную для обработки компилятором. Она автоматически создается Delphi и содержит лишь несколько строк. Чтобы увидеть их, необходимо раскрыть команду главного меню Project, далее щелкнуть левой кнопкой мыши по команде View Source. Delphi покажет окно кода с закладкой Project1 (рисунок 2).
В окне кода жирным шрифтом выделяются зарезервированные средой Delphi слова, а курсивом — комментарии. Текст этой программы начинается словом program и заканчивается словом end и точкой за ним. Сочетание end со следующей за ней точкой называется терминатором программной единицы. Если в тексте программы встретится такой терминатор, компилятор прекращает анализ программы и игнорирует оставшуюся часть текста.
Важную роль в Object Pascal играют зарезервированные слова, придавая тексту, написанному почти на естественном языке, читабельность, что существенно облегчает процесс запоминания правописания слов и понимание проводимых действий. Каждое зарезервированное слово несет в себе условное сообщение для компилятора, который анализирует текст программы так же, как и мы читаем его: слева направо и сверху вниз.
Комментарии не предполагают действий для компилятора, и он их игнорирует. Они очень важны для программиста, который с их помощью поясняет те или иные места программы. Наличие комментариев в тексте программы делает ее понятнее и позволяет легко вспомнить особенности реализации программы, которую вы написали.
В Object Pascal комментарием считается любая последовательность символов, заключенная в фигурные скобки. В приведенном выше тексте строка {$R *.RES} не является комментарием. Этот специальным образом написанный фрагмент кода называется директивой компилятора (в данном случае — указание компилятору на необходимость подключения к программе так называемого файла ресурсов). Директивы начинаются символом $, который стоит сразу за открывающейся фигурной скобкой.
В Object Pascal в качестве указателей комментария могут также использоваться пары символов (*,*) и //. Скобки (*,*) используются подобно фигурным скобкам, то есть комментарием считается находящийся в них фрагмент текста, а символы // указывают компилятору, что комментарий располагается за ними и продолжается до конца текущей строки.
Слово program, следующие за ним имя программы и точка с запятой образуют заголовок программы. За ним следует раздел описаний, в котором программист (или Delphi) описывает, например, используемые в программе идентификаторы. Идентификатором обозначаются элементы программы, например, такие как типы данных, переменные, процедуры, функции. Здесь же с помощью предложения, начинающегося зарезервированным словом uses (использовать), программист сообщает компилятору о тех фрагментах программы (модулях), которые необходимо рассматривать как ее неотъемлемые составные части, располагаемые в других файлах.
Следующие три строки файла проекта
Uses
Forms,
Unit1 in 'Unit1.pas' {Form1};
указывают, что, помимо файла проекта, в программе должны использоваться модули Forms и Unit1 . Модуль Forms является стандартным, то есть уже известным Delphi, а модуль Unit1 — новым, неизвестным, и среда Delphi в этом случае указывает имя файла с текстом модуля ( in 'Unit1.pas).
Тело программы начинается со слова begin и ограничивается терминатором ( end с точкой). Оно состоит из нескольких операторов языка Object Pascal. В каждом операторе реализуется некоторое действие. В файле проекта в теле программы — три исполняемых оператора:
Application.Initialize;
Application.CreateForm(TForm1, Form1);
Application.Run;
Каждый из операторов реализует обращение к одному из методов объекта Application.
Объект — это комбинация данных и кода. Другими словами, объект — это порция данных, значение которых определяют его текущее состояние, и набор подпрограмм, называемых методами, оперирующими этими данными и определяющими поведение объекта, т.е. его реакцию на внешние воздействия. Данные называются полями объекта, а подпрограммы — его методами. Объект в целом предназначен для решения какой-либо конкретной задачи и воспринимается в программе как неделимое целое. Они придуманы для того, чтобы увеличить производительность труда программиста и одновременно повысить качество разрабатываемых программ. Два главных свойства объекта — функциональность и неделимость — делают его самостоятельной частью программы и позволяют легко переносить его из одной программы в другую. Разработчики Delphi придумали сотни объектов, которые можно рассматривать как кирпичики, из которых программист строит свою программу. Именно такой принцип построения программ получил название объектно-ориентированного программирования (ООП) .
В объекте Application собраны данные и подпрограммы, необходимые для нормального функционирования приложения Windows в целом. Среда Delphi автоматически создает объект — программу Application для каждого нового проекта.
С помощью метода Initialize программа осуществляет ряд вспомогательных действий, необходимых для работы под управлением операционной системы Windows.
Строка Application.Initialize обозначает обращение к методу Initialize объекта Application . Прочитав эту строку, компилятор создает код, который заставляет процессор перейти к выполнению большого фрагмента программы, написанного разработчиками среды Delphi. После выполнения этого фрагмента управление переходит к следующей строке программы, в которой вызывается метод CreateForm и т.д.
Метод CreateForm объекта Application создает и показывает на экране окно главной формы, а метод Run реализует бесконечный цикл получения и обработки поступающих от Windows сообщений о действиях пользователя. В том случае, когда вы закроете форму, т.е. завершите работу с приложением, Windows передает программе специальное сообщение, которое, в конечном счете, заставит программу прекратить работу и освободить назначенные ей системные ресурсы (память и процессор).
Необходимо отметить, что файл проекта полностью формируется средой Delphi и не предназначен для редактирования. Более того, Delphi очень болезненно реагирует на попытки изменить текст этого файла и упрямо выбрасывает из него все, что не вставлено ею самой. Именно по этой причине файл проекта имеет особое расширение и обычно не показывается в окне кода. Теперь вам стала более понятной структура файла проекта и действия, которые в нем реализуются.
Компоненты Button, BitBtn.
Они представляют собой стандартные управляющие элементы Windows, отображаемые в виде затененной кнопки с надписью. Для инициализации действий необходимо нажать их, т.е. щелкнуть по ним левой кнопкой мыши.
Использование Button и BitBtn позволяет инициировать команды, и это дает возможность иметь еще один способ выбора некоторого действия в приложении и является альтернативой использования меню. На лицевой части кнопок имеется текст. Как и для компонента Label, его можно изменять с помощью свойства Caption страницы Properties инспектора объекта.
Деталями внешнего вида кнопки можно управлять, изменяя свойства шрифта, при этом возможно изменение гарнитуры, размера и цвета текста.
Вы можете определить действие компонента Button, создавая для него процедуру обработки события OnClick. Для этого необходимо поместить компонент на форму и дважды щелкнуть по нему левой кнопкой мыши. После этого откроется Редактор кода с созданным телом процедуры обработки события OnClick.
procedure TForm1.Button1Click(Sender: TObject);
begin
end;
Помещая между ключевыми словами begin и end программный код, вы определяете метод обработки, который будет производиться в вашем приложении.
Компонент Button имеет ряд уникальных свойств, связанных с его функциями в качестве инициатора команды.
Свойство Cancel, установленное в True, определяет, что кнопка связывается с клавишей Esc на клавиатуре. Всякий раз, когда пользователь программы нажимает Esc, первая по порядку кнопка, чье свойство Cancel установлено в True, выполняет обработчик событий OnClick. Имеется в виду порядок помещения кнопок на форму, т.е. первая помещенная на форму кнопка на этапе проектирования, у которой свойство Cancel установлено в True.
Обычно клавиша Esc используется для того, чтобы закрыть модальное диалоговое окно. Она имеет связь обычно с кнопкой, помеченной как Cancel или Close.
Свойство Default определяет поведение формы, когда пользователь нажимает клавишу Enter.
После того, как в приложении нажата эта клавиша, первая по порядку кнопка, у которой свойство Default установлено равным True, выполняет метод OnClick. Однако если другая кнопка получила фокус явно и является активной, то выполняется ее обработчик OnClick. Такого типа реакция, как и действие кнопки Cancel, описанное ранее, является частью стандартного поведения Windows, присущего почти всем модальным диалоговым окнам.
Рассмотрим свойство ModalResult.
В терминологии Windows модальными окнами называются специальные окна, которые, раз появившись на экране, блокируют работу пользователя с другими окнами вплоть до своего закрытия. Обычно с их помощью реализуется диалог, требующий от пользователя некоторого решения. Для этого в состав модального окна включается несколько кнопок. Если у кнопки определено свойство ModalResult, нажатие на нее приводит к закрытию этого окна и возвращает в программу его значение как результат диалога с пользователем.
Свойство ModalResult компонента Button является значимым только тогда, когда форма, на которой находится кнопка, отображается в модальном состоянии, как окно диалога. Если форма показана с помощью метода ShowModal, она остается активной до тех пор, пока пользователь не откажется от нее, выбрав соответствующее действие. Обычно ожидается, что пользователь выберет кнопку OK, соглашаясь принять данные формы, или кнопку Cancel, чтобы отклонить эти данные. Как упомянуто ранее, достигнуть тех же самых результатов пользователь может, нажимая Enter или Esc.
Чтобы блок кода, показавший модальную форму, имел информацию о том, которое из возможных действий произошло (например, принял ли пользователь или отклонил форму), метод ShowModal формы возвращает числовое значение — модальный результат.
Компонент Button определяет ModalResult для того, чтобы вы смогли задать разные возвращаемые значения для разных кнопок и, следовательно, обнаружить, какая кнопка была нажата, когда закрывается модальная форма.
Если вы устанавливаете отличное от mrNone значение для свойства кнопки ModalResult, то вам не нужно записывать специальный метод обработки события OnClick только для того, чтобы закрыть форму, выполнение происходит автоматически. В Delphi определены следующие стандартные значения ModalResult :
mrOk, mrCancel, mrAbort, mrRetry, mrIgnore, mrYes, mrNo, mrAll, mrNoToAll, mrYesToAll.
Пиктографическая кнопка BitBtn представляет собой разновидность стандартной кнопки Button, она расположена на странице Additional палитры компонентов . Ее отличительная особенность — свойство Clyph, с помощью которого определяется растровое изображение, рисуемое на поверхности кнопки.
Свойство Kind для кнопки BitBtn, которое можно найти на странице Properties инспектора объекта, позволяет определить стандартные разновидности кнопок (рисунок 3).
Нажатие любой из них, кроме bkCustom и bkHelp, закрывает модальное окно и возвращает в программу результат mrXXX: bkOk — mrOk, bkCancel — mrCancel и т.д. Кнопка bkClose для модального окна возвращает значение mrCancel, а для главного окна программы — закрывает его и завершает работу программы. Кнопка bkHelp автоматически вызывает раздел справочной службы, связанный с HelpContext формы, на которую она помещена. Если у кнопки была изменена пиктограмма Clyph, Delphi автоматически присвоит ей свойство Kind равное bkCustom. Это произойдет также в случае, когда кнопка указана как умалчиваемая (Default = True), но свойство Kind не содержит bkOk или bkYes, а также если свойство Cancel содержит True, а свойство Kind не содержит bkCancel или bkNo.
Свойства Cancel, Default, ModalResult кнопкой BitBtn унаследованы у своего родительского класса Button.
Свойство Layout определяет положение пиктограммы относительно края кнопки blClyphLeft, blClyphRight, blClyphBottom, blClyphTop.
Свойство Margin определяет расстояние в пикселях от края кнопки до пиктограммы.
Свойство Spacing определяет расстояние в пикселях от пиктограммы до надписи на кнопке.
Свойство Style определяет стиль оформления кнопки, зависящий от операционной системы. Style = (bsAutoDetect, bsWin31, bsNew). Стиль bsNew соответствует 32-разрядным версиям Windows 95, 98/NT и выше. Стиль bsAutoDetect изменяет оформление кнопки в зависимости от операционной системы, под управлением которой работает программа в данный момент.
И все же главное отличие кнопки BitBtn от Button заключается в свойстве Clyph. Чтобы понять, как это свойство используется, поместите кнопку BitBtn на форму. Перейдите к инспектору объекта на страницу Properties, не снимая активизации с кнопки BitBtn1. Сделайте двойной щелчок левой кнопкой мыши по кнопке с тремя точками справа от слова (None). Откроется диалоговое окно Picture Editor (рисунок 4), которое позволяет помещать заранее созданные вами или Windows изображения с расширением bmp.
Для того чтобы поместить изображение на BitBtn, необходимо щелкнуть по кнопке Load, откроется диалоговое окно, позволяющее найти необходимый файл. После того, как файл найден, необходимо щелкнуть по кнопке " Открыть " диалогового окна поиска файла и после этого щелкнуть по кнопке OK окна Picture Editor. Конечно, вам необходимо соблюдать соответствие размера рисунка с размерами кнопки.
Необходимые вам размеры изображения можно получить, если использовать Image Editor — визуальный редактор Delphi . Для того чтобы открыть окно Редактора изображений, необходимо выбрать в главном меню команду Tools, далее — команду Image Editor. Редактор отображает диалоговое окно (рисунок 5), где вы можете создавать изображения, открывать уже имеющиеся и сохранять различные типы файлов (иконка, курсор и побитовое изображение). Диалоговое окно имеет собственную зону меню, палитру цветов, инструментальные средства редактирования и возможность модификации по вашему заказу палитры инструментальных средств.
Имеется еще один хороший путь, позволяющий использовать готовые картинки из папки Clipart. Предлагается следующий порядок действий. Откройте новый документ в текстовом редакторе Word. Используйте главное меню, в нем команду "Вставка". Из раскрывшегося списка выберите команду "Рисунок", далее команду "Картинки" или "Из файла".
При выборе команды "Картинки" открывается диалоговое окно Microsoft Clip Gallery с перечнем рисунков. По команде "Из файла" в диалоговом окне появляется папка Clipart с перечнем папок, содержащих рисунки. После того как вы выбрали понравившийся рисунок, поместите его в свой документ щелчком левой кнопкой мыши по кнопке "Добавить " . Не снимая активизации с рисунка, используйте панель Рисование, найдите на ней команду "Действия", из раскрывшегося списка выберите команду "Разгруппировать" Затем, используя кнопку со стрелкой "Выбор объектов", расположенной справа от команды "Действия", необходимо объединить все элементы рисунка.
Для этого необходимо поместить все компоненты рисунка в рамку, которая образуется после щелчка левой кнопкой мыши по кнопке "Выбор объектов". Но для этого установите курсор на экране и, нажимая левую кнопку мыши, не отпуская ее, протяните по экрану. Снова воспользуйтесь командой "Действия", но теперь уже выберите из раскрывшегося списка команду "Группировать".
Все эти процедуры проделаны для того, чтобы в дальнейшем вы могли редактировать свой рисунок с использованием средств Word . После двойного щелчка левой кнопкой мыши по сгруппированному рисунку открывается диалоговое окно Формат объекта. С его помощью вы можете изменять размер картинки, цвет отдельных элементов и т.д. После того, как рисунок вас удовлетворил своим содержанием, необходимо скопировать его в буфер обмена.
Откройте редактор рисунков Paint. Найдите команду Правка, далее команду Вставить. Ваш рисунок появится в редакторе, здесь вы тоже можете производить преобразование рисунка. Далее найдите команду Файл, Сохранить как ... Сохраните свой рисунок в выбранной вами папке с расширение bmp.
Таким образом, сформированный рисунок можно помещать на кнопку BitBtn уже известным вам способом. Его также можно открыть и в редакторе изображений Image Editor для внесения необходимых изменений, далее вновь можете сохранить и поместить на выбранные кнопки. На рисунке 6 представлены две кнопки с изображениями, полученными таким способом. Как видите, обычный компонент BitBtn приобретает достаточно яркий вид. Само изображение может говорить о назначении этого компонента.
Необходимо отметить, что данная работа потребует от вас определенной тренировки и учета нюансов, возникающих при определении размера рисунка и т.д. Но, работая с редакторами, вы очень быстро научитесь учитывать их особенности, и в результате у вас будут красивые изображения на кнопке.
Литература:
Владимир Скуратов
(c) компьютерная газета
Компьютерная газета. Статья была опубликована в номере 20 за 2001 год в рубрике программирование :: delphi