Головне меню

Головне меню - компонент MainMenu

  • розмір шрифту зменшити розмір шрифту збільшити розмір шрифту
  • Друк

Головне меню - компонент MainMenu

Delphi має два компоненти, що представляють меню: MainMenu — головне меню, і PopupMenu — спливаюче меню. Обидва компоненти розташовані на сторінці Standard. Ці компоненти мають багато спільного. Почнемо розгляд із компонента MainMenu.

Це невізуальний компонент, тобто. місце його розміщення на формі в процесі проектування не має жодного значення для користувача - він все одно побачить не сам компонент, а лише згенероване ним меню.

Основна властивість компонента – Items. Його заповнення здійснюється за допомогою Конструктора Меню, що викликається подвійним клацанням на компоненті MainMenu або натисканням кнопки з трьома крапками поруч із властивістю Items у вікні Інспектора Об'єктів. В результаті відкриється вікно, вигляд якого представлений нижче. У цьому вікні можна спроектувати все меню. На малюнку показано у роботі те меню, що відповідає проектованому.

меню

Вікно Конструктора Меню

меню

Результат конструювання меню

При роботі в конструкторі меню нові розділи можна вводити, поміщаючи курсор у рамку з точок, що позначає місце розташування нового розділу. Якщо при цьому розділ вівся не на потрібному місці, ви можете відбуксирувати його мишею туди, куди вам треба. Інший шлях введення нового розділу - використання контекстного меню, що спливає при натисканні правою кнопкою миші. Якщо ви попередньо виділите якийсь розділ меню і виберіть з контекстного меню команду Insert, то рамка нового розділу вставиться перед виділеним. З контекстного меню ви можететакож виконати команду Create Submenu, що дозволяє ввести підменю у виділений розділ.

Вибираючи новий розділ, ви побачите в Інспекторі Об'єктів безліч властивостей цього розділу. Річ у тім, кожен розділ меню, тобто. кожен елемент властивості Items є об'єктом типу TMenuItem, що володіє своїми властивостями, методами, подіями.

Властивість Caption означає напис розділу. Заповнення цієї властивості підпорядковується тим самим правилам, що й заповнення аналогічного властивості в кнопках, включаючи використання символу амперсанта позначення клавіш швидкого доступу. Якщо ви введете символ мінус «-» як значення Caption чергового розділу, то замість розділу в меню з'явиться роздільник (розділювачі після розділів Зберегти як, Налаштування принтера та Опції).

Властивість Name визначає ім'я об'єкта, що відповідає розділу меню. Дуже корисно давати цим об'єктам осмислені імена, тому що інакше ви скоро заплутаєтеся в іменах типу N21, що нічого не говорять. Набагато зрозуміліше імена типу MFile, MOpen, MSave і т.п.

Властивість Shortcut визначає клавіші швидкого доступу до розділу меню - "гарячі" клавіші, за допомогою яких користувач, навіть не заходячи в меню, може у будь-який момент викликати виконання процедури, пов'язаної з цим розділом. Щоб визначити клавіші швидкого доступу, потрібно відкрити список властивості Shortcut у вікні Інспектора Об'єктів і вибрати з нього потрібну комбінацію клавіш. Ця комбінація з'явиться у рядку розділу меню.

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

Властивість Break використовується у довгихменю, щоб розбити список розділів на кілька стовпців. Можливі значення Break: mbNone - відсутність розбиття меню (це значення прийнято за замовчуванням), mbBarBreak і mbBreak - в меню вводиться новий стовпець розділів, відокремлений від попереднього смугою (mbBarBreak) або пробілами (mbBreak). На малюнку показано приклад, у якому розділ 1-3 встановлено значення Break = mbBreak, а розділ 1-5 — Break = mbBarBreak.

Приклад меню з розбиттям на стовпці

Властивість Checked, встановлена ​​в true, вказує, що в розділі меню відображатиметься маркер прапорця, який показує, що цей розділ обраний (див. рис. 6.1, 6.2 розділ «Автозбереження»). Правда, сам по собі цей маркер не змінюється і в обробник події OnClick такого розділу треба вставляти оператор типу

(У наведеному операторі мається на увазі, що розділ меню названий MAutoSave).

Ще однією властивістю, що дозволяє вводити маркери розділи меню, є RadioItem. Ця властивість, встановлена ​​в true, визначає, що цей розділ повинен працювати в режимі радіокнопки спільно з іншими розділами, що мають те саме значення властивості GroupIndex. За замовчуванням значення GroupIndex дорівнює 0. Але можна задати його більшим за нуль і тоді, якщо є кілька розділів з однаковим значенням GroupIndex і з RadioItem = true, то в них можуть з'являтися маркери прапорців, причому тільки в одному з них (властивість RadioItem встановлено в true у розділах Шаблон 1 та Шаблон 2, що мають однакове значення GroupIndex). Якщо ви поставите програмне забезпечення в одному з цих розділів Checked = true, то в інших розділах Checked автоматично скинеться в false. Втім, встановлення Checked = true лежить на програмі; ця установка може виконуватися аналогічно наведеному вище оператору.

Описані маркери прапорців у режимірадіокнопок і в звичайному режимі використовуються для розділів меню, що є різними опціями, взаємовиключними або сумісними.

