Свойства, методы и события в delphi
Особенности управления свойствами визуальных компонент в режиме выполнения. Текстовый редактор для ввода строк. Создание методов с помощью визуальных средств. События в Delphi. Ключевая цель среды визуального программирования. Обработка сообщений Windows.
Рубрика | Программирование, компьютеры и кибернетика |
Вид | контрольная работа |
Язык | русский |
Дата добавления | 03.03.2018 |
Размер файла | 264,0 K |
Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже
Студенты, аспиранты, молодые ученые, использующие базу знаний в своей учебе и работе, будут вам очень благодарны.
Delphi, с одной стороны предоставляет полный доступ к подструктуре событий, предоставляемой Windows, с другой - Delphi упрощает программ-мирование обработчиков таких событий.
В данной лекции приводится несколько примеров того, как обрабатывать события в Delphi, дается более детальное объяснение работы системы, ориентированной на события.
Объекты из библиотеки визуальных компонентов (VCL) Delphi, равно как и объекты реального мира, имеют свой набор свойств и свое поведение - набор откликов на события, происходящие с ними. Список событий для данного объекта, на которые он реагирует, можно посмотреть, например, в Инспекторе Объектов на странице событий. (На самом деле, на этой странице представлен список свойств, которые имеют тип вроде TMouseMoveEvent и представляют собой процедуры-обработчики событий. Существует соглашение по названиям данных свойств. Например, OnDblClick соответствует двойному щелчку мыши, а OnKeyUp - событию, когда нажатая клавиша была отпущена.) Среди набора событий для различных объектов из VCL есть как события, портируемые из Windows (MouseMove, KeyDown), так и события, порождаемые непосредственно в программе (DataChange для TDataSource).
Поведение объекта определяется тем, какие обработчики и для каких событий он имеет. Создание приложения в Delphi состоит из настройки свойств используемых объектов и создания обработчиков событий.
Простейшие события, на которые порой нужно реагировать, - это, например, события, связанные с мышкой (они есть практически у всех видимых объектов) или событие Click для кнопки TButton. Предположим, что вы хотите перехватить щелчок левой кнопки мыши на форме. Чтобы сделать это - создайте новый проект, в Инспекторе Объектов выберите страницу событий и сделайте двойной щелчок на правой части для свойства OnClick. Вы получите заготовку для обработчика данного события:
procedure TForm1.FormClick(Sender: TObject);
begin
end;
Напишите здесь следующее:
procedure TForm1.FormClick(Sender: TObject);
begin
MessageDlg('Hello', mtInformation, [mbOk], 0);
end;
Каждый раз, когда делается щелчок левой кнопки мыши над формой будет появляться окно диалога (см. рис.1).
Рис. 9 - Диалог, появляющийся при щелчке мыши на форме
Код, приведенный выше, представляет собой простейший случай ответа на событие в программе на Delphi. Он настолько прост, что многие программисты могут написать такой код и без понимания того, что они на самом деле отвечают на сообщение о событии, посланное им операционной системой. Хотя программист получает это событие через третьи руки, тем не менее он на него отвечает.
Опытные программисты в Windows знают, что при возникновении события, операционная система передает вам не только уведомление о нем, но и некоторую связанную с ним информацию. Например, при возникновении события “нажата левая кнопка мыши” программа информируется о том, в каком месте это произошло. Если вы хотите получить доступ к такой информации, то должны вернуться в Инспектор Объектов и создать обработчик события OnMouseDown:
procedure TForm1.FormMouseDown(Sender: Tobject;
Button: TmouseButton;
Shift: TshiftState;
X, Y: Integer);
begin
Canvas.TextOut(X, Y, `X='+IntToStr(X)+' Y='+IntToStr(Y));
end;
Запустите программу, пощелкайте мышкой на форме:
Рис. 10
Как видите, в Delphi весьма просто отвечать на события. И не только на события, связанные с мышкой. Например, можно создать обработчик для OnKeyDown (нажата клавиша):
procedure TForm1.FormKeyDown(Sender: TObject;
var Key: Word;
Shift: TShiftState);
begin
MessageDlg(Chr(Key), mtInformation, [mbOk], 0);
end;
Теперь, когда вы имеете начальные знания о программировании событий в Delphi, самое время вернуться назад и посмотреть на теорию, стоящую за тем кодом, что вы написали. После получения представления о том, как работает система, можно вернуться к среде Delphi и посмотреть, как использовать полностью имеющиеся возможности.
Понимание событий
Событийное программирование есть не только в Windows, и данную черту можно реализовать не только в операционной системе. Например, любая DOS программа может быть основана на простом цикле, работающем все время жизни программы в памяти. Рассмотрим гипотетический пример, как данный код может выглядеть:
begin
InitializeMemory;
repeat
CheckForMouseEvent(Events);
CheckForKeyPress(Events)
HandleEvents(Events);
until Done := True;
DisposeMemory;
end.
Это типичный пример программы, ориентированной на события. Она начинается и заканчивается инициализацией и освобождением памяти. В программе присутствует простой цикл repeat..until, который проверяет появление событий от мыши и клавиатуры и затем дает возможность программисту ответить на эти события.
Переменная Events может быть записью с простой структурой:
TEvent = record
X, Y: Integer;
MouseButton: TButton;
Key: Word;
end;
Тип TButton, указанный выше, можно декларировать так:
TButton = (lButton, rButton);
Эти структуры позволяют проследить, где находится мышь, каково состояние ее кнопок, и значение нажатой клавиши на клавиатуре.
Конечно, это пример весьма простой структуры, но заложенные здесь принципы отражают то, что происходит внутри Windows или внутри других систем, ориентированных на события, вроде Turbo Vision. Если бы, приведенная выше программа, была редактором текста, то обработчик HandleEvent для такой программы мог бы иметь вид:
procedure HandleEvent(Events: TEvent);
begin
case Events.Key of
'A'..'z': Write(Events.Key);
EnterKey: Write(CarriageReturn);
EscapeKey: Done := True;
end;
end;
Согласно коду выше, программа будет печатать букву `a' при нажатии этой клавиши и перейдет на новую строку, если нажата клавиша `Enter'. Нажатие `Esc' приведет к завершению программы.
Код такого типа может быть весьма удобным, в частности, если вы пишете программу, в которой требуется анимация. Например, если нужно перемещать несколько картинок по экрану, то может понадобиться сдвинуть их на несколько точек, затем проверить, нажимал ли пользователь кнопки. Если такое событие было, то его можно обработать, если нет, то двигать дальше.
Надеюсь, что приведенный пример дает некоторое понимание работы ориентированной на события системы. Единственное, что осталось, пропущенным, - почему система Windows так спроектирована.
Одной из важных причин, почему Microsoft сделал Windows по такой схеме, является тот факт, что множество задач работает в среде одновременно. В многозадачных системах операционная система должна знать, щелкнул ли пользователь мышкой на определенное окно. Если данное окно было частично перекрыто другим, то это становится известно операционной системе и она перемещает окно на передний план. Понятно, что неудобно заставлять само окно выполнять эти действия. Операционной системе лучше обрабатывать все нажатия клавиш и кнопок на мыши и затем передавать их в остальные программы в виде событий.
Если кратко, программист в Windows почти никогда не должен напрямую проверять “железо”. Система выполняет эту задачу и передает информацию программе в виде сообщений.
Когда пользователь щелкает мышкой, операционная система обрабатывает это событие и передает его в окно, которое должно обработать данное событие. Созданное сообщение, в данном случае, пересылается в некую процедуру DefWindowProc окна (default window procedure). DefWindowProc - аналог процедуры HandleEvent из примера, приведенного выше.
Каждое окно в Windows имеет свою DefWindowProc. Чтобы полностью понять данное утверждение, представьте, что каждая кнопка, каждый ListBox, каждое поле ввода и т.д. на самом деле являются окнами и имеют свою процедуру DefWindowProc. Это весьма гибкая и мощная система, но она может заставить программиста писать весьма сложный код. Delphi дает возможность быть защищенным от такой структуры программы.
Почти все, что происходит в Windows принимает форму сообщений и, если вы хотите их использовать в Delphi (в большей мере это необходимо при написании своих собственных компонентов), то нужно понять, как эти сообщения работают.
Если посмотреть на DefWindowProc в справочнике по Windows API, то можно увидеть следующее определение:
function DefWindowProc(Wnd: HWnd; Msg, wParam: Word;
lParam: LongInt);
Каждое сообщение, посылаемое в окно, состоит из четырех частей: первая часть - handle окна, получающего сообщение, Msg сообщает, что произошло а третья и четвертая части (wParam и lParam) содержат дополнительную информацию о событии. Вместе эти четыре части являются аналогом показанной выше структуры TEvent.
Вторая часть сообщения имеет длину 16 бит и сообщает, что за событие произошло. Например, если нажата левая кнопка на мыши, то переменная Msg содержит значение WM_LBUTTONDOWN. Существуют десятки различного типа cообщений и они называются вроде WM_GETTEXT, WM_HSCROLL, WM_GETTEXTLENGTH и т.п. Список всех сообщений можно видеть в справочнике по Windows API (on-line help).
Последние две переменные, длиной 16 и 32 бита, называются wParam и lParam. Они сообщают программисту важную дополнительную информацию о каждом событии. Например, при нажатии кнопки мыши, lParam содержит координаты указателя мыши.
Одна из хитростей заключается в том, как выделить нужную информацию из этих переменных. В большинстве случаев Delphi освобождает вас от необходимости выполнять данную задачу. Например, в обработчике события OnMouseDown для формы вы просто используете координаты X и Y. Как программисту, вам не нужно прилагать усилия для получения сообщения и связанных с ним параметров. Все, что связано с событиями, представлено в простом и непосредственном виде:
procedure TForm1.FormMouseDown(Sender: TObject;
Button: TMouseButton;
Shift: TShiftState;
X, Y: Integer);
delphi windows визуальный программирование
Итак, если подвести итог, то должно стать ясным следующее:
Windows является системой, ориентированной на события;
события в Windows принимают форму сообщений;
в недрах VCL Delphi сообщения Windows обрабатываются и преобразуются в более простую для программиста форму;
обработка событий в Delphi сводится к написанию для каждого объекта своих обработчиков;
события в программе на Delphi вызываются не только сообщениями Windows, но и внутренними процессами.
Обработка сообщений Windows в Delphi
Конечно, нельзя придумать такую библиотеку объектов, которые бы полностью соответствовали потребностям программистов. Всегда возникнет необходимость дополнения или изменения свойств и поведения объектов. В этом случае, так же, как и при создании собственных своих компонентов в Delphi, часто требуется обрабатывать сообщения Windows. Поскольку Object Pascal является развитием и продолжением Borland Pascal 7.0, то это выполняется сходным с BP способом.
Общий синтаксис для декларации обработчика сообщений Windows:
procedure Handler_Name(var Msg : MessageType);
message WM_XXXXX;
Handler_Name обозначает имя метода; Msg - имя передаваемого параметра; MessageType - какой либо тип записи, подходящий для данного сообщения; директива message указывает, что данный метод является обработчиком сообщения; WM_XXXXX - константа или выражение, которое определяет номер обрабатываемого сообщения Windows.
Рассмотрим обработку сообщений на примере. Например, при нажатии правой кнопки мыши на форме в программе появляется всплывающее меню (pop-up menu, если оно было привязано к этой форме). Программист может захотеть привязать к правой кнопке какое-нибудь другое событие. Это можно сделать так:
type
TForm1 = class(TForm)
PopupMenu1: TPopupMenu;
MenuItem1: TMenuItem;
MenuItem2: TMenuItem;
MenuItem3: TMenuItem;
private
{Private declarations}
procedure WMRButtonDown(var Msg : TWMMouse); message
WM_RBUTTONDOWN;
public
{Public declarations}
end;
Подчеркнут код, добавленный в декларацию объекта TForm1 вручную. Далее, в секции implementation, нужно написать обработчик:
procedure TForm1.WMRButtonDown(var Msg : TWMMouse);
begin
MessageDlg('Right mouse button click.', mtInformation,
[mbOK], 0);
end;
В данном случае при нажатии правой кнопки мыши будет появляться диалог.
Вообще-то, у класса TForm уже есть унаследованный от дальнего предка обработчик данного события, который называется точно также и вызывает то самое pop-up меню. Если в новом обработчике сообщения нужно выполнить действия, которые производились в старом, то для этого применяется ключевое слово inherited. Если слегка модифицировать наш обработчик, то после диалога будет появляться pop-up меню:
procedure TForm1.WMRButtonDown(var Msg : TWMMouse);
begin
MessageDlg('Right mouse button click.', mtInformation,
[mbOK], 0);
inherited;
end;
Однако есть еще способ обработки всех сообщений, которые получает приложение. Для этого используется свойство OnMessage объекта Application, который автоматически создается при запуске программы. Если определен обработчик события OnMessage, то он получает управление при любом событии, сообщение о котором направлено в программу. Следующий код будет приводить к появлению диалога при двойном щелчке мыши на любом объекте в приложении.
procedure TForm1.FormCreate(Sender: TObject);
begin
Application.OnMessage:=AOM;
end;
procedure TForm1.AOM(var Msg: TMsg; var Handled: Boolean);
begin
Handled:=False;
if Msg.Message = WM_LBUTTONDBLCLK then begin
MessageDlg('Double click.', mtInformation, [mbOK], 0);
Handled:=True;
end;
end;
Конечно, в обработчике нельзя выполнять операции, требующие длительного времени, поскольку это приведет к замедлению выполнения всего приложения.
Выводы
Свойство является важным атрибутом компонента. Для пользователя (программиста) свойство выглядит как простое поле какой-либо структуры, содержащее некоторое значение
Создание программы в Delphi сводится к "нанесению" компонентоа на форму (которая, кстати, также является компонентом) и настройке взаимодействия между ними путем: изменения значения свойств этих компонентов, написания адекватных реакций на события.
Существует несколько типов свойств, в зависимости от их "природы", т.е. внутреннего устройства.
Простые свойства - это те, значения которых являются числами или строками. Например, свойства Left и Top принимают целые значения, определяющие положение левого верхнего угла компонента или формы. Свойства Caption и Name представляют собой строки и определяют заголовок и имя компонента или формы.
Перечислимые свойства - это те, которые могут принимать значения из предопределенного набора (списка). Простейший пример - это свойство типа Boolean, которое может принимать значения True или False.
Вложенные свойства - это те, которые поддерживают вложенные значения (или объекты). Object Inspector изображает знак "+" слева от названия таких свойств. Имеются два вида таких свойств: множества и комбинированные значения. Object Inspector изображает множества в квадратных скобках. Если множество пусто, оно отображается как []. Установки для вложенных свойств вида "множество" обычно имеют значения типа Boolean. Наиболее распространенным примером такого свойства является свойство Style с вложенным множеством булевых значений. Комбинированные значения отображаются в Инспекторе Объектов как коллекция некоторых величин, каждый со своим типом данных (рис 1). Некоторые свойства, например, Font, для изменения своих значений имеют возможность вызвать диалоговое окно. Для этого достаточно щелкнуть маленькую кнопку с тремя точками в правой части строки Инспектора Объектов, показывающей данное свойство.
Класс - это категория объектов, обладающих одинаковыми свойствами и поведением. При этом объект представляет собой просто экземпляр какого-либо класса. Например, в Delphi тип “форма” (окно) является классом, а переменная этого типа - объектом. Метод - это процедура, которая определена как часть класса и инкапсулирована (содержится) в нем. Методы манипулируют полями и свойствами классов (хотя могут работать и с любыми переменными) и имеют автоматический доступ к любым полям и методам своего класса. Доступ к полям и методам других классов зависит от уровня “защищенности” этих полей и методов. Пока же для нас важно то, что методы можно создавать как визуальными средствами, так и путем написания кода вручную.
Простые, перечислимые и вложенные свойства, кнопки и выпадающий список, изменение положения полос, управление свойствами визуальных компонентов в режиме выполнения.
Объект, класс, техника написания методов в Delphi, экземпляр класса, передача параметров, информация периода выполнения.
Событие, обработка событий, многозадачные системы, структура, состояние и поведение объекта.
Вопросы для самоконтроля
Какие типы свойств в Delphi Вы знаете?
В каких режимах Delphi позволяет легко манипулировать свойствами компонентов?
Какое диалоговое окно в Delphi дает возможность изменить цвет «во время выполнения»?
Как происходит управление свойствами визуальных компонентов в режиме выполнения Delphi?
Как Вы можете определить базовое понятие объектно - ориентированного программирования класс? И как в этом случае представляется объект?
Дайте характеристику понятию «методы в Delphi».
Из скольких частей может состоять заголовок процедуры?
Что подразумевается под понятием Событие в Delphi?
Что обозначает высказывание «программирование событий» в Delphi?
Как происходит обработка сообщений Windows в Delphi?
Литература
1. Ален Э. Типичные ошибки проектирования. Библиотека программиста. ? М.: Питер, 2004.
2.Брауде Э. Технология разработки программного обеспечения. ? М.: Питер, 2004. - 325 с.
3. Бобров И.С. Delphi 7. Учебный курс. Москва. Санкт-Петербург, Нижний Новгород, Воронеж: Питер. 2003.- 625
4. Гради Буч. Объектно - ориентированный анализ и проектирование с примерами приложений на С++. ? М.: Бином. 1998
5. Джон Влиссидес, Эрих Гамма, Ричард Хелм, Ральф Джонсон. Приемы объектно - ориентированного проектирования. Паттерны проектирования. ? М.: Питер. 2003. - 256 с.
6. Иванова Г.С., Ничушкина Т.Н., Пугачев Е.К. Объектно- ориенти-рованное программирование. ? М.: Издательство МГТУ имени Н.Э. Баумана. 2003.- 320с.
7.Кьоу Дж.,Джеанини М.Объектно-ориентированное программирование. Просто и понятно. ? М.: Питер. 2005. -403с.
8. Лесневский А.С. Объектно - ориентированное программирование для начинающих. ? М.: Бином. Лаборатория знаний. 2005. - 382 с.
9.Майер Б. Объектно - ориентированное программирование. Концепции разработки. ? М.: Русская редакция. 2004.- 456 с.
10.Синтес Антони. Освой самостоятельно объектно - ориентированное программирование за 21 день. своих. ? М.: Вильямс · 2002. -284с.
11.http://www.iite - сайт ЮНЕСКО «Информационные технологии в образовании».
12.http://.borland.com/delphi_net/ - Официальный сайт Borland Delphi
13.http://delphin.xost.ru/ - сайт помощи для программирования в среде Delphi.
14. http://www/spb.runnet.ru - сервер Санк - Петербургского центра научно - технической информации
15. http://www.ournet.md/~delphi - Сайт часто задаваемых вопросов и ответов по DELPHI, документация по функциям Windows API, уроки по Delphi, Delphi 4 - интерактивно, работа с DirectX и MMX.
Размещено на Allbest.ru
...Подобные документы
Общая характеристика системы программирования Delphi, а также принципы создания ее компонентов. Описание значений файлов приложения, созданного с помощью Delphi. Структура и свойства библиотеки визуальных компонентов (Visual Component Library или VCL).
отчет по практике [1,1 M], добавлен 07.12.2010Рассмотрение особенностей среды программирования Delphi, анализ клиент-серверной версии. Знакомство с библиотекой визуальных компонентов. Основные функции интеллектуального редактора. Характеристика требований к базам данных. Функции программы "Магистр".
дипломная работа [1,5 M], добавлен 10.03.2013Основы программирования, работа в консольном режиме Delphi. Правила оформления комментариев. Типы данных, используемые в консольном режиме. Текстовый редактор Delphi Memo. Пример загрузки текстового файла. Примеры решения и оформления простейших задач.
отчет по практике [2,1 M], добавлен 11.03.2014Разработка визуального интерфейса пользователя, на основе экранных форм среды Delphi и визуальных компонент. Основные типы данных, используемые в программе MD 5 Calc. Однонаправленные хэш-функции. Процесс хэширования MD5, возможности его применения.
курсовая работа [433,1 K], добавлен 28.08.2012Методы, подходы, принципы, интерфейс Lazarus и Delphi. Технические различия, ход установки и коммерческий доступ к продуктам среды визуального программирования. Установление дополнительных компонент программы, их совместимость с операционными системами.
курсовая работа [4,1 M], добавлен 14.03.2012Освоение языка программирования Delphi. Построение блок-схемы запуска главного таймера и основная логика программы. Использованные свойства и события Form, MediaPlayer, Timer, MainMenu. Запуск, пауза и остановка анимациии. Создание листинга программы.
курсовая работа [771,9 K], добавлен 22.06.2014Описания объектов, свойств, методов, формы и основных модулей текста программы в среде Delphi. Создание Windows-приложения на алгоритмическом языке Object Pascal в среде визуального программирования. Анализ результатов тестирования программного продукта.
курсовая работа [2,4 M], добавлен 27.08.2012Особенности среды визуального проектирования Borland Delphi 7.0. Этапы разработки программы и составления блок-схемы алгоритмов. Способы вычисления кусочно-заданной функции одной переменной. Рассмотрение компонентов среды Delphi, ее предназначение.
контрольная работа [703,8 K], добавлен 24.09.2012Разработка программы для работы в операционных системах семейства Windows. Использование среды Delphi - современной технологии визуального проектирования. Создание пользовательского интерфейса, оконного приложения, меню; задание исходной матрицы.
курсовая работа [1,5 M], добавлен 12.01.2011Создание Windows-приложения на алгоритмическом языке Object Pascal в среде визуального программирования Delphi, которое, как планируется, будет обеспечивать решение специализированных задач по формированию, обработке на ЭВМ и выводу информации.
курсовая работа [967,6 K], добавлен 20.05.2008Теоретические основы объектно-ориентированного языка программирования Delphi, изучение среды визуального проектирования приложений. Определение 40-го числа Фибоначчи, составление листинга и блок-схемы программы, тестирование ее на работоспособность.
курсовая работа [261,1 K], добавлен 25.03.2015Общая характеристика интерфейса языка программирования Delphi. Рассмотрение окна редактора кода, конструктора формы, инспектора объектов и расширения файлов. Ознакомление с основными этапами создания и сохранения простого приложения; проверка его работы.
презентация [184,3 K], добавлен 18.03.2014Создание информационной системы обработки матриц. Общая характеристика программного обеспечения, которое реализует выполнение заданных функций. Программа разработана с использованием среды визуального программирования Delphi 7 и языка Object Pascal.
курсовая работа [373,4 K], добавлен 14.01.2011Delphi как среда разработки программ, ориентированных на работу в Windows. Назначение и преимущество использования электронных учебников. Описание возможностей среды Delphi 5 для разработки электронного учебника. Варианты применения служб Internet.
дипломная работа [3,6 M], добавлен 13.07.2011Создание в Delphi программы, позволяющей тестировать уровень знаний операционной системы Windows. Важнейшие свойства и события компонента MainMenu. Описание работы программы и ее фрагменты. Внешний вид исходной формы теста. Программа решения задачи.
курсовая работа [2,8 M], добавлен 21.07.2013C++ Builder - SDI-приложение, главное окно которого содержит настраиваемую инструментальную панель и палитру компонентов. Свойства атрибутов компонента, определяющие его внешний вид и поведение. События, методы и VCL компоненты в среде C++ Builder.
курсовая работа [225,9 K], добавлен 12.02.2009Разработка 32-разрядных приложений Windows с помощью системы виртуального объектно-ориентированного программирования Delphi. Работа с коммуникационными портами. Виртуальное проектирование Windows. Назначение контактов COM порта (разъём DB-9S.).
реферат [32,7 K], добавлен 28.08.2009Методы, позволяющие обрабатывать события, в интерфейсах. Преимущество использования getSource(). Метод actionPerformed(), вызываемый при возникновении события, когда пользователь щелкает на кнопке или выполняет действие, затрагивающее компонент.
презентация [1,2 M], добавлен 26.10.2013Эффективные средства разработки программного обеспечения. Технология визуального проектирования и событийного программирования. Конструирование диалоговых окон и функций обработки событий. Словесный алгоритм и процедуры программы Borland Delphi 7 Studio.
дипломная работа [660,2 K], добавлен 21.05.2012Теоретические аспекты среды программирования Delphi. Сущность понятия жизненного цикла, характеристика спиральной модели. Назначение программы "Графический редактор", ее основные функции. Работа с графическим редактором, документирование программы.
курсовая работа [695,6 K], добавлен 16.12.2011