コードによるレポート フォームの作成
通例、ほとんどのレポートはデザイナーを使用して作成します。しかし、レポートのフォームが不明な場合など、コードから手動でレポートを作成することが必要になる場合もあります。
レポートを手動で作成するには、次の作業を順に実行する必要があります。
レポート コンポーネントをクリアする
データ ソースを追加する
データ ページを追加する
レポートのページを追加する
ページにバンドを追加する
バンドのプロパティを設定し、そのバンドをデータに接続する
各バンドにオブジェクトを追加する
オブジェクトのプロパティを設定し、そのオブジェクトをデータに接続する
リスト タイプのシンプルなレポートの作成を見てみましょう。次のようなコンポーネント、frxReport1: TfrxReport と frxDBDataSet1: TfrxDBDataSet があるとします(後者は、DBDEMOS の Customer.db テーブルのデータに接続されています)。レポートには、レポート タイトル バンドとマスター データ バンドを持つ 1 つのページが含まれます。レポート タイトル バンドには、"Hello FastReport!" というテキストの入ったオブジェクトがあり、マスター データ バンドには、"CustNo" フィールドへのリンクを含むオブジェクトが入ります。
Pascal:
var
DataPage: TfrxDataPage;
Page: TfrxReportPage;
Band: TfrxBand;
DataBand: TfrxMasterData;
Memo: TfrxMemoView;
{ レポートをクリアする }
frxReport1.Clear;
{ レポートでアクセス可能なものの一覧にデータセットを追加する }
frxReport1.DataSets.Add(frxDBDataSet1);
{ データ ページを追加する }
DataPage := TfrxDataPage.Create(frxReport1);
{ ページを追加する }
Page := TfrxReportPage.Create(frxReport1);
{ 一意の名前を作成する }
Page.CreateUniqueName;
{ 各フィールドのサイズ、用紙のサイズと向きを既定値に設定する }
Page.SetDefaults;
{ 用紙の向きを変更する }
Page.Orientation := TPrinterOrientation.poLandscape;
{ レポート タイトル バンドを追加する }
Band := TfrxReportTitle.Create(Page);
Band.CreateUniqueName;
{ バンドの Top 座標と高さを設定する }
{ どちらの座標もピクセル単位 }
Band.Top := 0;
Band.Height := 20;
{ レポート タイトル バンドにオブジェクトを追加する }
Memo := TfrxMemoView.Create(Band);
Memo.CreateUniqueName;
Memo.Text := 'Hello FastReport!';
Memo.Height := 20;
{ このオブジェクトはバンドの幅に合わせて引き伸ばされる }
Memo.Align := baWidth;
{ マスター データ バンドを追加する }
DataBand := TfrxMasterData.Create(Page);
DataBand.CreateUniqueName;
DataBand.DataSet := frxDBDataSet1;
{ Top 座標は、前に追加したバンドの Top + Hight よりも大きくなければならない }
DataBand.Top := 100;
DataBand.Height := 20;
{ マスター データにオブジェクトを追加する }
Memo := TfrxMemoView.Create(DataBand);
Memo.CreateUniqueName;
{ データに接続する }
Memo.DataSet := frxDBDataSet1;
Memo.DataField := 'CustNo';
Memo.SetBounds(0, 0, 100, 20);
{ テキストをオブジェクトの右余白に合わせる }
Memo.HAlign := haRight;
{ レポートを表示する }
frxReport1.ShowReport;
C++:
TfrxDataPage * DataPage;
TfrxReportPage * Page;
TfrxBand * Band;
TfrxMasterData * DataBand;
TfrxMemoView * Memo;
// レポートをクリアする
frxReport1->Clear();
// レポートでアクセス可能なものの一覧にデータセットを追加する
frxReport1->DataSets->Add(frxDBDataset1);
// データ ページを追加する
DataPage = new TfrxDataPage(frxReport1);
// ページを追加する
Page = new TfrxReportPage(frxReport1);
// 一意の名前を作成する
Page->CreateUniqueName();
// 各フィールドのサイズ、用紙のサイズと向きを既定値に設定する
Page->SetDefaults();
// 用紙の向きを変更する
Page->Orientation = TPrinterOrientation->poLandscape;
// レポート タイトル バンドを追加する
Band = new TfrxReportTitle(Page);
Band->CreateUniqueName();
// バンドの Top 座標と高さを設定する
// どちらの座標もピクセル単位
Band->Top = 0;
Band->Height = 20;
// レポート タイトル バンドにオブジェクトを追加する
Memo = new TfrxMemoView(Band);
Memo->CreateUniqueName();
Memo->Text = "Hello FastReport!";
Memo->Height = 20;
// このオブジェクトはバンドの幅に合わせて引き伸ばされる
Memo->Align = baWidth;
// マスター データ バンドを追加する
DataBand = new TfrxMasterData(Page);
DataBand->CreateUniqueName();
DataBand->DataSet = frxDBDataset1;
// Top 座標は、前に追加したバンドの Top + Hight よりも大きくなければならない
DataBand->Top = 100;
DataBand->Height = 20;
// マスター データにオブジェクトを追加する
Memo = new TfrxMemoView(DataBand);
Memo->CreateUniqueName();
// データに接続する
Memo->DataSet = frxDBDataset1;
Memo->DataField = "CustNo";
Memo->SetBounds(0, 0, 100, 20);
// テキストをオブジェクトの右余白に合わせる
Memo->HAlign = haRight;
// レポートを表示する
frxReport1->ShowReport(true);
いくつかの詳細を説明しましょう。
レポートで使用されるすべてのデータ ソースは、データ ソースの一覧に追加する必要があります。上記のケースでは、これは次の行
frxReport1.DataSets.Add(frxDBDataSet1)
によって実行されています。追加しておかないと、レポートは動作しません。
データ ページは、TfrxADOTable
などの内部データセットをレポートに挿入するために必要です。そのようなデータセットはデータ ページにのみ配置することができます。
Page.SetDefaults
の呼び出しは必要ありません。この場合、ページは A4 の用紙サイズで余白 0 mm となります。SetDefaults は、余白を 10 mm に設定し、プリンターが既定で持つ用紙サイズおよび配置を取り込みます。
ページにバンドを追加する際は、バンドが互いに重なっていないことを確認してください。これを実行するには、Top と Height の座標を設定するだけで十分です。Left と Width の座標を変更しても意味がありません。バンドは常に、それが配置されているページと同じ幅だからです(垂直方向のバンドの場合は、これに該当しません。Left と Width プロパティを設定する必要があり、Top と Height は気にしません)。注意してほしいのは、ページにおけるバンドの位置の順序が非常に重要であるということです。常に、デザイナーでバンドを配置したときと同じようにバンドを配置します。
オブジェクトの’座標およびサイズは、ピクセル単位で設定されます。すべてのオブジェクトの Left
、Top
、Width
、および Height
プロパティは Extended 型であるため、整数以外の値を指し示すことができます。以下の定数が、ピクセルからセンチメートルおよびインチへの変換用に定義されています。
fr01cm = 3.77953;
fr1cm = 37.7953;
fr01in = 9.6;
fr1in = 96;
たとえば、バンドの高さを 5 mm に設定するには、次のようにします。
Band.Height := fr01cm * 5;
Band.Height := fr1cm * 0.5;