Для кожного розділу можуть бути встановлені під час проектування або програмно під час виконання властивостей Enabled (доступний) та Visible (видимий). Якщо встановити Enabled = false, розділ буде зображуватися сірим написом і не реагуватиме на клацання користувача. Якщо ж встановити Visible = false, то розділ взагалі не буде видно, а решта розділів зімкнуться, посівши місце невидимого. Властивості Enabled та Visible використовуються для того, щоб змінювати склад доступних користувачеві розділів залежно від режиму роботи програми.

Починаючи з Delphi 4, передбачена можливість введення в розділи меню зображень. За це відповідальні властивості розділів Bitmap та ImageIndex. Перше з них дозволяє безпосередньо ввести зображення в розділ, вибравши його із вказаного файлу. Друге дозволяє вказати індекс зображення, яке зберігається у зовнішньому компоненті ImageList. Вказівку на цей компонент можна задати у властивості Images компонента MainMenu. Індекси починаються з 0. Якщо ви вкажете індекс -1 (значення за промовчанням), зображення не буде.

Ми розглянули всі основні властивості об'єктів, які відповідають розділам меню. Основна подія розділу - OnClick, що виникає при натисканні користувача на розділі або при натисканні "гарячих" клавіш швидкого доступу.

Розглянемо тепер питання поєднання головних меню вторинних форм із меню головної форми. Йдеться про додатки з декількома формами, в яких і головна, допоміжні форми мають свої головні меню - компоненти MainMenu. Звичайно, користувачеві незручно працювати одночасно з кількома вікнами, кожне з яких має меню. Зазвичай треба, щоб ці менюзливалися в одне меню головної форми.

Програми з декількома формами можуть бути двох видів: програми з інтерфейсом безлічі документів - так звані MDI програми, і звичайні програми з головною та допоміжними формами. Типовими прикладами програм MDI є програми Word і Excel. Розгляд особливостей цих видів додатків виходить за межі цієї книги. Зараз нас цікавить лише одне питання: як поєднуються меню різних форм. У MDI додатках меню дочірніх форм завжди поєднуються з меню батьківської форми. А у додатках з декількома формами наявність чи відсутність об'єднання визначається властивістю AutoMerge компонентів ТМаinMenu. Якщо потрібно, щоб меню вторинних форм поєднувалися з меню головної форми, то в кожній такій вторинній формі потрібно встановити AutoMerge у true. При цьому властивість AutoMerge головної форми має залишатися у false.

Спосіб об'єднання меню визначається властивістю розділів GroupIndex. За замовчуванням усі розділи меню мають однакове значення GroupIndex, що дорівнює нулю. Якщо потрібно об'єднання меню, то розділам треба задати незменшувані номери властивостей GroupIndex. Тоді, якщо розділи вбудованого меню мають самі значення GroupIndex, що й якісь розділи меню основної форми, ці розділи замінюють відповідні розділи основного меню. В іншому випадку розділи допоміжного меню вбудовуються між елементами основного меню відповідно до номерів GroupIndex. Якщо вбудований розділ має GroupIndex менший, ніж будь-який з розділів основного меню, розділи вбудовуються на початок.

Тоді, коли активізується друга форма, у першій з'являється меню зі структурою:

Нехай, наприклад, в основній та вторинній формах структури меню має такі значення GroupIndex:

Тодіу момент, коли активізується друга форма, у першій з'являється меню зі структурою:

У цьому прикладі були відсутні розділи, що мають в обох формах однакові значення GroupIndex. Якби такі були, при активізації другої форми відповідні розділи її меню замінили б аналогічні розділи першої форми.

Якщо в меню є розділи, що працюють як радіокнопки, то не можна забувати, що їхня взаємодія також визначається властивостями GroupIndex.

Тепер зупинимося на одному з питань, пов'язаних з меню у згадуваних вище програмах MDI. У них користувач може відкривати скільки потрібно вікон документів. Зазвичай у подібних програмах є меню Вікно, яке містить такі розділи, як Нове, Упорядкувати і т.п. Останнім зазвичай йде список відкритих вікон документів, до якого заносяться назви відкритих користувачем вікон. Вибираючи цей список, користувач може перемикатися між вікнами документів.

головне

Меню «Вікно» у програмі MDI зі списком відкритих документів

Щоб увімкнути меню розділу списку відкритих вікон, треба у властивості WindowMenu головної форми програми MDI вказати ім'я меню, наприкінці якого має поміщатися список. Вказується саме ім'я меню, а не розділів списку, що випадає. Наприклад на малюнку має бути вказано ім'я елемента меню, відповідного команді Вікно.

Однією з безумовних вимог, що висуваються до меню програм для Windows, є стандартизація меню та їх розділів. Цьому допомагає команда Save As Template. у контекстному меню, що спливає при натисканні правою кнопкою миші у вікні Конструктора Меню. Ця команда викликає діалог, наведений на малюнку нижче. У цьому діалозі можна у верхньому вікні вказати опис (заголовок), під яким хочете зберегти ваше меню.Згодом у будь-якій новій програмі ви можете завантажити цей шаблон у меню, вибираючи зі спливаючого меню у вікні Конструктора Меню команду Insert From Template.

головне

Вікно збереження шаблону розробленого меню