Toolbar и кнопки с пиктограммами

Строка состояния — далеко не единственный довольно часто применяемый элемент интерфейса в современных приложениях. Не меньшее, а, быть может, кроме того большее их число владеет вторым необходимым элементом интерфейса — панелью инструментов. Опять-таки, для этих целей возможно применять простую панель с размещенными на ней простыми же кнопками. Но для инструментальной панели (tool bar) эргономичнее применять компонент, что так и именуется — ToolBar.

Инструментальная панель, первым делом, предназначена для размещения особых кнопок инструментальной панели — ToolButton. К тому же, на нее возможно поместить фактически каждый компонент, включая простые кнопки, перечни, текстовые процессоры и т.д. Свойства этого компонента приведены в таблице 13.5.

Таблица 13.5. Свойства компонента ToolBar
Свойство Тип Описание
HideClippedButtons Boolean Определяет обработку кнопок, затененных смежной панелью инструментов
ButtonCount Integer Показывает количество кнопок, расположенных на панели
ButtonHeight Integer Определяет высоту элементов управления, расположенных на панели
Buttons array of TToolButton Содержит массив всех кнопок, имеющихся на панели
ButtonWidth Integer Определяет высоту кнопок, расположенных на панели
Customizable Boolean Определяет возможность настройки панели пользователем
CustomizeKeyName string Определяет имя раздела в реестре, в котором будет сберигаться информация о пользовательских настройках
CustomizeValueName string Определяет имя записи в реестре, в которой будет сберигаться информация о пользовательских настройках
DisabledImages TCustomImageList Определяет коллекцию картин для неактивного состояния кнопок (т.е. в то время, когда кнопка недоступна)
Flat Boolean Определяет, долена ли панель быть прозрачной (в стиле MSIE 3)
HotImages TCustomImageList Определяет коллекцию картин для активного состояния кнопок (т.е. в момент, в то время, когда указатель мышки будет над кнопкой)
Images TCustomImageList Определяет коллекцию картин для простого состояния кнопок
Indent Integer Определяет поле по левой стороне панели
List Boolean Определяет вид текста и выравнивания картинок
Menu TMainMenu Разрешает связать панель инструментов с главным меню
RowCount Integer Говорит о количестве строчков, по которым расположены кнопки панели
ShowCaptions Boolean Определяет, должны либо нет отображаться текстовые автографы к кнопкам (т.е. их Caption)
Transparent Boolean Определяет, будет ли панель прозрачной. Не оказывает влияния на сами кнопки
Wrapable Boolean Определяет, должны ли кнопки машинально переноситься, если не помещаются в одну строчок
EdgeBorders TEdgeBorders Определяет, по каким сторонам панели должны быть видны рамки
EdgeInner TEdgeStyle Определяет вид внутренних рамок. Допустимые значения: esNone, esRaised и esLowered
EdgeOuter TEdgeStyle Определяет вид внешних рамок. Допустимые значения: esNone, esRaised и esLowered

самоё важным для панели инструментов особенностями есть такое свойство, как Images, потому, что как раз коллекция картин определяет вид кнопок. Размеров кнопок, находящихся на панели инструментов, неизменно однообразные, и задаются при помощи особенностей ButtonHeight и ButtonWidth. Наряду с этим направляться учитывать, что высота кнопок должна быть меньше, чем высота самой панели. Важное влияние оказывают на вид панели свойства List и ShowCaption. Так, по умолчанию показ надписей отключен. В случае если же его включить, то текст надписи будет размешаться под картиной, и все это будет выровнено по центру. В случае если же задействовать свойство List, установив его в истину, то картинка и текст будут находятся в строчок, наряду с этим текст будет справа, а картина — слева.

Что касается фактически кнопок, типа ToolButton, то вы не отыщете для того чтобы компонента на палитре инструментов. Но их возможно добавить, воспользовавшись контекстным меню панели, для чего направляться выбрать пункт New Button. Самые ответственные особенности кнопок — это ImageIndex, определяющее номер картины в коллекции изображений, ассоциированной с панелью, на которой находится эта кнопка, и Caption, определяющее ее текстовую подпись. Но, эта самая подпись не будет видна, в случае если лишь для самой панели не установлено в истину свойство List.

