Компонент Delphi CategoryButtons служит для отображения наборов кнопок, упорядоченных по категориям. В свойстве Categories содержатся категории, по которым группируются кнопки. Во время проектирования это коллекция формируется двойным щелчком на компоненте или щелчком на кнопке с многоточием около свойства Categories. В открывшемся окне редактора коллекций кнопкой Add можно добавить новую категорию. Далее в инспекторе объектов можно задать свойства категории. В котором свойство Collapsed определяет, появится ли категория в первый момент в свернутом или развернутом виде. Во время выполнения доступ к свойствам категории можно получить через подсвойство Items свойства Categories. Это подсвойство представляет собой массив объектов категорий. Например
1 | CategoryButtons1.Categories.Items[0] |
дает доступ к объекту первой категории. Свойство Count показывает число категорий в панели.
Каждый объект категории имеет свойство Items содержащий в себе кнопки. Таким образом чтобы программно обратиться к первой кнопке первой категории, можно обратиться к коду
1 | CategoryButtons1.Categories.Items[0].Items.items[0] |
Во время проектирования формирование коллекции кнопок каждой категории производится щелчком около свойства Items категории. Каждая кнопка может иметь изображение, которое хранится в списке изображений ImageList. Ссылка на него дается свойством Images компонента CategoryButton, а конкретной кнопке задается свойством ImageIndex. У компонента CategoryButton имеется событие OnButtonClicked, которое будет срабатывать при щелчках на всех кнопках, для которых не описан индивидуальный обработчик события OnClick.
Свойства CategoryButton
ButtonOptions.boAllowReorder | разрешает перетаскивание категорий и кнопок внутри категорий и между ними. |
ButtonOptions.boAllowCopyingButtons | работает только совместно с boAllowReorder, позволяет при перетаскивании кнопок держать нажатой клавишу Ctr, что приведет не к перемещению, а к копированию кнопки. |
ButtonOptions.boFullSize | эта опция приводит к тому, что ширина каждой кнопки становится равной ширине окна, т.е. кнопки размещаются друг под другом. |
ButtonOptions.boGradientFill | обеспечивает градиентное подчеркивание фона категории. |
ButtonOptions.boShowCaptions | беспечивает отображение надписей кнопок |
ButtonOptions.boVertivalCategoryCaptions | обеспечивает вертикальное расположение надписей категорий |
ButtonOptions.boBoldCartion | обеспечивает полужирный шрифт надписей категорий |
ButtonOptions.boUsePlusMinus | задает наличие в категории значков «+» и «-», обеспечивающих сворачивание и разворачивание категорий |
ButtonOptions.boCaptionOnlyBorder | обеспечивает отделение заголовков категорий от списков кнопок. |
Рассмотрим простейший пример.
Переносим на форму компонент CategoryButton и Memo, далее двойным щелчком по CategoryButton открываем редактор категорий, в который добавляем, с помощью кнопки add, 2 категории абзац и форматирование. Далее выделяем первую категорию и кликая кнопку с многоточием у свойства items добавляем кнопки: влево, по центру, вправо (аналогично как и категории). Таким же способом добавляем кнопки для второй категории: обычный, полужирный, курсив, подчеркнутый. Теперь задаем обработчик OnClick для наших кнопок
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 | procedure TForm10.CategoryButtons1Categories0Items0Click(Sender: TObject); begin memo1.Alignment:=taRightJustify; end; procedure TForm10.CategoryButtons1Categories0Items1Click(Sender: TObject); begin memo1.Alignment:=taCenter; end; procedure TForm10.CategoryButtons1Categories0Items2Click(Sender: TObject); begin memo1.Alignment:=taLeftJustify; end; procedure TForm10.CategoryButtons1Categories1Items0Click(Sender: TObject); begin memo1.Font.Style:=[]; end; procedure TForm10.CategoryButtons1Categories1Items1Click(Sender: TObject); begin memo1.Font.Style:=[fsItalic]; end; procedure TForm10.CategoryButtons1Categories1Items2Click(Sender: TObject); begin memo1.Font.Style:=[fsBold]; end; procedure TForm10.CategoryButtons1Categories1Items3Click(Sender: TObject); begin memo1.Font.Style:=[fsUnderline]; end; |