10227

Работа с формами. События TForm

Лабораторная работа

Информатика, кибернетика и программирование

Лабораторная работа № 4 Работа с формами. События TForm. Цель работы: изучить события класса TForm, научиться обрабатывать события формы в windowsприложениях. Класс ТForm добавляет несколько событий к родительскому классу TWinControl. Эти события позволяют изменять поведение фор

Русский

2013-03-24

58.5 KB

4 чел.

Лабораторная работа № 4 

Работа с формами. События TForm.

Цель работы: изучить события класса TForm; научиться обрабатывать события формы  в windows-приложениях.

Класс ТForm добавляет несколько событий к родительскому классу TWinControl. Эти события позволяют изменять поведение формы путем выполнения загрузки и сохранения информации о состоянии формы или распределения и освобождения дополнительных ресурсов. Когда форма создается и отображается, происходит пять следующих событий.

1. OnCreate запускается при создании формы и позволяет распределять ресурсы и инициализировать форму. Когда форма создастся и Visible:= True, следующие события происходят в указанном порядке:

1. OnCreate

2. OnShow

3. OnActivate

4. OnPaint

2. OnShow происходит непосредственно перед выводом формы на экран. К этому времени все элементы управления и компоненты созданы и инициализированы. Хотя к тому моменту, когда происходит событие OnShow, форма еще не видна, свойство Visible установлено равным True.

3. OnResize генерируется при изменении размера формы во время выполнения приложения. Обычно здесь помещается код для изменения размера и положения на экране элементов управления, не поддерживающих свойство Align. Событие OnResize также однократно генерируется при создании формы, когда Delphi устанавливает начальные размеры формы. OnResize вызывается неоднократно в процессе изменения размеров формы.

4. OnActivate происходит при получении формой фокуса ввода. OnActivate вызывается только при переходе фокуса ввода от одной формы к другой в пределах одного приложения. При переключении между приложениями Delphi генерирует событие OnActivate глобального объекта Application.

5. OnPaint запускается, когда необходимо перерисовать форму. Это может происходить, когда форма только что стала видимой, при частичном удалении перекрывающих ее элементов или увеличении размеров. Событие полезно, если вы перерисовываете какую-то часть формы самостоятельно. Событие OnCreate происходит один раз за все время существования формы, прочие же события могут вызываться неоднократно.

 Следующие события происходят при работе пользователя с  клавиатурой:

1. OnKeyDown. Событие OnKeyDown наступает, если компонент находится в фокусе, при нажатии пользователем любой клавиши, включая функциональные и вспомогательные, такие, как Shift, Alt и Ctrl.

В обработчик события передаются, кроме обычного параметра Sender, указывающего на компонент, в котором произошло событие, также параметры Key и Shift. Параметр Key определяет нажатую клавишу клавиатуры и имеет тип Word. Для не алфавитно-цифровых клавиш используется виртуальный код API Windows. Коды не различают символы в верхнем и нижнем регистрах и не различают символы кириллицы и латинские.

Параметр Shift является множеством, которое может быть пустым или включать следующие элементы:

Элемент Значение

ssShift Нажата клавиша Shift.

SsAlt Нажата клавиша Alt.

SsCtrl Нажата клавиша Ctrl.

Значения элементов, соответствующие нажатиям кнопок мыши, в данном событии не используются.

2. OnKeyUp. Событие OnKeyUp наступает, если компонент находится в фокусе, при отпускании пользователем любой ранее нажатой клавиши, включая функциональные и вспомогательные, такие, как Shift, Alt и Ctrl. По структуре процедура обработки этого события аналогична процедуре обработки OnKeyDown.

3. OnKeyPress. Событие OnKeyPress наступает, если компонент находится в фокусе, при нажатии пользователем клавиши символа. Параметр Key в обработчике этого события имеет тип Char и соответствует символу нажатой клавиши. При этом различаются симолы в верхнем и нижнем регистрах и символы кириллицы и латинские. Клавиши, не отражаемые в кодах ASCII (функциональные клавиши и такие, как Shift, Alt, Ctrl), не вызывают этого события. Поэтому нажатие таких комбинаций клавиш, как, например, Shift-A, генерирует только одно событие OnKeyPress, при котором параметр Key равен "A". Для того, чтобы распознавать клавиши, не соответствующие символам, или комбинации клавиш, надо использовать обработчики событий OnKeyDown и OnKeyUp.

