В такой группе всегда должна быть нажата хотя бы одна кнопка; на этапе разработки установите ее свойство Dam в значение True. Но если это вам не подходит, можно установить свойство

property AllowAllUp: Boolean;

в значение True - и можно отжимать все кнопки. Значение этого свойства всегда одинаково для всех кнопок в группе.

Программирование в Delphi 7

Рис. 5.1. Несколько групп кнопок с зависимым нажатием на панели инструментов

Если в какой-то ситуации одна или несколько кнопок должны стать недоступными, для этого можно установить свойство Enabled в значение False. Но у кнопок в группе есть еще и третье состояние - неопределенное:

property ^determinate: Boolean;

Такие кнопки выделяются серым цветом, чтобы показать пользователю^ что их выбирать не следует. Переход в состояние lndeterminate=True все еще позволяет кнопке обрабатывать событие Onclick, но при этом она переходит в отжатое состояние (Down=False). Но - только до следующего нажатия.

После Него КНОПКа ВЫХОДИТ ИЗ СОСТОЯНИЯ Indeterminate.

Свойство

property Marked: Boolean;

отображает поверхность кнопки синим цветом (точнее, цветом clHighlight), как у выделенных объектов. В отличие от предыдущего случая с indeterminate кнопка остается в состоянии Marked независимо от нажатий вплоть до присвоения этому свойству значения False.

Ниже приведен фрагмент программы, с помощью которого можно выделить кнопки на панели при помощи мыши. Приведенные ниже обработчики событий нужно присвоить всем кнопкам панели и самой панели TToolBar:

var Start ingPoint : 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,rO : 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
rO :=Buttons[i].ClientRect;

OffsetRect(rO,Buttons[i].ClientOrigin.X,Buttons[i].ClientOrigin.Y); if IntersectRect(rO,r,rO) then

Buttons[i].Marked := True;
end;
end;
Selecting := False;
end;

Наличие обработчиков событий OnMouseDown/OnMouseUp не мешает нажатию кнопок - нажатие все равно вызывает событие Onclick.

Компонент TToolBar может стать полноценной заменой главного меню (взгляните хотя бы на приложения из состава MS Office 97 или 2000). К каждой из кнопок можно присоединить меню - и не одно, а целых два:

property DropdownMenu : TPcpupMenu;
property PcpupMenu: TPcpupMenu;

Для того чтобы по нажатии левой кнопки мыши выпадало меню DropdownMenu, нужно установить ОДИН ИЗ СТИЛеЙ КНОПОК - tbsButton ИЛИ tbsDropdown. В первом случае меню появится при нажатии в любой части кнопки. При этом событие onclick не возникает; кнопка из-за этого становится "неполноценной" - она пригодна только для показа меню. Второй случай - стиль tbsDropdown - специально предназначен для удобства работы с выпадающими меню. Меню появляеется при щелчке на специальной области с изображением треугольника в правой части кнопки. А вот щелчок на остальной части кнопки, как обычно, вызовет событие onclick.


⇐ Предыдущая страница| |Следующая страница ⇒

Программирование в Delphi 7



Новости за месяц

  • Декабрь
    2017
  • Пн
  • Вт
  • Ср
  • Чт
  • Пт
  • Сб
  • Вс