RAD Studio 2010. Огляд компонентів Gestures (Жести), Різне, Програмування, статті

Ісчтонік: webdelphi


Отже, шановні читачі блогу, 25 серпня 2009 компанія Emabarcadero випустила в світ RAD Studio 2010. Тепер середу розробки називається Embarcadero RAD Studio 2010.


Розробники не поскупилися на нововведення, як в плані нових мовних конструкцій, типів даних тощо, так і у змісті палітри компонентів. До речі, про розробників, якщо Ви хочете побачити всю команду розробників, то можете зробити це таким чином:



  1. Запустіть RAD Studio 2010 і відкрийте розділ меню “Help – About Embarcadero Delphi“.

  2. У вікні, затисніть клавішу Alt і наберіть слово TEAM. В результаті Ви побачите список всіх розробників.

  3. Натисніть на списку лівою кнопкою миші і побачите фотографії

Ну, а ми поки продовжимо. У числі інших нововведень, Delphi 2010 обзавелася двома новими вкладками на палітрі компонентів: Touch і Gestures. На першій вкладці розташований один компонент – екранна клавіатура, а ось з приводу другої вкладки поговоримо трохи докладніше.


Gestures палітра компонентів


Компоненти Gestures дозволяють організувати управління Вашим додатком за допомогою жестів мишею. Всього вкладка містить чотири компоненти:



  1. Не візуальний компонент GestureManager – Основний компонент, за допомогою якого і здійснюється реалізація Gestures (Жестів) у додатку

  2. Компонент GestureListView – Компонент для перегляду всіх жестів, реалізованих в додатку

  3. Компонент GestureRecorder – Компонент для запису власних жестів.

  4. Компонент GesturePreview – Компонент для попереднього перегляду жестів, записаних користувачем.

Почнемо розбиратися по порядку.


1. Робота з GestureManager. Створюємо свої жести (Gestures) в редакторі жестів, використовуємо нестандартні жести в програмі.


Компонент Gesture Manager призначений для організації управління додатком за допомогою жестів. Всього компонент містить три властивості:


Компонент GestureManager


Властивість FileName – Сюди Ви можете записати будь-яку назву файлу в якому будуть зберігатися всі налаштування компонента. Допускається залишати порожнім, але, для порядку, запишемо в нього, наприклад manager.dat.


Властивість Name : String – ім’я вашого компонента;


Властивість Tag . Ніколи не користувався цією властивістю, але раз воно є то згадаємо і його.


Розташуємо компонент на формі програми та спробуємо реалізувати його роботу. Розглянемо побитий приклад – напишемо в заголовку форми фразу “Hello World”, але напишемо її з використанням Gesture Manager“a.


Виберіть у Object Inspector головну форму Вашого застосування. Тепер знайдіть список властивостей Touch :


Властивість Touch візуальних компонентів


В обов’язковому властивості GestureManager вибираємо наш компонент GestureManager1.


Тепер відкриваємо список Gestures Standard. Перед вами відкриється список доступних стандартних жестів, які Ви можете задіяти. Для того, щоб використовувати будь-якої жест, досить вибрати його в списку. Якщо ж жоден з жестів для Вас не підходить, то можна легко створити новий.


Давайте, наприклад, створимо новий жест у формі літери Z і використовуємо його в додатку.


Для цього робимо подвійний клік на піктограмі GustureManager1. Перед Вами відкриється вікно Custom Gestures. Ви можете:



Так як ми тільки почали розбиратися з Gestures, то для нас доступні тільки дві дії – створити новий жест і імпортувати список жестів.


Тиснемо у вікні Custom Gestures кнопку Create… і перед нами відкривається вікно дизайнера нових жестів. Не довго думаючи, затискаємо ліву кнопку миші і малюємо в дизайнері наш новий жест:


Gesture Designer


Як бачите, в редакторі можна задати чутливість ( Sensitivity ) Для жесту. Тобто за своєю суттю чутливість – це допустима похибка в межах якої жест буде “сприйматися” програмою. Чим менше чутливість жесту, тим простіше його відтворити людині, але при наявності великої кількості задіяних жестів більша ймовірність того, що жести будуть “плутатися”. Наприклад, встановіть значення Sensitivity для Вашого жесту рівним 1% і отримаєте відразу попередження про те, що Ваш жесть перетинається з 8 стандартними. Чим менше таких попереджень – тим краще і точніше програма буде обробляти події від миші.