Следует отметить, что событие OnKeyPress заведомо наступает, если нажимается только клавиша символа или клавиша символа при нажатой клавише Shift. Если же клавиша символа нажимается одновременно с какой-то из вспомогательных клавиш, то событие OnKeyPress может не наступить (произойдут только события OnKeyDown при нажатии и OnKeyUp при отпускании) или, если и наступит, то укажет на неверный символ. Например, при нажатой клавише Alt событие OnKeyPress при нажатии символьной клавиши не наступает. А при нажатой клавише Ctrl событие OnKeyPress при нажатии символьной клавиши наступает, но символ не распознается.

Поскольку параметр Key передается в обработчик как var, его можно изменять, передавая для дальненйшей стандартной обработки другой символ.

События OnKeyDown и OnKeyUp используют виртуальные коды (все они перечислены в файле WINDOWS.PAS).

Клавиша Десятичное число Шестнадцатеричное число Символическое имя

F1   112    $70   VK_F1

F2   113    $71   VK_F2

...

F10  121    $79   VK_F10

пробел  32    $20   VK_SPACE

BackSpace  8    $8   VK_BACK

Tab  9    $9   VK_TAB

Enter  13    $0D   VK_RETURN

Shift  16    $10   VK_SHIFT

Ctrl  17    $11   VK_CONTROL

Alt   18    $12   VK_MENU

CapsLock  20    $14   VK_CAPITAL

Esc   27    $1B   VK_ESCAPE

Insert  45    $2D   VK_INSERT

PageUp  33    $21   VK_PRIOR

PageDown  34    $22   VK_NEXT

End  35    $23   VK_END

Home  36    $24   VK_HOME

Стрелка влево 37    $25   VK_LEFT 

Стрелка верх  38    $26   VK_UP 

Стрелка вправо  39    $27   VK_RIGHT 

Стрелка вниз  40    $28   VK_DOWN 

Delete  46    $2E   VK_DELETE

PrintScreen 44    $2C   VK_SNAPSHOT

ScrollLock  145    $91   VK_SCROLL

Pause  19    $13   VK_PAUSE

NumLock  144    $90   VK_NUMLOCK

При работе с мыщью возникают следующие события:

  1.  OnMouseDown.  Событие наступает в момент нажатия пользователем клавиши мыши над компонентом.
  2.  OnMouseUp. Событие наступает при отпускании нажатой кнопки мыши над объектом.

Обработка событий OnMouseDown и OnMouseUp используется для операций, требуемых при нажатии и отпускании пользователем какой-нибудь кнопки мыши. Если требуется различная обработка событий в зависимости от того, какая кнопка мыши нажата или какая нажата вспомогательная клавиша, можно анализировать параметры Button и Shift. Значения параметра Button определяют, какая кнопка мыши нажата: mbLeft - левая, mbRight - правая, mbMiddle - средняя. Параметр Shift представляет собой множество, содержащее помимо обозначения нажатой кнопки еще и обозначения нажатых одновременно с этим вспомогательных клавиш Shift, Alt, Ctrl (соответствуют элементам множества ssShift, ssAlt, ssCtrl). Параметры X и Y определяют координаты указателя мыши в клиентской области компонента. Параметр Sender используется во всех обработчиках событий и показывает, в каком компоненте произошло событие. Нередко один и тот же обработчик применяется для реакции на события различных компонентов, причем основная часть обработки не зависит от источника события, но в каких-то операторах требуется распознавать этот источник. Тогда можно обращаться к параметру Sender.

Параметр Sender имеет тип TObject. А в классе TObject не определено никаких свойств. Поэтому непосредственно можно использовать только имя класса, как в приведенных ниже операторах:

ShowMessage('OnClick в компоненте класса '+Sender.ClassName);

if Sender.ClassNameIs('TButton')

 then ...

Более детальную информацию об источнике события можно получить, применяя операцию as и ссылаясь на Sender как на объект производного класса, например, класса TControl, в котором определены основные свойства компонентов. Примеры таких ссылок:

ShowMessage('OnClick в '+(Sender as TControl).Name);

if (Sender as TControl).Name = 'Button1'

 then ...

3. OnMouseMove. Событие наступает при перемещении курсора мыши над компонентом. Параметр Shift, являющийся множеством, содержит элементы, позволяющие определить, какие кнопки мыши и какие вспомогательные клавиши (Shift, Ctrl и Alt) нажаты в этот момент. Параметры X и Y определяют координаты указателя мыши в клиентской области компонента. Параметр Sender - сам компонент.

