Компонент TToolBar
Если в какой-то ситуации одна или несколько кнопок должны стать недоступными, для этого можно установить свойство Enabled в значение False. Но у кнопок в группе есть еще и третье состояние – неопределенное:
property Indeterminate: Boolean;
Такие кнопки выделяются серым цветом, чтобы показать пользователю, что их выбирать не следует. Переход в состояние indeterminate=True все еще позволяет кнопке обрабатывать событие onclick, но при этом она переходит в отжатое состояние (Down=False). Но – только до следующего нажатия. После него кнопка выходит из состояния Indeterminate.
Свойство:
property Marked: Boolean;
Отображает поверхность кнопки синим цветом (точнее, цветом clHighlight), как у выделенных объектов. В отличие от предыдущего случая с indeterminate кнопка остается в состоянии Marked независимо от нажатий вплоть до присвоения этому свойству значения False.
Ниже приведен фрагмент программы, с помощью которого можно выделить кнопки на панели при помощи мыши. Приведенные ниже обработчики событий нужно присвоить всем кнопкам панели и самой панели TToolBar:
var StartingPoint: TPoint; Selecting: boolean; procedure TForml.ToolBarlMouseDown(Sender: TObject; Button: TMouseButton; SHIFT: TSHIFTState; X, Y: Integer); begin StartingPoint: = (Sender as TControl).ClientToScreen(Point(X,Y)); Selecting: = True; end; procedure TForml.ToolBarlMouseUp(Sender: TObject; Button: TMouseButton; SHIFT: TSHIFTState; X, Y: Integer); var i: Integer;r,r0: TRect; begin if Selecting then begin r.TopLeft: = StartingPoint; r.BottomRight: = (Sender as TControl).ClientToScreen(Point(X,Y)); with ToolBarl do for i: = 0 to ButtonCount-1 do begin r0: = Buttons[i].ClientRect; OffsetRect(r0,Buttons[i]. ClientOrigin.X,Buttons[i]. ClientOrigin.Y); if IntersectRect(r0,r,r0) then Buttons[i].Marked: = True; end; end; Selecting: = False; end;
Наличие обработчиков событий onMouseDown/onMouseUp не мешает нажатию кнопок – нажатие все равно вызывает событие onclick.
Компонент TToolBar может стать полноценной заменой главного меню (взгляните хотя бы на приложения из состава MS Office 97 или 2000). К каждой из кнопок можно присоединить меню – и не одно, а целых два:
property DropdownMenu: TPopupMenu; property PopupMenu: TPopupMenu;
Для того чтобы по нажатии левой кнопки мыши выпадало меню DropdownMenu, нужно установить один из стилей кнопок – tbsButton или tbsDropdown. В первом случае меню появится при нажатии в любой части кнопки. При этом событие onclick не возникает; кнопка из-за этого становится "неполноценной" – она пригодна только для показа меню. Второй случай – стиль tbsDropdown – специально предназначен для удобства работы с выпадающими меню. Меню появляется при щелчке на специальной области с изображением треугольника в правой части кнопки. А вот щелчок на остальной части кнопки, как обычно, вызовет событие onclick.