100 Delphi Components - - ActionList

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

Закон (действие) - изпълнение на някакво поведение, което е реакция на действието на потребителя, като щракване върху бутон или в раздел от менюто - инициатор на действие. Разработен клас ДЕЙСТВИЕ и редица негови наследници, които изпълняват много от стандартните действия, типични за приложенията на Windows.

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

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

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

components

обекта действие

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

Събитие OnExecute възниква, когато потребителят инициализира действие, например чрез щракване върху компонент (раздел от меню, бутон), свързан с това действие. Манипулаторът за това събитие трябва да съдържа процедура, която изпълнява това действие. Например манипулатор на събития OnExecute действия Изход В най-простия случай може да изглежда така, а в по-сложни случаи може да съдържа проверка за възможността за затваряне на приложението, заявки към потребителя и т.н. Едно от предимствата на използването на действия е, че заглавията на манипулатора стават значими и кодът става по-прозрачен. Всъщност заглавието е много по-ясно. ExitExecute, отколкото например, Button7Click или N14 Щракнете (опитайте се да намерите в голямото си приложение къде е този бутон Бутон7 или раздел от менюто N14). В резултат на това се освобождавате от необходимостта да давате смислени имена на бутоните и разделите на менюто, т.е. улеснете работата си с компоненти.

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

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

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

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

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

Не става въпрос само за запазване на кода, но и за неговата прозрачност, неговата разбираемост както за вас самите, така и за тези, които може би ще трябва да поддържат приложението ви в бъдеще.