Событие OnMouseMove возникает независимо от того, нажаты ли какие-то кнопки или клавиши. Правда, хотя это и не документировано в Delphi, при нажатой правой кнопке мыши это событие, почему-то, не наблюдается.

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

1. OnCloseQuery генерируется в ответ на действия, закрывающие форму. Обработчик получает логическую переменную CanClose, определяющую, может ли форма быть закрыта. По умолчанию она имеет значение True, но если вы в обработчике установите False, форма останется открытой. Обычно это используется для сохранения не сохраненных файлов или для подтверждения закрытия формы. Вот пример такого кода.

procedure TFormI.FormCloseQuery(Sender: TObject;
var CanClose: Boolean);
begin

CanClose:= MessageDlg('Close form?', mtConfirmation,[mbYes,mbNo],0) = mrYes;

end;

2. OnClose генерируется непосредственно перед закрытием формы. Обычно оно используется для изменения стандартного поведения формы при закрытии. Для этого Delphi передает в обработчик события переменную Action, которая может принимать одно из четырех значений: caHide, caMinimize, caNone или caFree. По умолчанию для не MDI-форм используется caHide, скрывающее форму. Для дочерних MDI-форм значение по умолчанию, сворачивающее форму, равно caMinimize. Если Action установлено равным caNone, закрытия не происходит. caFree заставляет Delphi закрыть форму и освободить всю связанную с ней память. Если после этого сослаться на объект формы, произойдет исключительная ситуация.

OnClose вызывается только при закрытии формы с помощью щелчка на кнопке закрытия или вызова функции Close. Если вы закрываете главную форму приложения, все другие открытые формы закрываются без вызова события OnClose. Событие OnCloseQuery вызывается всегда, независимо от способа закрытия формы.

3. OnDeActivate происходит при потере формой фокуса ввода. Запуск происходит по тем же правилам, что и запуск события OnActivate.

4. OnHide запускается непосредственно перед тем, как форма станет невидимой. Хотя при вызове OnHide форма еще видна, ее свойство Visible установлено равным False.

5. OnDestroy генерируется непосредственно перед уничтожением формы. Обычно оно используется для освобождения ресурсов, выделенных в OnCreate. Событие OnDestroy вызывается только один раз за все время существования формы, прочие события могут вызываться неоднократно.

Задания на разработку

1. Создайте приложение, которое при закрытии спрашивает пользователя "Вы уверены?", предлагая два варианта ответа (Да/Нет). Приложение должно быть закрыто только при положительном ответе на вопрос.

2. Создайте приложение в котором при нажатии мыши на полотне окна на экране в TMemo фиксируются координаты нажатия, а в процессе перемещения мыши отображаются ее координаты в TLabel.

3. Создайте приложение в котором при изменении размеров окна меняются размеры помещенных на него компонентов.

4. Создайте приложение, которое при выборе находящихся на нем компонентов, показывает имя компонента, имя класса и т.п.

Контрольные вопросы

  1.  Что такое событие? Как создается обработчик события?
  2.  Чем отличается событийное программирование от линейного (программирование  DOS - приложений)?
  3.  Какое событие следует обработать,  если Вы хотите задать начальные значения данным в программе?
  4.  Какие события происходят при создании формы?
  5.  Какие события происходят при уничтожении формы?
  6.  Как произвести обработку нажатия на кнопку мыши вместе с функциональными клавишами?
  7.  Какова структура обработчиков событий OnKeyDown, OnKeyUp и OnKeyPress?
  8.  Как можно скрыть форму?
  9.  Расскажите о событиях, генерируемых при работе с изученными Вами визуальными компонентами TPanel, TEdit, TMemo, TCheckBox, и т.д.


 

А также другие работы, которые могут Вас заинтересовать

39497. Роль государственной собственности в экономике региона, дать оценку современной практики ее использования 330.5 KB
  Теоретические аспекты исследования государственной собственности Сущность и особенности государственной собственности. Роль государственной собственности в экономике региона. Зарубежный и российский опыт использования государственной собственности Зарубежный опыт использования государственной собственности16 Российский опыт использования государственной собственности.26 3 Развитие и использование государственной...
