Иллюстрированный самоучитель по Delphi 7 для профессионалов

Компонент 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.

Если Вы заметили ошибку, выделите, пожалуйста, необходимый текст и нажмите CTRL + Enter, чтобы сообщить об этом редактору.