Не считая кнопок, на панелях инструментов довольно часто применяют разделители. Разделителями смогут выступать те же кнопки, лишь особым образом оформленные. Для помещения разделителя на панель из ее контекстного меню направляться выбрать пункт New Separator.

Главным отличием между легко кнопкой и разделителем есть то, что в случае если у стандартной кнопки свойство Style установлено в значение tbsButton, то у разделителя — в tbsSeparator. Такая кнопка-разделитель в трудящейся программе выглядит кК безлюдное пространство между соседними кнопками. В случае если же требуется отделить группы кнопок более очевидно, то возможно применять второй стиль кнопки-разделителя, установив свойство Style в tbsDivider, что добавит разделителю вертикальную линии.

Кроме 3 уже рассмотренных значений, для свойства Style предусмотрено еще 2: tbsCheck и tbsDropDown. Оба они разрешает изменять вид кнопки, причем в случае если выбран вариант tbsCheck, то она приобретает триггерный эффект, т.е. залипает при первом нажатии, и отлипает при следующем. Но в случае если таких кнопок пара, и для них еще одно свойство — Grouped — установлено в истину, то выбранной одновременно времени постоянно будет лишь одна из кнопок группы, а все остальные будут машинально возвращаться в простое состояние. Текущее состояние кнопки возможно определить, обратившись к ее свойству Down: если оно установлено в истину, то кнопка надавлена (включена), в случае если в неправда — отжата.

Что касается стиля tbsDropDown, то он употребляется для комбинированной кнопки-меню. Наряду с этим должно быть выяснено второе свойство — DropdownMenu, которое ассоциирует кнопку с каким-либо имеющимся на форме контекстным меню (компонент PopupMenu).

Дабы лучше разобраться с кнопками, создадим маленькое демонстрационное приложение. Для этого создадим новый проект и поместим на форму компонент ToolBar. Из группы Win32 нам пригодится еще один компонент — ImageList, а из группы стандартных (на закладке Standard) — PopupMenu. Сейчас создадим кнопки. Для этого, применяя контекстное меню компонента ToolBar (т.е. щелкая по нему правой клавишей мышки), последовательно добавим 9 элементов в таковой последовательности: 1-й — кнопка (Add Button), 2-на данный момент — разделитель (Add Separator), 3-й — кнопка, 4-й — разделитель, 5-й — кнопка, 6-й — разделитель, и оставшиеся 3 — кнопки. Сейчас для 2-го и 3-го разделителей, при помощи инспектора объекта, установим стиль tbsDivider. После этого для кнопки, появлявшейся между разделителями с вертикальной чертой, установим стиль tbsDropDown. Затем выберем все 3 последние кнопки, для чего используем клавишу Shift, и установим для них свойство Style в tbsCheck, а Grouped — в истину. В следствии панель инструментов примет вид, продемонстрированный на рис. 13.4.

Toolbar и кнопки с пиктограммами

Рис. 13.4. Панель инструментов с кнопками разных видов

Сейчас направляться заняться особенностями самой панели, для чего, первым делом, направляться выяснить изображения. Для этого нужно будет воспользоваться редактором компонента ImageList, добавив в него 6 изображений — по числу имеющихся у нас кнопок. Затем свойству Images панели инструментов присвоим значение ImageList1, т.е. коллекцию картин. Сразу после этого все кнопки возьмут соответствующие иконки.

Дабы визуально отделить панель от другой части окна, в ее составном свойстве EdgeBorders направляться установить для ebBottom значение True. Так, само свойство EdgeBorders возьмёт значение [ebTop,ebBottom], а рамка будет видна не только по верхней, но и по нижней границе панели.

Остается разобраться лишь с той кнопкой, для которой мы установили стиль tbsDropDown. В первую очередь, нужно выяснить меню, которое будет раскрываться при щелчке пользователем по стрелке. Для этого мы уже поместили на форму компонент PopupMenu, так что нужно только создать в нем пара пунктов. Затем нужно ассоциировать это меню с кнопкой, для чего в инспекторе объекта отыщем для данной кнопки свойство DropDownMenu и установим в качестве его значения имя контекстного меню — PopupMenu1.