39498. Учет общехозяйственных расходов и варианты их списания 1.77 MB
  Шеремета а также работы зарубежных авторов: К. В отечественной и зарубежной литературе по вопросам определения понятий расходы затраты нет одной четко выбранной терминологии однако анализ литературы позволяет сделать вывод о том что эти понятия в бухгалтерском учете несут различную смысловую нагрузку.руб 32415 33700 36695 1285 2995 1040 1089 Затраты на 1 руб. руб.
39499. Исследование технологий продвижения электронного бизнеса и дизайн - проектирование современного Интернет-магазина 5.37 MB
  Интернет-магазины обладают рядом преимуществ в сравнении с обычными, как для покупателей, так и для продавцов. Крупные интернет-магазины поддерживают чрезвычайно широкий ассортимент товаров. А множество одинаково хорошо доступных интернет-магазинов вместе создают столь широкий диапазон товаров, что с ним не сравнится никакой супермаркет реального мира.
39500. Міжнародна конкуренція в умовах становлення ринкової економіки 23 MB
  В епоху тотальної глобалізації та гонитви за прибутком конкурентоспроможність товарів чи послуг є найважливішим показником та умовою існування даного товару не тільки на вітчизняній проте й на міжнародній арені. Поліпшення конкурентоспроможності експортованих товарів чи послуг –це поліпшення образу України як країниекспортера якісної продукції. Намагаючись відповідати міжнародним стандартам та слідуючи прикладу розвинутих країн Україна приділяє багато уваги розвитку інтелектуальних послуг що дозволяють отримувати найбільший...
39501. Разработка системы учета материальных ресурсов для отдела информационных технологий 10.77 MB
  КОМПЬЮТЕРНОЕ ОБОРУДОВАНИЕ РАСХОДНЫЕ МАТЕРИАЛЫ ПРОГРАММНОЕ ОБЕСПЕЧЕНИЕ ПОСТУПЛЕНИЕ ПЕРЕМЕЩЕНИЕ ВЫБЫТИЕ РАБОЧЕЕ МЕСТО Объектом исследования является система учета материальных ресурсов в отделе информационных технологий . Цель работы разработать систему учета материальных ресурсов для отдела информационных технологий. В процессе работы изучена деятельность и специфика учета материальных ресурсов в отделе информационных технологий разработана объектноориентированная модель системы. В результате проделанной работы разработана...
39502. Разработка конструкции модуля внешнего интерфейса (МВИ) 4.09 MB
  МВИ входит в состав индикатора вертолетного. МВИ предназначен для обеспечения связи индикатора с внешними устройствами. В проекте выполнено описание структурной схемы индикатора и его компоновка описание схемы электрической принципиальной модуля выбрана и описана конструкция модуля произведены расчёты механической прочности платы механических размерных цепей надёжности выполнен анализ течения воздушного потока в индикаторе. Описание структурной схемы индикатора [7] 4.
39503. Особенности проведения новогодних зарубежных туров в деятельности турфирм Пскова (на примере турфирмы «Салон путешествий «Дива») 809 KB
  Новогодний тур является одним из видов событийного тура который стремительно развивается в сравнении с другими видами туризма. Дестинации развиваются продвигая и рекламируя различные виды событийных туров для выполнения следующих функций: привлечение туристов особенно в низкий сезон ускорение возрождения городов увеличение туристской вместимости дестинации и развития инфраструктуры туризма формирование благоприятного имиджа дестинации и внесение вклада в развитие территории как благоприятного места для проживания работы и...
39504. Организация финансовой работы на предприятии и основные направления ее совершенствования (на примере ООО «Компьютеры и периферия») 897.5 KB
  ДИПЛОМНАЯ РАБОТА на тему: Организация финансовой работы на предприятии и основные направления ее совершенствования на примере ООО Компьютеры и периферия Студент ФФБД 5 курс ЗФФ1 А. Предмет исследования – организация финансовой работы ее составляющие. Цель работы: проанализировать сложившуюся методические подходы к организации финансовой работы на ООО Компьютеры и периферия выявить проблемы организации финансовой работы на современных предприятиях и...
39505. Проектирование архитектурно- конструктивной части общественно-торгового центра Cеверного микрорайона на 7 тыс. жителей жилого района «Юбилейный» в г.Гродно 799.5 KB
  В данном курсовом проекте предлагается общественно-торговый центр, с площадями для продажи промышленных товаров и помещения для бытового обслуживания посетителей: детская комната, мастерские, ателье, актовые залы. На 4-ом этаже запроектирован кафе-бар на 20 посадочных мест. Планировка участка. Благоустройство и озеленение.