Крім цього, Ви можете редагувати новий жест по точкам. При цьому можна оперувати як координатами точок, список яких розташований зліва, так і редагувати точки простим перетягуванням їх мишею по полю редактора. Для того, щоб робити лінії жестів рівними, я раджу робити так:



  1. Малюєте жест в редакторі.

  2. Тепер видаліть всі проміжні точки. Для цього вибираєте крапку і тиснете кнопку Delete Point або Ctrl+Del . Наприклад для нашого жесту, значущими точками будуть ті, які лежать в засадах ліній і на перетинах (всього 4 точки)

  3. Після видалення зайвих точок вирівнюєте лінії жесту, щоб вони точно відповідали Вашій жесту. У нашому випадку 3 прямих лінії повинні утворювати букву Z.

  4. Тепер вибираєте будь-яку точку і тиснете кнопку Insert PointCtrl+Ins або й нова точка вставиться в середину відрізка між виділеної і найближчою до неї крапкою. Виконуєте цю операцію до тих пір, поки не набереться достатня кількість рівномірно розташованих крапок.

В результаті редагування у мене вийшов ось такий гарний жест:


My Custom Gesture


Тепер ставимо жесту унікальне ім’я, наприклад, MyGesture і зберігаємо його в списку.


Повертаємося назад до головної формі нашого програми та у властивості ” Touch – Gestures – Custom “Вибираємо наш жест.


Для того, щоб Ваше додаток реагувало на жест можна використовувати два варіанти:



Розглянемо обидва варіанти. Створюємо подія onGesture у головної форми програми. Подія містить наступні параметри:

Sender: TObject;
const EventInfo: TGestureEventInfo;
var Handled: Boolean

Як можна помітити в EventInfo і міститься вся інформація по жесту.


Напишемо такий обробник події:

procedure TForm2.FormGesture(Sender: TObject;
const EventInfo: TGestureEventInfo; var Handled: Boolean);
begin
if EventInfo.GestureID=-1 then
Form2.Caption:=”Hello World”
end;

Тепер запустіть програму та затиснувши ліву кнопку миші намалюйте на формі наш жест. Якщо все зроблено правильно, то заголовок вікна змінитися на “Hello World”.



В обробнику події я перевіряв ID жесту. У нашому випадку жест MyGesture мав властивість GestureId = -1. Щоб не виникало питань скажу, що всі нестандартні жести мають негативні значення ID, тобто перший жест буде мати GestureId = -1, другий GestureId = -2, третій GestureId = -3 і т.д. Стандартні жести мають свої власні GestureId: TGestureId. Наприклад стандартний жест Left має GestureId = sgiLeft і т.д.


Тепер ускладнимо трохи задачу і використовуємо в програмі декілька жестів. Я використовував чотири жесту: нестандартний і три стандартних – Left, Right і Up. Обробник події у мене вийшов ось такий:

procedure TForm2.FormGesture(Sender: TObject;
const EventInfo: TGestureEventInfo; var Handled: Boolean);
begin
case EventInfo.GestureID of
-1:       Form2.Caption:=”Hello World”;
sgiLeft:  Form2.Caption:=”Gesture Left Detected”;
sgiRight: Form2.Caption:=”Gesture Right Detected”;
sgiUp:    Form2.Caption:=”Gesture Up Detected”;
end;
end;

Тепер запускаємо програму і радіємо. Програма по-різному реагує на жести і залежно від виробленого жесту змінює заголовок вікна:

Подібним чином Ви можете налаштувати реакцію Вашого застосування на будь-які жести.


Тепер другий спосіб. Покладіть на головну форму Вашого застосування компонент Action Manager . Тепер перейдіть в Object Inspector до будь-якого з обраних Вами жестів і виділіть його мишею.


Gesture_With_Action_Manager


Як бачите, без всяких зайвих дію Action Manager “Причепився” до наших жестам. Залишилося вибрати, що буде відбуватися при реакції на той чи інший жест. Можете використовувати як стандартні, так і свої дії в Action Manager .


Я не буду зупинятися на питаннях роботи з Action Manager , Тому що це питання не відноситься до теми статті. Скажу тільки, що використовувати цей компонент у зв’язці з Gesture Manager варто швидше за все тоді, коли Ваше додаток буде виконувати велику кількість стандартних операцій при реакції на жести, наприклад відкривати файли, копіювати текст, вставляти дані з буфера обміну і т.д. В інших випадках, на мій погляд, найбільш зручно і вигідно використовувати обробник події onGesture .


2. Компонент GestureListView. Переглядаємо доступні жести в додатку.


GestureListView


Тепер розташуєте на формі компонент GestureListView . Як Ви можете бачити, при вказівці у властивості GestureManager компонента нашого GestureManager1, в в список автоматично додався наш нестандартний жест MyGesture.


GestureListView також як і будь-який інший компонент з VCL може реагувати на жести.


При роботі з цим компонентом Ви можете розбивати свої жести на групи, кожній з груп може відповідати своя іконка з ImageList , Свій заголовок і опис. Компонент зручно використовувати, наприклад при показі користувачеві доступних в програмі жестів або при запису жестів зі своєї програми.


3. Компонент GestureRecorder. Даємо можливість користувачам самим створювати жести.


GestureRecorder


