Tips

出力フォームの背景色を一行ごとに切り替える

日付2009/09/09
ID75887 (英語原文参照)
バージョン11.4
プラットフォームMac & Win

リストの背景色を一行ごとに切り替えることは、いまや普通のことになりました。行の背景色は交互に違っていたほうが、内容が格段に見やすくなるからです。

このようなインタフェースを作成するには、まず、第二の背景色をインタープロセス変数に代入しておきます。この値は設定テーブルなどに登録すると良いでしょう。インタープロセス変数の値は、SET RGB COLORSコマンドに渡すつもりなので、RGBで定義します。

<>AltRowColorProject:=14213880 `Light Blue

出力フォームのレイアウトでは、ヘッダマーカーと詳細マーカーの間に、長方形をふたつ配置します。一方は基本の白色であり、他方はコマンドでカラーを切り替えるためのものです。基本の長方形はRowBackground、その上の置かれた色の変化する長方形はRowBackgroundProjectという名前に設定します。フィールドはこれらの長方形の上になるようにデザインします。

色の変化する長方形のプロパティは「表示/表示可」の値が「レコードが選択されていない場合」にされています。このようにしておけば、レコードが選択されたときには基本の白色オブジェクトが表示され、ハイライトの反転色がきれいに表示されるからです。

出力フォームのフォームメソッドには、次のようなコードが記述されています。


Case of 

:(Form event=On Display Detail )
  If (Displayed line number%2=0) `even line number
     If (Record number([Projects])>-1) `record exists on this line
      SET RGB COLORS(*;"RowBackgroundProject";0;<>AltRowColorProject)
     Else `record does not exist on this line make it white
      SET RGB COLORS(*;"RowBackgroundProject";0;0x00FFFFFF)
    End if 
  Else `odd line number white
     If (Record number([Projects])>-1)
      SET RGB COLORS(*;"RowBackgroundProject";0;0x00FFFFFF)
    Else
      SET RGB COLORS(*;"RowBackgroundProject";0;0x00FFFFFF)
     End if 
  End if 
End case

これをさらに進化させて、ユーザが第二の背景色を変更できれば、より柔軟なインタフェースにすることができます。今回は設定をインタープロセス変数に代入したので、これを更新する仕組みを用意すれば、比較的容易に色の選択オプションが実現できることでしょう。