☆TCategoryButtonsを使ってみる。

フォームにTCategoryButtonsとアイコンを一つ設定したImageListを配置します。
ButtonCategoryやButtonItemの設定は、オブジェクトインスペクタから簡単にできますが、 ここではプログラムで処理してみます。

まずは、デフォルトのTCategoryButtonsに項目を設定してみます。
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, ImgList, CategoryButtons;

type
  TForm1 = class(TForm)
    ImageList1: TImageList;
    CategoryButtons1: TCategoryButtons;
    procedure FormCreate(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

function GetCategory(Index: Integer): String;
begin
  case Index of
    0: Result := 'Guitar';
    1: Result := 'Synthesizer';
  else
       Result := 'Piano'
  end;
end;

procedure GetSynthesizerItem(ButtonCategory: TButtonCategory);
var
  ButtonItem: TButtonItem;
  I: Integer;
begin
  for I := 0 to 2 do
  begin
  ButtonItem := ButtonCategory.Items.Add;
  ButtonItem.ImageIndex := 0;
    case I of
      0: ButtonItem.Caption := 'Roland';
      1: ButtonItem.Caption := 'Yamaha';
    else
         ButtonItem.Caption := 'KORG';
    end;
  end;
end;

procedure GetGuitarItem(ButtonCategory: TButtonCategory);
var
  ButtonItem: TButtonItem;
  I: Integer;
begin
  for I := 0 to 3 do
  begin
  ButtonItem := ButtonCategory.Items.Add;
  ButtonItem.ImageIndex := 0;
    case I of
      0: ButtonItem.Caption := 'Ibanez';
      1: ButtonItem.Caption := 'Gibson';
      2: ButtonItem.Caption := 'Yamaha';
    else
      ButtonItem.Caption := 'Fender';
    end;
  end;
end;

procedure GetPianoItem(ButtonCategory: TButtonCategory);
var
  ButtonItem: TButtonItem;
  I: Integer;
begin
  for I := 0 to 2 do
  begin
  ButtonItem := ButtonCategory.Items.Add;
  ButtonItem.ImageIndex := 0;
    case I of
      0: ButtonItem.Caption := 'Steinway & Sons';
      1: ButtonItem.Caption := 'Yamaha';
    else
         ButtonItem.Caption := 'Kawai';
    end;
  end;
end;

procedure TForm1.FormCreate(Sender: TObject);
var
  I: Integer;
  ButtonCategory: TButtonCategory;
begin
  // CategoryButtons1の設定
  CategoryButtons1.Align := alClient;
  CategoryButtons1.Images := ImageList1;

  // ButtonCategory、ButtonItemの設定
  for I := 0 to 2 do
  begin
    ButtonCategory := CategoryButtons1.Categories.Add;
    ButtonCategory.Caption := GetCategory(I);
    case I of
      0: GetGuitarItem(ButtonCategory);
      1: GetSynthesizerItem(ButtonCategory);
      2: GetPianoItem(ButtonCategory);
    end;
  end;
end;

end.


これを実行するとこのようになります。

Tcategorybuttons1

なんだか、これでは今ひとつ使い道がなさそうな気がします。
そこで、Delphiのツールパレットのような表示にしてみます。

FormのOnCreateで、CategoryButtons1のプロパティの設定を行います。
procedure TForm1.FormCreate(Sender: TObject);
var
  I: Integer;
  ButtonCategory: TButtonCategory;
begin
  // CategoryButtons1の設定
  CategoryButtons1.Align := alClient;
  CategoryButtons1.Images := ImageList1;
  CategoryButtons1.BorderStyle := bsNone;
  CategoryButtons1.AlignWithMargins := True;
  CategoryButtons1.ButtonFlow := cbfVertical;
  CategoryButtons1.ButtonOptions :=
    CategoryButtons1.ButtonOptions +
      [boFullSize, boBoldCaptions, boUsePlusMinus, boCaptionOnlyBorder] -
      [boVerticalCategoryCaptions];  
  
  // ButtonCategory、ButtonItemの設定
  for I := 0 to 2 do
  begin
    ButtonCategory := CategoryButtons1.Categories.Add;
    ButtonCategory.Caption := GetCategory(I);
    case I of
      0: GetGuitarItem(ButtonCategory);
      1: GetSynthesizerItem(ButtonCategory);
      2: GetPianoItem(ButtonCategory);
    end;
  end;
end;

Tcategorybuttons2


これでいい感じになりました。

|