Delphi-Help

Разпращане на събития - Компоненти, свързани с ActionList

  • размер на шрифта намалете размера на шрифта увеличете размера на шрифта
  • Печат

Разпращане на събития - Компоненти, свързани с ActionList

Започвайки с Delphi 4, се появи набор от инструменти, който без добавяне на някакви принципно нови функции ви позволява да организирате и рационализирате разработването на обектно-ориентирани приложения. Освен това компетентното му използване спестява много време по време на проектирането. За организиране на изпращане на събития са въведени следните концепции.

Действие - изпълнението на някакво поведение, което е реакция на действието на потребителя, като щракване върху бутон или върху раздел от менюто, който инициира действие. Класът TAction и редица негови потомци са разработени, които реализират много стандартни действия, типични за Windows приложения.

Списъкът с действия е компонент от типа ActionList, който съдържа действия, предоставени в приложението. Това е интерфейс за разработчици, който организира работата му с действия по време на процеса на проектиране.

Редакторът на връзки е обект TActionLink, който поддържа връзка между действия и инициатори на действия. Линкерът определя какво действие трябва да се извърши за даден инициатор.

Целта на дадено действие е обект, който отразява резултата от дадено действие. Това може да бъде прозорец за показване или редактиране на текст, набор от данни и т.н.

изпращане

свързани едно

Прозорец за избор на стандартни действия

На страницата за събития на Object Inspector са определени три събития за всяко действие: OnExecute, OnUpdate и OnHint.

Събитието OnExecute се случва, когато потребителят инициализира действие, например чрез щракване върху компонента (раздел от менюто, бутон), свързан с това действие. Манипулаторът за това събитие трябва да съдържа процедура, която изпълнява това действие. Например манипулаторът на събития за събитието OnExecute на действието Exit може да изглежда в най-простия случай

а в по-сложни случаи може да съдържа проверка за възможността да се затвори приложението, заявки към потребителя и т.н. Едно от предимствата на използването на действия е, че заглавията на манипулатора стават значими и кодът става по-прозрачен. Всъщност заглавката ExitExecute е много по-ясна от, например, Button7Click или N14Click (опитайте се да намерите в голямото си приложение къде този бутон е Button7 или раздел от менюто N14). В резултат на това се освобождавате от необходимостта да давате смислени имена на бутоните и разделите на менюто, т.е. улеснете работата си с компоненти.

Събитието OnUpdate се случва периодично между действията. Тези събития спират да се задействат само когато събитието се изпълнява или когато потребителят не прави нищо и компютърът е в чакащо състояние. Манипулаторът на събития OnUpdate може да съдържа някои настройки, подготовка на очаквани по-нататъшни действия или изпълнение на някои фонови операции.

Събитието OnHint се случва, когато раздел с подсказка се показва на екрана в резултат на това, че потребителят задържа курсора на мишката върху компонента, който инициализира събитието.

Събитията OnUpdate и OnHint в обекта за действие обогатяват възможностите за дизайн на приложението ви. Без този обект подобни събития отсъстват и при необходимост те трябва да бъдат моделирани с помощта на по-сложни техники.

Свързването на обекти за действие със специфични инициализатори на действия - контролни елементи като бутони, секции от менюто и т.н., се осъществява чрез свойството Action, което е достъпно за всички контролни елементи. Поставете бутон във формуляра си и ще видите това свойство в Object Inspector. Разгънете падащия списък и изберете от него действието, което преди това описахте. Ще забележите, че след това свойствата на обекта за действие като Caption, Hint и др. Ще бъдат прехвърлени към бутона и че манипулаторът, предоставен от вас за това действие, ще бъде вмъкнат в неговото събитие OnClick. Ако след това въведете меню с раздел, съответстващ на същото действие в приложението и посочите същата стойност на свойството Action в него, тогава свойствата и манипулаторите на събития на обекта за действие ще бъдат прехвърлени в този раздел на менюто. Не е нужно да задавате отново стойността на Hint, Caption и т.н.

Подобна връзка между свойствата на обекта за действие и свойствата на контролите се извършва от класа TActionLink и неговите потомци. Свойствата за действие като Надпис, Проверено, Активирано, HelpContext, Подсказка, ImageIndex, Преки пътища, Видими се предават на компонентите. Във всеки компонент обаче разработчикът може да промени свойството, предадено му. Няма обратна връзка за компонентите на TActionLink, така че тези промени ще бъдат локални и няма да бъдат отразени в други компоненти. Ако трябва да промените свойствата на всички компоненти, свързани с едно действие, трябва да промените свойството на обекта на действие. Това улеснява програмното управление на компоненти, свързани с едно и също действие. Например, ако в даден момент трябва да направите два компонента недостъпни (или, обратно, достъпни) два компонента - бутона Button3 и раздела от менюто N5, свързани с едно събитие (нека го наречем обект Do), тогава при липса за централизирано изпращане на събития чрез ActionList трябваше да напиша два оператора: