一発でN選択ができる
Delphi / C++ Builder用 項目選択ボックス

中島信行

 Delphi / C++ Builderにはチェックボックス(TCheckBox)がありますが,チェックマークだけでは味気がないので,TCheckBoxコンポーネントの仕様を参考にしてチェックマークのボックス部分に文字列を表示できるようにし,さらに,三択以上の選択も可能なコンポーネントを作成してみました.
 未掲載のリストはこちらからダウンロードできます.

 

項目選択ボックスコンポーネント(TSelBox)

 複数の項目を選択することは,FAに限らずよくあります.本コンポーネントは複数項目を,
  マウスクリック(昇順に変化)
  スペースキー(昇順に変化)
  Shift+スペースキー(降順に変化)
  0〜9,A〜Zのキー
で選択できるようにしています.数値入力が主体のアプリケーションでは慣れてくると極力テンキーで操作できたほうが使い勝手が向上するため,10種類までであれば0〜9のテンキーで選択できるようになっています.テンキーで操作できる関係で,二択であってもチェックボックスよりも使い勝手がよくなっています.
 項目選択ボックスコンポーネントをリスト1〜リスト3に示します.
 リスト1(Object Pascal版)はDelphiおよびC++ Builder用で,リスト2〜リスト3(C++版)はC++ Builder用です(リスト3は未掲載).C++ Builderではどちらか一方を登録してください.ただし,後述するサンプルプログラムではC++版を登録して作成しています.

項目選択ボックスコンポーネント(TSelBox)のプロパティ

◇ Alignment: TLeftRight default taRightJustify;
 Caption文字列を右と左のどちらに表示するかを指定します.
  taRightJustify Caption文字列を右側に表示
  taLeftJustify Caption文字列を左側に表示
◇ AutoSize:  Boolean  default True;
 領域(チェックボックスとCaption文字列の部分)を自動調整するかどうかを指定します.デフォルトのTrueではチェックボックスとCaptionの文字列に合わせて領域を自動調整します.チェックボックス内は以下に示すSelectStrプロパティで指定したもっとも長い項目の文字列に合わせます.高さはチェックボックスとCaption文字列の高いほうに合わせます.なお,アクセラレータ文字が指定されるとCaptionの領域が1文字ぶん広くなります.理由はすぐにおわかりになると思いますが.
◇ BoxColor:  TColor  default clWindow;
 チェックボックス内の領域色を指定します.Caption文字列の色はTCheckBoxコンポーネントと同様にColorプロパティで指定します.
◇ BoxFont:   TFont;
 チェックボックス内の文字フォントを指定します.Caption文字列の文字フォントはTCheckBoxコンポーネントと同様にFontプロパティで指定します.
◇ BoxType: TSelBoxType default sbtYesNo;
 選択項目の種類を指定するプロパティです.
☆ sbtCustom
 下記以外の項目をSelectStrプロパティに指定することを指定します.
☆ sbtYesNo
 選択項目としてYes,Noを指定します.SelectStrプロパティには,
  '1 : Yes, 0 : No, Y : Yes, N : No'
と設定され,1またはYでYes,0またはNでNoとなります.テンキーの使用を考慮して0,1を認めています.
☆ sbtTrueFalse
 選択項目としてTrue,Falseを指定します.SelectStrプロパティには日本語環境では,
  '1 : 真, 0 : 偽, T : 真, F : 偽'
と設定され,日本語環境以外では,
  '1 : True, 0 : False, T : True, F : False'
と設定されます.1またはTで真(True),0またはFで偽(False)となります.
☆ sbtOnOff
 選択項目としてON,OFFを指定します.SelectStrプロパティには,
  '1 : ON, 0 : OFF'
と設定されます.
☆ sbtDayOfWeek
 選択項目として曜日( 日,月,..,土)を指定します.SelectStrプロパティには,
  '1 : 日, 2 : 月, 3 : 火, 4 : 水, 5 : 木, 6 : 金, 7 : 土'
と設定され,1〜7で曜日を指定できます.
☆ sbtLongDayNames
 選択項目として曜日(日曜日,月曜日,..,土曜日)を指定します.SelectStrプロパティには,
  '1 : 日曜日, 2 : 月曜日, 3 : 火曜日, 4 : 水曜日, 5 : 木
  曜日, 6 : 金曜日, 7 : 土曜日'
と設定され,1〜7で曜日を指定できます.
 これは主として日本語環境以外を想定したものです.日本語環境ではsbtDayOfWeekを使って,Captionに曜日と指定する使い方のほうがよいと思います.
◇ BoxWidth: Integer   default 20;
 チェックボックス領域の幅を指定します.AutoSizeプロパティがTrue(デフォルト)の時は,BoxWidthプロパティで領域幅を変更しても,その後の表示で自動調整されます.
◇ Modes: TSelBoxModes default
[sbmArrowWrap, sbmClickChecked];
 本コンポーネントの各種モードを指定するプロパティです.
☆ sbmAddHint
 SelectStrプロパティで指定した文字列を実行時にHintプロパティに追加することを指定します.
 SelectStrプロパティで指定した文字列は入力時のHintになりますから,二度手間を避けるために用意しました.下記の曜日の指定だとHintプロパティに'曜日 'をセットしておけば実行時のHintプロパティは,
 曜日 1 : 日, 2 : 月, 3 : 火, 4 : 水, 5 : 木, 6 : 金, 7 : 土
となります.
 ただし,(ステータスバーにHintを表示する場合のことを考慮して)ShowHintプロパティはTrueにしませんから,必要であればTrueにしてください.
☆ sbmArrowWrap
 最大値の時にマウスクリックまたはスペースキーで最小値に,最小値の時にShift+スペースキーで最大値に連続ループさせるかどうかを指定します.
☆ sbmCaseSensitive
 選択文字の指定時に大文字/小文字の区別をすることを指定します.大文字と小文字の区別をすると使いにくくなりますから,まず,指定することはないと思いますが.
☆ sbmClickChecked
 TCheckBoxコンポーネントではマウスクリックでチェック状態が反転しますが,これと同様にマウスクリックで次の選択項目に変わるかどうかを指定します.二択の場合はマウスクリックでチェック状態が反転しても問題ありませんが,曜日などのように三択以上ではマウスクリックで選択状態が変わるのは不自然です.sbmClickCheckedをFalseにするとマウスクリックやアクセラレータ文字の押下ではフォーカスが移動するだけで,選択状態は変わらなくなります.
☆ sbmEnterChecked
 項目はマウスクリックやスペースキーで次々に選択できますが,Enterキーでも項目選択を可能にするかどうかを指定します.なお,sbmEnterNextとsbmEnter Checkedはどちらか一方しか選択できません.
☆ sbmEnterNext

 

以下略


copyright 1999 中島 信行