Розташуйте на формі компонент GestureRecorder . Змініть властивість Caption компонента, наприклад на “Рекордер жестів”. У властивості GestureManager виберемо GestureManager1.


Тепер запустіть додаток і з затиснутою лівою кнопкою миші накресліть в рекордері якусь криву. Ця крива автоматично потрапить в список жестів. При цьому доданий жест не буде мати будь-якого назви. Тому, щоб не виникало виняткової ситуації при додаванні другого жесту з рекордера (жести з однаковими іменами, навіть порожніми – не припустимі) доцільно змінювати назву нового жесту в момент його додавання в менеджер, наприклад ось так:

procedure TForm2.GestureRecorder1GestureRecorded(Sender: TObject;
RecordedGesture: TGestureCollectionItem);
begin
RecordedGesture.Name:=”Test “+IntToStr(GestureManager1.CustomGestureCount)
end;

Надалі Ви зможете змінювати назви ваших жестів, наприклад через їх редагування в GestureListView . Для цього розташуйте на формі Edit і кнопку. На подію onSelectItem у GestureListView1 напишіть:

procedure TForm2.GestureListView1SelectItem(Sender: TObject; Item: TListItem;
Selected: Boolean);
begin
Edit1.Text:=GestureManager1.CustomGestures[item.Index].Name
end;

а на onClick у кнопки:

procedure TForm2.Button1Click(Sender: TObject);
begin
GestureManager1.CustomGestures[GestureListView1.Selected.Index].Name:=Edit1.Text
end;

Тепер запустіть програму та виберіть жест у списку. Його назва з’явиться в Edit “Е. Змініть текст Edit “А і натисніть кнопку – нова назва автоматично з’явиться в GestureListView .


4. Передпроглядання жестів. Компонент GesturePreview.


GesturePreview


Для того, щоб зробити попередній перегляд Ваших жестів, розташуйте на формі компонент GesturePreview . На відміну від GestureRecorder , Цьому комопненту для роботи потрібно вказати у властивості GestureProvider не менеджер жестів ( GestureManager ), А GestureListView . Після цього Ви можете налаштувати, наприклад такі властивості:



Для того, щоб проводити не тільки попередній перегляд, але і тестування жесту, можна зробити наприклад так:


1. Визначити у компонента GesturePreview у властивостях Touch Того ж GestureManager і при додаванні нових жестів в менеджер автоматично їх задіяти в компоненті GesturePreview, Наприклад, написавши в обробнику події onGestureRecorded у рекордера жестів:

GestureManager1.SelectGesture(GesturePreview1,RecordedGesture.GestureID);

2. При спрацьовуванні певного жесту у GesturePreviw виводити повідомлення користувачеві. Я, наприклад, організував це за допомогою ось такого обробника події:

procedure TForm2.GesturePreview1Gesture(Sender: TObject;
const EventInfo: TGestureEventInfo; var Handled: Boolean);
begin
if EventInfo.GestureID=GestureManager1.CustomGestures[GestureListView1.Selected.Index].GestureID then ShowMessage (“Спрацював жест” + GestureManager1.CustomGestures [GestureListView1.Selected.Index]. Name)
end;

Тобто повідомлення з’являється тільки тоді, коли спрацьовує жест, вибраний в даний момент в GestureListView .


Ну, і нарешті, останнє про що слід сказати – це про редагування жестів, які Ви можете записувати з свого застосування.


Для того, щоб отримати список всіх точок жесту достатньо скористатися його властивістю Points , Яке являє собою масив точок TPoints . Масив можна читати таким чином:

with GestureManager1.CustomGestures[item.Index] do
for I:=0 to Length(Points)-1 do
ListBox1.Items.Add(“X = “+IntToStr(Points[i].X)+
“; Y = “+IntToStr(Points[i].Y));

Ну, а далі можете ці точки редагувати, видаляти і пр.


Ось Вам, шановні читачі, і невеликий огляд нових компонентів Gestures в RAD Studio Delphi 2010 . Звичайно, не можна з 100-відсотковою впевненістю стверджувати, що ці компоненти знайдуть широке застосування в додатках під Win32, але те, що в компонентах заявлена ​​підтримка Touch Screen мабуть визначить в майбутньому широке застосування цих компонентів при розробці додатків під ті ж смартфони та ін атрибутику сучасної людини. А поки можете використовувати ці компоненти, наприклад для швидкого заповнення великих таблиць випадковими числами або для виконання простеньких, але часто необхідних від користувача операцій.

Схожі статті:


Сподобалася стаття? Ви можете залишити відгук або підписатися на RSS , щоб автоматично отримувати інформацію про нові статтях.

Коментарів поки що немає.

Ваш отзыв

Поділ на параграфи відбувається автоматично, адреса електронної пошти ніколи не буде опублікований, допустимий HTML: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>

*

*