Результатом произведенной работы будет приложение, имеющее одну раскрывающуюся и 3 триггерные кнопки.

Попутно направляться подчернуть, что в том случае, если требуется применять пара панелей инструментов, и наряду с этим дать пользователю возможность еще и перемещать их, то в качестве базы берется компонент ControlBar (расположен на закладке Additional палитры компонентов), и все панели помещаются не конкретно на форму, а не данный компонент.

ПРИМЕЧАНИЕ
Кроме компонента ToolBar, в Delphi имеется еще один компонент, предназначенный для панелей инструментов — CoolBar. Он совмещает в себе контейнер для сами панели и панелей.

Menu

К настоящему моменту мы уже разглядели все визуальные компоненты, расположенные на закладке Standard палитры компонентов Delphi. Но на ней имеются все еще не упомянутые компоненты, без которых нереально представить ни одного какое количество-нибудь важного приложения. Это – меню.

Всего существует 2 типа меню – основное меню – то, что находится под заголовком окна программы, и локальное, всплывающее либо контекстное меню, привязанное к тому либо иному элементу управления. И в случае если основное меню предназначено для управления работой всего приложения, то каждое контекстное меню помогает для управления каким-либо конкретным элементом интерфейса.

Для главного меню в VCL предусмотрен компонент MainMenu, а для контекстного – PopupMenu. Оба они происходят от класса TMenu, и имеют кое-какие неспециализированные особенности. В частности, свойство AutoHotkeys определяет, должны ли машинально назначаться знаки для стремительной навигации по меню (вы видите их выделенными при надавленной клавише Alt). А свойство AutoLineReduction определяет, должны ли машинально удаляться повторяющиеся строчки-разделители. Оба эти особенности смогут принимать значения maAutomatic и maManual.

Так же у них присутствуют свойства Images, разрешающие привязать к меню коллекцию изображений, и Items, являющиеся хранилищем самих пунктов меню.

Что касается личных особенностей этих компонентов, то тут для нас громаднейший интерес воображают настройки контекстного меню. Так, свойство Alignment определяет, в какой позиции относительно указателя мышки должно показаться меню. Допускается выравнивание его левого верхнего угла по левому краю (paLeft, принято по умолчанию), по правому (paRight) и по центру (paCenter). Второе свойство, AutoPopup, Несёт ответственность за появление контекстного меню на экране. Если оно установлено в истину, то меню будет оказаться машинально при щелчке правой клавишей мышки по компоненту, к которому это меню привязано. В случае если же установить значение этого свойство в неправда, то процесс появления меню обязан будет контролироваться программно. Напомним, что для показа контекстного меню таким методом направляться применять способ Popup. К примеру, дабы привязать всплытие меню к любому щелчку мышки по форме, возможно написать приблизительно таковой обработчик события для onClick:

procedure TForm1.FormMouseUp(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); begin PopupMenu1.Popup(X, Y); end;

Единственным спорным моментом в этом случае будет место появления меню. Дело в том, что доводами X и Y, передаваемыми обработчику события onClick формы будут локальные координаты, отсчитываемые от верхнего левого угла ее окна. Одновременно с этим для способа Popup нужны координаты довольно всего экрана (т.е. как для объекта Screen). Выходом из данной обстановки будет применение информации о координатах самой формы, каковые так же привязаны к глобальной совокупности координат:

PopupMenu1.Popup(Form1.Left+X,Form1.Top+Y);

В принципе, всех уже перечисленных особенностей, вкупе с способом Popup, вполне достаточно для того, чтобы приступить к применению меню. Но не нужно забывать, что состав меню определяется его свойством Items – коллекцией пунктов меню. Наряду с этим любой пункт является объектом класса TMenuItem. Как раз его свойства мы и разглядим, для чего обратимся к таблице 12.6.

Таблица 12.6. Свойства MenuItem
Свойство Тип Описание
Action TBasicAction Ссылается на воздействие, которое связано с данным пунктом меню. Все остальные свойства этого пункта меню при таких условиях задаются косвенно, при помощи компоненты ActionList
AutoCheck Boolean Определяет, обязан ли разрешённый пункт менять собственный свойство Checked при его выборе пользователем
AutoHotkeys TMenuItemAutoFlag Определяет, должны ли машинально назначаться знаки для стремительной навигации по подменю.
AutoLineReduction TMenuItemAutoFlag Определяет, должны ли машинально удаляться повторяющиеся строчки-разделители
Bitmap TBitmap Разрешает назначить личное графическое изображение данному пункту меню
Break TMenuBreak Определяет, есть ли этот пункт началом нового столбца меню. Может принимать значения mbNone, nbBreak и mbBreakBar
Caption String Определяет заголовок пункта меню. В случае если в качестве заголовка применять знак -, то на месте для того чтобы пункта будет отображаться разделительная линия
Checked Boolean Определяет, есть ли этот пункт меню отмеченным. В случае если да, то он выделяется соответствующей меткой
Count Integer Говорит о количестве пунктов подменю в данном пункте меню. Нулевое значение свидетельствует, что подменю нет
Default Boolean Определяет, есть ли этот пункт выбранным по умолчанию. Такие пункты выделяются полужирным шрифтом и машинально вызываются при двойном щелчке по родительскому пункту меню
Enabled Boolean Определяет, есть ли этот пункт дешёвым
ImageIndex Integer Показывает на порядковый номер изображения в коллекции (компонент ImageList), связанного с данным меню
Items TMenuItems Определяет массив пунктов положенного подменю
RadioItem Boolean Определяет, есть ли этот пункт составной частью взаимоисключающих пунктов меню
ShortCut TShortCut Определяет сочетание тёплых клавиш для стремительного вызова данного пункта
Visible Boolean Определяет, обязан ли разрешённый пункт быть видимым пользователю

Разумеется, что потому, что любой пункт меню может содержать собственное подменю, то он должен иметь и свойства, характерные для главного компонента меню. Исходя из этого мы тут опять видим AutoHotkeys и AutoLineReduction, каковые, в дополнение к значениям maAutomatic и maManual смогут кроме этого принимать значение maParent, что делает вероятным наследование значения этих особенностей от главного меню. Возможностью иметь дочерние подменю разъясняются и такие свойства, как Count и Items. Что касается всех остальных особенностей, то они предназначены для управления поведением и видом данного пункта меню.

Самый востребованными особенностями являются Caption и ShortCut. Как правило вам нужно конкретно трудиться лишь с этими двумя особенностями, только время от времени прибегая к таким особенностям, как, скажем, Checked либо ImageIndex. Одновременно с этим, кое-какие свойства, к примеру такие, как Visible либо Enabled, редко определяются в ходе создания приложения. Для этих целей нужно применять соответствующий код программы, что будет изменять их состояние в зависимости от текущей обстановки. В качестве обычного примера возможно привести функцию вставки из буфера обмена: в случае если в нем ничего нет, то многие программы машинально соответствующий пункт меню его недоступным. Практически, для этого свойство Enabled устанавливается в значение «неправда».

По большому счету же для меню в Delphi IDE предусмотрен особый редактор, разрешающий наглядно создавать и редактировать как основное меню, так и контекстные. Чтобы им воспользоваться, достаточно поместить необходимый компонент (MainMenu либо PopupMenu) на форму, по окончании чего воспользоваться его собственным контекстным меню. Первым пунктом будет Menu Designer, и именно он и вызывает необходимый редактор, именуемый конструктором меню (рис. 12.7).

СОВЕТ
Подобно простым визуальным компонентам наподобие кнопки либо поля редактирования, компоненты, подобные MainMenu, так же смогут быть настроены на «воздействие по умолчанию», происходящее при двойном щелчке мышки. Для разглядываемых компонентов таким действием именно будет вызов конструктора меню.

Toolbar и кнопки с пиктограммами

Рис. 12.7. Конструктор меню с раскрытым собственным контекстным меню

