ImageList, ActionList 12 Технологія розробки програм
Грамотна розробка серйозної програми повинна починатися не зі створення красивого і зручного інтерфейсу користувача, а зі складаннясписку дій,які користувач зможе виконувати за допомогою даної програми. Звичайно, у міру проектування цей первісний список розширюватиметься та уточнюватиметься. Але хоча б початковий варіант такого списку має бути відправною точкою проектування. Без цього навряд чи можна створити щось варте.
Коли список дій складено, можна почати розмірковувати над виконавчими елементами інтерфейсу, за допомогою яких користувач може ініціювати дії. І тут можуть виникнути певні складнощі. Зазвичай однієї й тієї ж дії передбачається кілька ініціаторів. Наприклад, зазвичай деякі розділи головного меню дублюються швидкими кнопками інструментальних панелей, розділами контекстних меню, гарячими клавішами, іноді звичайними кнопками. Таке дублювання зручне для користувача. Але незалежна розробка всіх цих елементів, що управляють, часто призводить до невиправданого дублювання кодів, а головне — знижує можливості модернізації та супроводу програми. Дійсно, якщо ви надумаєте щось змінити в одній з дій, ви повинні вносити зміни відразу в декількох місцях програми. І не дай боже щось пропустити: узгоджена робота керуючих елементів порушиться.
Щоб уникнути подібних складнощів, у Delphi передбачені компоненти, що здійснюютьцентралізоване управліннядіями, їхдиспетчеризацію.Складений вами список дій ви заносите в спеціальний компонент - диспетчер. Для кожної дії при цьому ви можете встановити безліч властивостей: написи на відповідних елементах управління, піктограми, тексти ярликівпідказок, гарячі клавіші та багато іншого. Ви також можете написати обробник, який забезпечує виконання задуманої дії. Втім, як ви побачите далі, для стандартних дій це навіть не потрібно робити. Розробники Delphi створили багато класів таких стандартних дій, у яких необхідні функції реалізуються автоматично. Так що, не ознайомившись у деталях з цими можливостями, ви ризикуєте "винаходити велосипед". Ви витратите час і сили на їхню реалізацію, а потім виявиться, що те саме можна було зробити кількома рухами миші, причому набагато краще, ніж ви це придумали самі.
Якщо ви сформували такий перелік дій, то подальше проектування керуючих елементів значно спрощується. У більшості елементів є властивістьAction.Досить послатися в цій властивості на одну з дій, як усі властивості цієї дії та обробник, що реалізує його, перенесуться в даний керуючий елемент. І вам не доведеться для кожного елемента задавати все це заново. Уявляєте, скільки часу ви заощадите? А якщо ви надалі щось зміните в реалізації дії або в її властивостях (наприклад, змініть гарячі клавіші або піктограму), то вам навіть не треба буде згадувати, які елементи в різних формах програми ініціюють цю дію. Всі ці елементи автоматично сприймуть зміни.
У Delphi передбачена подібна централізація управління додатком на кількох рівнях. Для диспетчеризації дій, починаючи з Delphi 4, є компонентActionList,Він спростив створення меню та інструментальних панелей, дозволив робити програми більш зрозумілі та структуровані. Вже Delphi 5 число стандартних дій, яких можна звертатися зActionList,було понад двадцять. Ау Delphi 7 їх число досягло 66. Уявляєте, скільки стандартних операцій реалізували за вас творці Delphi?
Крім того, починаючи з Delphi 6, у бібліотеці з'явилася група набагато потужніших компонентів, призначених для управління подіями:ActionManager,ActionMainMenuBar,ActionToolBar,CustomizeDlg .Вони не тільки забезпечують нові можливості візуального проектування, але й вирішують, наприклад, таке завдання, як налаштування меню та інструментальних панелей користувачем.
Поки що ми розглядали лише диспетчеризацію дій. Але централізація управління програмою має ще кілька рівнів. По-перше, треба згадати список зображеньImageList,який може централізовано постачати зображеннями та піктограмами різні елементи програми
Перш ніж переходити до конкретних питань, треба домовитися про те, що ми розумітимемо під діями.
Дія(action) — реалізація деякої поведінки, що є реакцією на вчинок користувача, такий, як клацання на кнопці або на розділі меню — ініціаторідіїабоінтерфейсному компонентідії . Прикладами дій є відкриття файлу та його завантаження в якийсь приймач, збереження інформації у файлі на диску, встановлення атрибутів шрифту та вирівнювання текстів у вікнах редагування, пошук та заміна фрагментів тексту, навігація по набору даних, виконання якогось зовнішнього застосування, виклик довідки та багато іншого.
Перелічені приклади належали до стандартних дій. Насправді таких дій набагато більше, ніж вище. Усі стандартні дії реалізовані в Delphi класами, що успадковують базовий клас дій TAction. Обробники подібних дій у ряді випадків вам писати взагалі не треба,оскільки вони реалізовані у відповідних класах.
Крім стандартних дій у реальних додатках є, звичайно, і нестандартні, пов'язані з розрахунками, обробкою даних і т.п. Об'єкти таких дій вам треба створити самим (робиться це дуже просто методами візуального програмування) і для них треба написати обробники, що реалізують ці дії.
Таким чином, як уже говорилося, перш ніж починати програмування програми, вам потрібно скласти для себе список дій, які повинні бути доступні майбутньому користувачеві через розділи меню, панелі інструментів, кнопки та інші елементи управління. При програмуванні цей список реалізується спеціальними компонентами, що забезпечують диспетчеризацію дій, Delphi 4 і 5 був тільки один такийдиспетчер дій— компонентActionList.Редактор цього компонента дозволяв сформувати список дій, написати обробники, виконують задумані дії, задати основні властивості майбутніх інтерфейсних компонентів - піктограми, написи, швидкі кнопки, підказки тощо. Починаючи з Delphi 6, з'явився ще один диспетчер дій - компонентActionManager, який набагато потужнішийActionList.
Інтерфейсні компоненти дій зазвичай повинні містити зображення, що їх пояснюють. Ці зображення збираються у списку зображень - компонентіImageList.Для нестандартних дій ці зображення ви повинні завантажити в ImageList самі. А зображення для стандартних дій завантажуються до нього автоматично у міру формування списку диспетчері дій.
Таким чином, послідовність формування списку дій та проектування меню та інструментальних панелей зводиться до наступних кроків:
1. Продумується та складається списокдій, які мають бути доступні майбутньому користувачеві через розділи меню, інструментальні панелі, кнопки та інші елементи керування.
2. Для тих нестандартних дій, які мають бути доступними зі швидких кнопок інструментальної панелі, готується список піктограм на кнопках у компоненті ImageList.
3. На головну форму програми переноситься компонент диспетчеризації дій:ActionListабоActionManager.Компонент зв'язується з ImageList. Формується список стандартних та нестандартних дій.
5. Записуються обробники подій виконання для всіх нестандартних дій. Стандартні дії обробляються автоматично і для багатьох досить задати деякі властивості обробки. Втім, як видно пізніше, іноді треба писати обробники і для стандартних дій.
Подальші кроки залежать від того, використовуєте компонентActionList, або ActionManager.Для ActionList далі треба зробити наступне:
6. На форму переноситься компонентMainMenu— головне меню, що зв'язується з ImageList, у компоненті формується меню і в його розділах даються посилання на дії, описанів ActionList.
7. На формі створюється інструментальна панель (зазвичай компонентТооllBaг).Панель зв'язується зImageList,а в її кнопках даються посилання на дії, описанів Action List.>
Ось загалом послідовність операцій при проектуванні списку