Главно меню
Главно меню - компонент MainMenu
- размер на шрифта намалете размера на шрифта увеличете размера на шрифта
- Тюлен
Главно меню - компонент MainMenu
Delphi има два компонента на менюто: MainMenu, главното меню, и PopupMenu, изскачащото меню. И двата компонента се намират на страницата Standard. Тези компоненти имат много общи неща. Нека започнем с компонента MainMenu.
Това е невизуален компонент, т.е. разположението му върху формуляра по време на процеса на проектиране няма значение за потребителя - той все още ще вижда не самия компонент, а само генерираното от него меню.
Основното свойство на компонента е Items. Попълва се с помощта на Menu Builder, извикан чрез двойно щракване върху компонента MainMenu или чрез натискане на бутона с многоточие до свойството Items в прозореца на Object Inspector. В резултат на това ще се отвори прозорец, чийто изглед е показан на фигурата по-долу. В този прозорец можете да проектирате всички менюта. Фигурата показва в действие менюто, което съответства на създаденото.
Прозорец на конструктора на менюто
Резултат от дизайна на менюто
Когато работите в Menu Builder, нови секции могат да бъдат въведени чрез поставяне на курсора в поле с точки, показващо местоположението на новата секция. Ако в същото време разделът е бил въведен на грешното място, можете да го плъзнете с мишката до мястото, където ви трябва. Друг начин за въвеждане на нов раздел е да използвате контекстното меню с десен бутон. Ако първо изберете раздел от менюто и изберете командата Вмъкване от контекстното меню, рамката на новия раздел ще бъде вмъкната преди избрания преди това. От контекстното меню можетесъщо изпълнете командата Create Submenu, която ви позволява да въведете подменю в избрания раздел.
Когато изберете нов раздел, ще видите в инспектора на обекти много от свойствата на този раздел. Факт е, че всеки раздел от менюто, т.е. всеки елемент от свойството Items е обект от типа TMenuItem, който има свои собствени свойства, методи и събития.
Свойството Caption обозначава заглавието на раздела. Попълването на това свойство следва същите правила като попълването на подобно свойство в бутоните, включително използването на знака амперсанд за обозначаване на клавишни комбинации. Ако въведете знак минус „-“ като стойност на Caption на следващия раздел, в менюто ще се появи разделител вместо раздела (разделители след разделите Запиши като, Настройки на принтера и Опции).
Свойството Name указва името на обекта, съответстващ на секцията от менюто. Много е полезно да дадете на тези обекти смислени имена, в противен случай скоро ще се объркате от безсмислени имена като N21. Имена като MFile, MOpen, MSave и т.н. са много по-ясни.
Свойството Shortcut дефинира клавиши за бърз достъп до раздел от менюто - "горещи" клавиши, с помощта на които потребителят, без дори да влиза в менюто, може по всяко време да извика изпълнението на процедурата, свързана с този раздел. За да дефинирате клавишни комбинации, трябва да отворите падащия списък със свойството Shortcut в прозореца на Object Inspector и да изберете желаната клавишна комбинация от него. Тази комбинация ще се появи в лентата на раздела на менюто.
Свойството Default определя дали дадената секция е секция по подразбиране на своето подменю, т.е. секция, която се изпълнява, когато потребителят щракне два пъти върху родителската секция. Едно подменю може да съдържа само една секция по подразбиране с удебелен шрифт.
Свойството Break се използва в longменю, за да разделите списъка със секции на множество колони. Възможни стойности на Break: mbNone - няма разделяне на менюто (това е стойността по подразбиране), mbBarBreak и mbBreak - в менюто се въвежда нова колона за раздел, отделена от предишната с лента (mbBarBreak) или интервали (mbBreak). Фигурата показва пример, при който раздел 1-3 е зададен на Break = mbBreak, а раздел 1-5 е зададен на Break = mbBarBreak.
Пример за колонно меню
Свойството Checked, зададено на true, показва, че в раздела на менюто ще се покаже маркер за отметка, което показва, че този раздел е избран (вижте раздела за автоматично запазване на фиг. 6.1, 6.2). Вярно е, че самият маркер не се променя и трябва да вмъкнете оператор като
(в горното изявление се предполага, че секцията от менюто е наречена MAutoSave).
Друго свойство, което ви позволява да вмъквате маркери в секциите на менюто, е RadioItem. Това свойство, зададено на true, указва, че този раздел трябва да работи като бутон за избор във връзка с други раздели, които имат същата стойност на свойството GroupIndex. По подразбиране стойността на GroupIndex е 0. Но можете да я зададете да бъде по-голяма от нула и тогава, ако има няколко секции с една и съща стойност на GroupIndex и с RadioItem = true, тогава маркерите за флаг могат да се появят в тях и само в един от тях (свойството RadioItem е зададено на true в секциите Template 1 и Template 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 на компонентите TMainMenu. Ако искате вторичните менюта на формуляри да бъдат обединени с менюто на главния формуляр, тогава AutoMerge трябва да бъде зададено на true за всеки такъв вторичен формуляр. В този случай свойството AutoMerge на главния формуляр трябва да остане невярно.
Как се групират менютата се определя от свойството GroupIndex на секциите. По подразбиране всички раздели на менюто имат една и съща стойност на GroupIndex нула. Ако искате да обедините менюто, тогава секциите трябва да бъдат зададени на ненамаляващи числа на свойствата на GroupIndex. След това, ако раздели от вграденото меню имат същите стойности на GroupIndex като някои раздели от менюто на главния формуляр, тогава тези раздели заместват съответните раздели на главното меню. В противен случай секциите на подменюто се вграждат между елементите на главното меню според номерата на GroupIndex. Ако вграденият раздел има GroupIndex по-малък от всеки от разделите на главното меню, тогава разделите са вградени в началото.
След това, в момента на активиране на втората форма, в първата се появява меню със структурата:
Нека, например, в основната и вторичната форма на структурата на менюто има следните стойности на GroupIndex:
Тогавав момента, в който се активира втората форма, в първата се появява меню със структура:
В този пример нямаше секции, които да имат еднакви стойности на GroupIndex в двете форми. Ако имаше такива, тогава при активиране на втората форма съответните секции от нейното меню ще заменят подобните секции на първата форма.
Ако менюто има секции, които работят като радио бутони, тогава не трябва да забравяме, че тяхното взаимодействие също се определя от свойствата на GroupIndex.
Сега нека се съсредоточим върху един от проблемите, свързани с менютата в MDI приложенията, споменати по-горе. В тях потребителят може да отваря толкова прозорци с документи, колкото му трябват. Обикновено такива приложения имат меню Window, което съдържа секции като New, Arrange и т.н. Последният обикновено е списъкът с отворени прозорци на документи, в който се въвеждат имената на прозорците, отворени от потребителя. Избирайки от този списък, потребителят може да превключва между прозорците на документи.
Меню на прозореца в MDI приложение със списък на отворени документи
За да включите списък с отворени прозорци в раздела на менюто, трябва да посочите името на менюто, в края на което списъкът трябва да бъде поставен в свойството WindowMenu на главната форма на MDI приложението. Посочва се името на менюто, а не секциите от падащия списък. Например фигурата трябва да показва името на елемента от менюто, съответстващ на командата Window.
Едно от безусловните изисквания към менюто на приложението за Windows е стандартизирането на менютата и техните секции. Командата Запиши като шаблон помага за това. в контекстното меню, което се появява, когато щракнете с десния бутон в прозореца на Меню Конструктор. Тази команда извежда диалоговия прозорец, показан на фигурата по-долу. В този диалогов прозорец можете да посочите описанието (заглавието), под което искате да запазите менюто си в горния прозорец.Впоследствие във всяко от вашите нови приложения можете да заредите този шаблон в менюто, като изберете командата Вмъкване от шаблон от изскачащото меню в прозореца на Меню Конструктор.
Прозорецът за запазване на шаблона на разработеното меню