При помощи этого конструктора возможно создавать меню, причем его внешний вид будет фактически соответствовать тому, что окажется в действительности. В случае если в ходе работы щелкнуть правой кнопкой мышки по созданному пункту меню, то откроется контекстное меню самого редактора, при помощи которого данный пункт возможно удалить (delete), или добавить (Insert) за ним новый, либо же сделать этот пункт родительским для собственного подменю (Create Submenu). Наряду с этим свойства выбранного сейчас пункта меню, видны и доступны для правки в инспекторе объекта.

Чтобы связать элемент меню с делаемой им функцией, употребляется обработчик события onClick. Практически, это единственное событие, которое заслуживает внимание. Причем оно происходит независимо от того, что именно сделал пользователь для выбора данного пункта: это возможно и щелчок мышкой, и выбор пункта при помощи навигации с клавиатуры с нажатием пробела, либо же обращение к нему при помощи заданной комбинации тёплых клавиш.

Что касается фактически комбинаций тёплых клавиш, каковые возможно назначить меню, то они перечислены в окне инспектора объекта, в то время, когда вы раскрываете перечень наоборот свойства ShortCut. При их назначении направляться смотреть за тем, дабы они не повторялись для различных пунктов.

Раздельно направляться сообщить о свойстве Action (воздействие). Устанавливать это свойство возможно лишь в том случае, если на форму уже помещен компонент ActionList, воображающий собой упорядоченный комплект действий. При таких условиях список дешёвых вариантов определяется только им. Помимо этого, наряду с этим ряд других особенностей задается машинально подобными особенностями выбранного действия.

Панели

При рассмотрении радиокнопок много раз отмечалось, что они взаимодействуют в рамках группы. Разумеется, что в приведенных примерах группу образовавали все компоненты типа RadioButton, находящиеся на форме. Но это не свидетельствует, что на форме возможно лишь одна группа таких кнопок. Дело в том, что принадлежность компоненты к группе определяется на основании того, какому компоненту она в собственности. Во всех рассмотренных ранее примерах таковым являлась сама форма. Но кроме формы имеются и другие компоненты, каковые смогут иметь дочерние объекты. Одним из самый обширно используемых элементов для того чтобы типа есть панель – Panel. На палитре компонентов она расположена предпоследней на закладке Standard и выглядит как безлюдный серый квадратик. Поместив данный компонент на форму, вы получите прямоугольную область, ограниченную выпуклой рамкой.

Панели употребляются не только для логической группировки элементов управления, но и для визуального оформления приложений. Благодаря последнему событию, панель имеет множество особенностей, важных за внешний вид панели, вернее, ее рамки. Всего таковых имеется 5 штук, включая уже прекрасно знакомо по вторым элементам, к примеру, текстовым процессорам, свойство BorderStyle. Совершенно верно равно как и для них, для панели возможно или включить рамку (bsSingle), или покинуть ее отключённой (bsNone). Да, неточности тут нет: не смотря на то, что рамка по умолчанию отключена, панель все равно имеет визуальные границы. А дело в том, что кроме фактически рамки, панель имеет еще и скосы (bevels), причем их 2 – внешние и внутренние. И как раз внешний скос мы и видим при стандартных настройках панели. Соответственно, оставшиеся 4 особенности именно скосами и руководят:

BevelInner – это свойство несёт ответственность за наличие и вид внутреннего скоса;

BevelOuter – это свойство руководит видом внешнего скоса;

BevelWidth – при помощи этого свойства возможно руководить толщиной линии, образующей скосы, причем данное свойство в один момент воздействует как на внутренний, так и на внешний;

BorderWidth – данное свойство разрешает изменять границу между внутренним и внешним скосами.

Для особенностей, несущих ответственность за вид скосов – BevelInner и BevelOuter предусмотрено по паре значений:

bvNone – скос отсутствует (принято по умолчанию для внутреннего скоса, BevelInner);

bvRaised – скос образует выпуклую рамку (принято по молчанию для внешнего скоса, BevelOuter);

bvLowered – скос образует вогнутую рамку;

bvSpace – в обычном случае подобен bvRaised.

