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, и т.д.


 

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

31657. Тестирование как исследовательский метод 40 KB
  Тесты представляют собой модельные ситуации с их помощью выявляются реакции свойственные индивиду которые считаются совокупностью показателей исследуемого признака. В педагогической психологии используются все типы существующих тестов однако наиболее часто востребованы тесты достижений. Тесты позволяют дать оценку индивида в соответствии с поставленной целью исследования; удобство математической обработки; являются относительно оперативным способом оценки большого числа неизвестных лиц; обеспечивают сопоставимость информации полученной...
31658. Психолого-педагогическое сопровождение развития личности ребенка в образовательной процессе 52 KB
  Тесты классифицируются по разным признакам. По виду свойств личности они делятся на тесты достижений и личностные. К первым относятся тесты интеллекта школьной успеваемости тесты на творчество тесты на способности сенсорные и моторные тесты. Ко вторым тесты на установки на интересы на темперамент характерологические тесты мотивационные тесты.
31659. Чотири типи темпераменту 37.5 KB
  Якщо у мами і дитини темперамент схожий вони швидше порозуміються якщо ж темпераменти різко відрізняються мама холерик малюк флегматик це веде до проблем в спілкуванні з дитиною в її вихованні тому що мама часто вимагає від дитини те на що вона не здатна бути лідером в спілкуванні з однолітками бути розкутою швидко одягатися і так далі. У цьому випадку дорослому варто підстроїтися під дитину враховувати її індивідуальні особливості контролювати свої емоції щоб не зародити у малюка комплекс неповноцінності. Вона вертка і...
31660. Поняття про здібності 62.5 KB
  Психологія заперечуючи тотожність здібностей і істотно важливих компонентів діяльності знань умінь і навичок підкреслює їхню єдність. Здібності виявляються тільки в діяльності і притім тільки в такий діяльності що не може здійснюватися без наявності цих здібностей. Не можна говорити про здібності дитини до малювання якщо його не намагаються навчати малювати якщо він не здобуває ніяких навичок необхідних для образотворчої діяльності. У чому ж виражається єдність здібностей з одного боку і умінь знань і навичок з інший Здібності...
31661. Поняття про характер 42.5 KB
  Такі психологічні особливості особистості називають рисами характеру. Історія знає багатьох політичних громадських і військових діячів які завдяки силі позитивних рис свого характеру сприяли прогресу суспільства тоді як особи з негативними рисами характеру або зі слабким характером призводили до його занепаду. Структура характеру Характер як одна з істотних особливостей психічного складу особистості є цілісним утворенням що характеризує людське Я як єдність. Розуміння характеру як єдності його рис не виключає виокремлення в ньому деяких...
31662. ВІКОВА ПСИХОЛОГІЯ ЯК ГАЛУЗЬ ПСИХОЛОГІЧНОЇ НАУКИ 127.5 KB
  Вікова психологія галузь психологічної науки яка вивчає особливості психічного та особистісного розвитку людини на різних етапах її життя. Його специфіка полягає передусім у тому що протягом життя в психіці людини відбуваються різні якісні перетворення дослідження яких потребує системного з'ясування загальних закономірностей вікового розвитку. Предметом дослідження вікової психології є вікова динаміка закономірності фактори умови механізми становлення формування та розвитку особистості. Вікова психологія вивчає загальні...
31663. Психічний розвиток людини 28.5 KB
  Кожен період вік своєрідний ступінь психічного розвитку з притаманними йому відносно стійкими якісними особливостями. Відомо що вікові психологічні особливості зумовлені конкретноісторичними умовами розвитку спадковістю певною мірою характером виховання особливостями діяльності та стосунків з іншими людьми що впливає передусім на специфіку переходу від одного вікового періоду до іншого. Власне тому що навчання й виховання організовує діяльність дітей поетапно керує нею на основі накопиченого досвіду прагнучи враховувати наявні...
31664. ПСИХОЛОГІЯ ОСОБИСТОСТІ ПІДЛІТКА 35 KB
  Загальна характеристика підліткового віку Підлітковий вік це один з найважливіших етапів життя людини. Вік цей нестабільний ранимий важкий і виявляється що він більше ніж інші періоди життя залежить від реальностей довкілля. Загальна характеристика підліткового віку варіює в різних теоріях залежно від їх основної ідеї. Однак всі ці і багато інших підходів об'єднує те що в них існують загальні показники які характеризують даний вік.
31665. ПСИХОЛОГІЯ МОЛОДШОГО ШКОЛЯРА (ЗРІЛОГО ДИТИНСТВА) 100.5 KB
  Опановуючи новий для себе вид діяльності навчання молодші школярі ще багато часу й енергії віддають грі. У цих видах діяльності розгортаються їх стосунки з ровесниками і дорослими особистісне психічне життя і психічний розвиток формуються психічні новоутворення завдяки чому діти виходять на новий рівень пізнання світу і самопізнання відкривають нові власні можливості і перспективи. Нижня межа цього вікового періоду 6 7 років пов'язана з переходом до навчання як систематичної та цілеспрямованої діяльності. Цей симптом виявляється...