ホーム ] アプリ ] クイックソートライブラリ ] グリッドコントロール ] EXIF情報ライブラリ ] 実行時間計測ラブラリ ] 多倍長演算ライブラリ ] 多倍長演算ライブラリU ] 画像処理ライブラリ ]

上へ
コンポーネント開発
イベントの捕捉
開発の手順
FreeGridの構成
データソース
セル更新

技術解説

FreeGridの構成

最終更新日:2007/04/19  全面改訂

●概要 

 ラフな仕様を元に、基本的なコントロールの構成を具体的に検討する。

●構造定義

○行列

 主機能である二次元情報を表示することから、縦横の概念が必要で、これを、

  • 列(Col):二次元マップの縦方向の集まりで、0から数える。
  • 行(Row):二次元マップの横方向の集まりで、0から数える。

とする。データベースでは、行が、一つのレコードに対応する。

○セル

 セルは、(列、行)で特定する。

・固定行、列

 見出しで、列見出しは、左の0列から始まり、連続するものとする。行見出しは、上の0行から始まり、連続するものとする。

●表示範囲と方法

○全体規則

  • コントロールのその時のサイズが表示領域となる。
  • 固定列があれば、それが必ず左端を常に占有する。
  • 固定行があれば、それが必ず上端を常に占有する。

○表示セルサイズ

  • デフォールトでは、そのセルに対応するObjectを文字列やビットマップにしたときのサイズで自動的に決まる。
  • 必要であれば、列幅を指定できる。この場合、幅が不足する場合は、自動的に折り返され、行高も自動調整される。 

○スクロール

  • サイズによっては全体が表示できないので、自動的にスクロールモードになる。
  • スクロールは必要に応じて、列 or/and 行になる。
  • 固定列は、水平スクロールされない。
  • 固定行は、垂直スクロールされない。

●情報保持

  • 設定された情報源は、内部で、Object配列として保持する。
  • セルはObjectへの参照である。表示は、Object.ToString(デフォールト/指定Format) である。Imageの場合は、画像。
  • 表示情報については情報源を解析して配列化する。行や列マージがあれば、これを処理する。このとき、全てのセルサイズが明らかとなっている。
  • 実際に表示する場合は、必要な文字列範囲から抜き出した配列を生成する。

●高速化

 本来は、一つのプロパティの更新や、セル内容の変化があれば、全て最初から処理することになるが、これではセル数が増えてくると、表示に時間が掛り問題となる。以下のようにしている。

○更新中非表示処置

 BeginUpdateメソッドを準備し、これと、EndUpdateまでは、表示を更新しないようにした。これで、例えば、セル内容を逐次設定、変更するような処理が高速化される。BeginUpdateしなければ、かなり遅くなる。

再描画の原因を解析して処置

 例えば、移動、隠れていた部分が見えるようになった場合は、単純な再表示で良いので、一々、表示情報を最処理する必要はなく、決められた情報を再表示するなどとしている。