このグループのサンプルでは、GrapeCity.Documents.Drawing.GcGraphics(GcPdfGraphics など) 上に、GrapeCity.Documents.Drawing.TableRenderer クラスを使用してテーブルを描画する方法を紹介しています。
TableRenderer クラスは、GrapeCity.Documents.Layout.Composition 名前空間のクラスと一緒に使用することで、テーブル、テキスト、図形を含む複雑なレイアウトを描画することができます。
- TableRenderer(GrapeCity.Documents.Drawing.TableRenderer)
結合/回転/サイズ調整/階層構造化されたセルや独自のセルスタイルを持つテーブルを描画するためのヘルパークラスです。
テーブルのセルには、単純なテキスト、複数フォーマットの TextLayout、独自のコンテンツを含めることができます。
TableRenderer クラスは、レイアウトエンジン(GrapeCity.Documents.Layout.LayoutHost および関連クラス)上に構築されています。
- FrameStyle(GrapeCity.Documents.Drawing.FrameStyle)
テーブルフレームまたはテーブルセルの罫線と塗りつぶしスタイルを表します。
このクラスのプロパティにて、罫線のパディング/幅/色や、コンテンツの塗りつぶし、罫線の角の半径を指定できます。
- CellStyle(FrameStyle から派生した GrapeCity.Documents.Drawing.CellStyle)
テーブルセルのZオーダー、罫線、コンテンツの塗りつぶし、テキストのレイアウトに関する設定を追加できます。
テキストフォーマット、回転、配置、許容できるテキスト幅を指定するプロパティがあります。
CustomDraw デリゲートを使用すると、テーブルセル内に独自のコンテンツ(階層化したテーブルなど)を描画することができます。
1つの CellStyle を複数のテーブルセルに関連付けることもできます。
- TableCell(GrapeCity.Documents.Drawing.TableCell)
テーブルの特定のセルに関連するスタイルとコンテンツ(データ)を表します。
TableCell は、セルの行と列のインデックス、結合された行と列の数、グラフィック単位でのセルの幅と高さに関する情報を含んでいます。
テーブルの描画は、通常、次のような手順で行います。
- テーブル用の矩形(LayoutRect)を作成します。方法は 2 つあります。
GrapeCity.Documents.Layout.Composition 名前空間のヘルパークラスを使用するか、
GrapeCity.Documents.Layout 名前空間のクラスを直接使用するかです。
- Composition 名前空間のヘルパークラスを使用する場合、Surface クラスのオブジェクトを作成後、View クラスのオブジェクトとして任意のサイズのビューを作成します。
そして、View オブジェクトを使用して、テーブルをホストする Visual クラスのオブジェクトを作成します。Visual オブジェクトは、関連する LayoutRect クラスのオブジェクトを含みます。
- Layout 名前空間のクラスを直接使用する場合、LayoutHost クラスのオブジェクトを作成後、LayoutView クラスのオブジェクトとして任意のサイズのビューを作成します。
そして、LayoutView オブジェクトを使用して、LayoutRect クラスのオブジェクトを作成します。
- テーブルの LayoutRect の設定を行います。テーブルの角のうち少なくとも1つは固定する必要があります。
他の角の位置は、テーブルのコンテンツに応じて計算することができます。
もちろん、テーブルの2つの角を固定する(例えば、テーブルの上辺、左辺、右辺を設定する)こともできますし、4つの角すべてを固定することもできます。
TableRenderer クラスのコンストラクタに渡される fixedSides パラメータの値は、角の固定に応じて選択する必要があります。
- TableRenderer クラスのオブジェクトを作成し、GcGraphics、LayoutRect、およびその他のパラメータをコンストラクタに渡します。
なお、テーブルの行/列数やテーブルのパディング設定もコンストラクタに渡すことができますが、後で変更することはできません。
- 必要に応じて、列幅と行高に追加の設定を適用します。デフォルトの最小列幅と最小行高は、
TableRenderer クラスのコンストラクタに渡すことができます。
- また、必要に応じて、テキストフォーマット、パディング設定、その他の調整を行う CellStyle クラスのオブジェクトを作成します。
一般的には、ベースとなるセルスタイルを作成し、それを元により特殊なスタイルを作成する方法が便利です。
- TableRenderer.AddCell() メソッドを使用して、用意されたセルスタイルとデータを持つテーブルセルを追加します。
複数の列や行にまたがるセルを追加することもできます。背面や前面のスタイルを使用するセルは、複数の通常セルと重ねて追加するときに役立ちます。
- 必要に応じて、TableRenderer.AddMissingCells() メソッドを呼び出して、テーブルの隙間を埋めるために空のセルを追加してください。
そうしないと、空のセルの周りにグリッド線が描画されません。
すべての設定を適用し、すべてのセルを追加したら、LayoutHost オブジェクトを直接操作している場合は、TableRenderer.Render() メソッドを呼び出します。
コンストラクタに渡された GcGraphics オブジェクトにテーブルが描画されます。
Surface オブジェクトと Visual オブジェクトを作成した場合は、いくつかの追加手順を実行する必要があります。
- TableRenderer.ApplyCellConstraints() メソッドを呼び出し、テーブルレイアウトを計算します。
- Visual オブジェクトに Draw デリゲートをアタッチします。Draw デリゲート内にて、GcGraphics.Transform に
Visual.Layer.Surface.BaseTransform を割り当てて、TableRenderer.Render() メソッドを実行します。
- これで、1つ以上のテーブルやその他のビジュアルにて Surface を描画することができます。対象の GcGraphics オブジェクトを渡して、
Surface.Render() メソッドを呼び出します。
GrapeCity.Documents.Drawing.TableRenderer のサンプルは以下のとおりです。