Так, мы приобретаем очень широкие просторы для манипулирования внешним видом границ панели – возможно как отключать границы панелей по большому счету, установив свойства BevelInner и BevelOuter в bvNone, так и заключать панели в объемные рамки самого разнообразного вида (рис. 12.6).

Toolbar и кнопки с пиктограммами

Рис. 12.6. Разные комбинации откосов панелей

Дабы убедиться в том, что любая панель образует группу компонент, попытаемся применять их для группировки радиокнопок. Для этого поместим на форму 2 панели, мало повысим их размеры в высоту, и поместим на каждую по 2 компонента RadioButton. В случае если сейчас запустить программу и попытаться поменять состояние тумблеров на одной из панелей, то это никак не отразится на состоянии тумблеров, расположенных на другой панели.

направляться подчернуть, что в случае если панель употребляется не в декоративно-пояснительных целях (к примеру, как подзаголовок окна), в частности как собирающий элемент, то ее свойству Caption присваивают пустую строчок, а пояснительный текст размещают в верхнем правом углу при помощи компонента Label. Наряду с этим, в большинстве случаев, скосы не употребляются (оба несущих ответственность за их вид свойства устанавливают в bvNone), а вдруг нужно визуально выделить, что размещенные на панели компоненты относятся к одной логической группе, применяют простую рамку (свойство BorderStyle).

К тому же, в Delphi имеется компонент, специально предназначенный для группировки элементов – GroupBox, либо контейнер группы. В отличие от панели, он не имеет откосов, но неизменно заключен в рамку. Наряду с этим его заголовок (Caption) изначально расположен именно в том месте, где нужно – в верхнем левом углу, причем накладывается поверх образующей рамку линии. В целом можно подчернуть, что класс TGroupBox происходит от TWinControl и не имеет каких-либо методов и дополнительных свойств.

Контейнер группы употребляется для объединения последовательности разных компонент в один логически связанный блок. Наряду с этим компоненты смогут быть использованы самые различные – тумблеры, поля редактирования, кнопки и т.д. В случае если же в группе требуется разместить только радиокнопки, то возможно применять второй компонент – RadioGroup. Его возможно назвать контейнером группы зависимых тумблеров. Данный специальный компонент есть наследником контейнера группы, предназначенным только для радиокнопок. Причем конкретно помещать на него компоненты RadioButton нет необходимости, вместо этого направляться применять его собственное свойство Items. Любой элемент, указанный в перечне Items, есть надписью с тумблеру. Соответственно, задав, скажем, 4 строки в перечне Items, мы возьмём готовую группу из 4 радиокнопок, являющуюся одним компонентом. Это весьма комфортно, потому, что вместо проверки состояния каждого из тумблеров достаточно определить свойство ItemIndex компонента RadioGroup. Для примера разглядим оба варианта: один – с компонентами и обычной 4 группой RadioButton, и второй – с компонентом RadioGroup и 4 строчками, заданными в перечне Items. В первом случае нам пригодится написать 4 строки кода:

if RadioButton1.Checked then Label1.Caption:=’Вариант 1′; … if RadioButton4.Checked then Label1.Caption:=’Вариант 4′;

Во втором же хватит всего одной строки:

Label2.Caption:=’Вариант ‘+IntToStr(RadioGroup1.ItemIndex+1);

Данный пример возможно взглянуть в каталоге DemoPart3Groups.

Не считая особенностей Items с надписями к тумблерам, параллельно определяющим их количество, и ItemIndex, показывающего на выбранный элемент (если не выбран ни один вариант, то ItemIndex имеет значение -1), компонент RadioGroup имеет еще одно свойство – Columns. Оно несёт ответственность за количество столбцов, по которым будет разделен перечень.

НАДПИСЬ НА КНОПКЕ КАК СДЕЛАТЬ

Похожие статьи:

Понравилась статья? Поделиться с друзьями:
Добавить комментарий

;-) :| :x :twisted: :smile: :shock: :sad: :roll: :razz: :oops: :o :mrgreen: :lol: :idea: :grin: :evil: :cry: :cool: :arrow: :???: :?: :!:

Adblock
detector