Tips

リストボックスのセルに色を付ける

日付2015/08/04
ID15-012
バージョン14以降
プラットフォームWindows, Mac

4D v14以降では、LISTBOX SET ROW COLORコマンドが用意され、簡単にセルに色を付けることができるようになりました。

まず最初にLISTBOX SET ROW COLORで色をセットすると、LISTBOX Get array コマンドを使用してアクセス可能な配列を動的に作成します。カラー配列が作成されると、その配列によって色がコントロールされるようになります。このカラー配列には、RGBのカラーコードを収め、要素に対応するセルの色を決定します。

カラー配列は、リストボックス全体とリストボックスの列ごとに用意されます。リストボックス全体のカラー配列は、行単位で影響を与え、列のカラー配列はセル単位に影響を与えます。

カラー配列には基本的にRGBのカラーコードを収めますが、特別なカラーコードも用意されています。

例えば行毎に色をつけている時、リストボックスのプロパティが優先される行があるなら、そこに定数Listbox inheritedをセットして、オブジェクトプロパティを継承することができます。また行に色をつけて、セルに対応する要素に定数Listbox inheritedをセットして、行の色を継承することも可能です。

例題

例えばフォーム上にオブジェクト名が「List Box」というリストボックスがあるとき、そのフォームメソッドに次のようなコードを記述することで、4行単位で色付けすることができます。

Case of 
: (Form event=On Load)
LISTBOX GET ARRAYS(*;"List Box";$arrColNames;$arrHeaderNames;$arrColVars;$arrHeaderVars;$arrColsVisible;$arrStyles)
For ($i;1;Size of array($arrColVars))
ARRAY TEXT($arrColVars{$i}->;100)
End for 
For ($i;1;Size of array($arrColVars{1}->))
Case of 
: (($i%4)=0)
LISTBOX SET ROW COLOR(*;"List Box";$i;0x00FFFFFF;Listbox background color)
: (($i%4)=1)
LISTBOX SET ROW COLOR(*;"List Box";$i;0x00FFEEEE;Listbox background color)
: (($i%4)=2)
LISTBOX SET ROW COLOR(*;"List Box";$i;0x00EEFFEE;Listbox background color)
Else 
LISTBOX SET ROW COLOR(*;"List Box";$i;0x00EEEEFF;Listbox background color)
End case 
End for 
End case 

さらに配置したリストボックスのオブジェクトメソッドに、次のコードを記述します。

Case of 
: (Form event=On Clicked)
 GET MOUSE($vlMouseX;$vlMouseY;$vlButton)
If (Macintosh control down | ($vlButton=2))
$vtItems:="色を設定;色を解除"
$vlUserChoice:=Pop up menu($vtItems)
LISTBOX GET CELL POSITION(*;"List Box";$clicked_col;$clicked_row;$clicked_var)
Case of 
: ($vlUserChoice=1)
$color:=LISTBOX Get row color($clicked_var->;$clicked_row;Listbox background color)
$color:=Select RGB color($color)
LISTBOX SET ROW COLOR($clicked_var->;$clicked_row;$color;Listbox background color)
LISTBOX SET ROW COLOR($clicked_var->;$clicked_row;0x00FFFFFF-$color;Listbox font color)
: ($vlUserChoice=2)
LISTBOX SET ROW COLOR($clicked_var->;$clicked_row;Listbox inherited;Listbox background color)
LISTBOX SET ROW COLOR($clicked_var->;$clicked_row;Listbox inherited;Listbox font color)
End case 
 End if
End case 

そしてこのフォームを実行表示し、任意のセルで右クリックをしますと、そのセルの色を変えたり元に戻したりできます。

実際のサンプルも用意しましたのでダウンロードして、4D v14以降で試すことができます。

サンプルデータベース(4D v14)