☆TCategoryButtonsを使ってみる。
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.
これを実行するとこのようになります。
そこで、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;
これでいい感じになりました。
| 固定リンク