リストボックスのセルに色を付ける
日付 | 2015/08/04 |
---|---|
ID | 15-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以降で試すことができます。