QuickReport を使用して簡単な一覧表示を行なうには,どうしたら良いですか?
該当するバージョン:Delphi 2.0 Delphi 3.0/Delphi 3.1 Delphi 4
Q:
QuickReport コンポーネントを使用して簡単な一覧表示を行なうには,どうしたら良いですか?
A:
DBDEMOD の CUSTOMER.DB を用いて一覧表示を行なう方法をお知らせします。
- [ファイル(F)|新規作成(N)] より表示されるオブジェクトリポジトリから [フォーム] をクリックし QuickReport リストを選択します。
- Tableコンポーネント、DataSourceコンポーネントのプロパティの設定について説明します。
[Delphi2.0]
フォームに,TTable コンポーネントと TDataSource コンポーネントを配置します。
オブジェクトインスペクタで,以下のプロパティを設定します。
Table1.Name : MasterTable
MasterTable.DatabaseName : DBDEMOS
MasterTable.TableName : CUSTOMER.DB
DataSource1.DataSet : MasterTable
オブジェクトインスペクタで,QuickReport のプロパティを設定します。
QuickReport.DataSource : DataSource1
[Delphi3/Delphi4]
MasterTable.DatabaseName : DBDEMOS
MasterTable.TableName : CUSTOMER.DB
- 「このバンドに置かれたコンポーネントがページヘッダーとして表示されます。」(Delphi2.0)
「このバンドにはカラムヘッダーを配置してください」(Delphi3/Delphi4)
のようなコメントが記述されている,QRLabel1,QRLabel2,QRLabel3を削除します。
上から3番めのバンド Detail に,QRDBText コンポーネントを5つ配置します。このコンポーネントには,DataSource プロパティと DataField プロパティがあり,データセットの項目を表示することができます。
- 配置した QRDBText のそれぞれのプロパティを,オブジェクトインスペクタで設定します。
*Delphi2.0では以下で定義する各コンポーネントのDataSourceプロパティにDataSource1を設定し、Delphi3/Delphi4では、DataSetプロパティにMasterTableを設定します。
QRDBText1.DataField : CustNo
QQDBText1.AutoSize : True;
QRDBText2.DataField : Company
QQDBText2.AutoSize : True
QRDBText3.DataField : Zip
QQDBText3.AutoSize : True
QRDBText4.DataField : Addr1
QQDBText4.AutoSize : True
QRDBText5.DataField : Phone
QQDBText5.AutoSize : True
- MasterTable の Avtive プロパティを True にして,QuickReport を右クリックしメニューを表示し、レポートプレビュー/プレビューを選択するとプレビューが表示されます。
アプリケーションから,上記のレポートフォームを使用して,印刷したりプレビューするには,このフォームクラスに印刷やプレビューを行なう手続きを追加します。
- QRListForm クラスの public 宣言に,以下の記述を追加します。
type
TQRListForm = class(TForm)
QuickReport: TQuickReport;
Title: TQRBand;
:
:
private
{ Private 宣言 }
public
{ Public 宣言 }
procedure PreviewList; // 追加
procedure PrintList; // 追加
end;
- implementation 部に以下の手続きを記述します。
implementation
{$R *.DFM}
procedure TQRListForm.PreviewList;
begin
QuickReport.Preview;
end;
procedure TQRListForm.PrintList;
begin
QuickReport.Print;
end;
- この時点で,このフォームの印刷やプレビューを実行する手段が整いました。
ここで,この手続きを実行するメインフォームを作成します。
デスクトップには,レポートフォームの他に空のフォーム(Form1)があるはずです。このフォームをメインフォームとして使用します。
- メインフォームに,TButton を2つ配置します。
オブジェクトインスペクタで,以下のプロパティを設定します。
Button1.Caption : 印刷
Button2.Caption : プレビュー
- 各Button の OnClick イベントに以下のように記述します。
Button1 の OnClick イベントに以下のように記述します。
procedure TForm1.Button1Click(Sender: TObject);
begin
QRListForm.PrintList;
end;
Button2 の OnClick イベントに以下のように記述します。
procedure TForm1.Button2Click(Sender: TObject);
begin
QRListForm.PreviewList;
end;
このメインフォームは,QRListForm を使用しますので,[ファイル(F)|ユニットを使う(U)] から,QRListForm のユニット(デフォルトであえば Unit2)を選択します。
- 以上の手順を行なって,コンパイル,実行してください。
QuickReport を使用してマスターリンクレポートを行なうには
該当するバージョン:Delphi 2.0
Q:
QuickReport コンポーネントを使用してマスターリンクレポートを行なうには,どうしたら良いですか?
A:
マスターリンクレポートとは,1対多の関係にある2つのテーブルのリストです。
マスターテーブルの1つのレコードに対し,リンクテーブルの複数のレコードが表示されます。
DBDEMOS の VENDORS.DB と PARTS.DB を用いて,マスターリンクレポートを作成します。
- [ファイル(F)|新規作成(N)] より表示されるオブジェクトリポジトリから [フォーム] をクリックし「QuickReport マスター/リンクフォーム」を選択します。
このフォームの,Detail と DetailFooter という QRBand コンポーネントの BandType プロパティに,rbSubDetail と rbGroupFooter が設定されています。
これらのプロパティを持つバンドは,QRDetailLink のよってマスターテーブルと接続され,1対多の関係が成立します。
- フォームに,TTable コンポーネントと TDataSource コンポーネントを2つずつ配置します。
オブジェクトインスペクタで,以下のプロパティを設定します。
Table1.DatabaseName : DBDEMOS
Table1.TableName : VENDORS.DB
DataSource1.DataSet :Table1
Table2.DatabaseName : DBDEMOS
Table2.TableName : PARTS.DB
DataSource2.DataSet : Table2
Table2.MasterSource :DataSource1
ここで,オブジェクトインスペクタの MasterField プロパティをダブルクリックして,「リンク項目の設計」ダイアログを表示します。選択可能なインデックス(V)から VendorNo を選択し,リンク項目とマスター項目の VendorNo をそれぞれ選択して「追加(A)」ボタンを押します。「OK」ボタンを押して,リンク項目を設定します。
QuickReport.DataSource : DataSource1
DetailLink.DataSource : DataSource2
「このバンドに置かれたコンポーネントがページヘッダーとして表示されます。」,
「このバンドに置かれたコンポーネントがマスター情報となります。」
などのようなコメントが記述されている,QRLabel1,QRLabel2,QRLabel3, QRLabel4,QRLabel4 を削除します。
- Master バンドの高さを大きくし,Master バンド上に QRDBText を4つ配置します。
オブジェクトインスペクタで,以下のプロパティを設定します。
QRDBText1.DataSource : DataSource1
QRDBText1.DataField : VendorNo
QRDBText2.DataSource : DataSource2
QRDBText2.DataField : VendorName
QRDBText2.AutoSize : True
QRDBText3.DataSource : DataSource1
QRDBText3.DataField : Phone
QRDBText4.DataSource : DataSource1
QRDBText4.DataField : FAX
- それぞれの QRDBText の左側に QRLabel を配置して,QRDBText 項目にラベルをつけます。
オブジェクトインスペクタで,以下のプロパティを設定します。
QRLabel1.Caption : VendorNo
QRLabel2.Caption : VendorName
QRLabel3.Caption : Phone
QRLabel4.Caption : FAX
- Detail バンドには,PARTS.DB の項目を表形式で表示します。
Detail バンドの高さを大きくし,Detail バンド上に QRDBText を6つ配置します。
オブジェクトインスペクタで,以下のプロパティを設定します。
QRDBText5.DataSource : DataSource2
QRDBText5.DataField : PartNo
QRDBText6.DataSource : DataSource2
QRDBText6.DataField : Description
QRDBText7.DataSource : DataSource2
QRDBText7.DataField : OnHand
QRDBText8.DataSource : DataSource2
QRDBText8.DataField : OnOrder
QRDBText9.DataSource : DataSource2
QRDBText9.DataField : Cost
QRDBText10.DataSource : DataSource2
QRDBText10.DataField : ListPrice
- Detail バンドの上に新しいバンドを配置します。
オブジェクトインスペクタで,以下のプロパティを設定します。
新しいバンドの name : DetailHeader
DetailHeader.BandType : rbGroupHeader
DetailLink.HeaderBand :DetailHeader
これで,このバンドが Detail のヘッダバンドとして機能するようになります。
上記 5 と同じ方法で,DetailHeader に QRLabel を6つ配置してヘッダ行を作成します。
オブジェクトインスペクタで,以下のプロパティを設定します。
QRLabel5.Caption : PartNo
QRLabel6.Caption : Description
QRLabel7.Caption : OnHand
QRLabel8.Caption : OnOrder
QRLabel9.Caption : Cost
QRLabel10.Caption : ListPrice
- ふたつの TTable の Avtive プロパティを True にして,QuickReport をダブルクリックするとレポートプレビューが表示されます。
アプリケーションから,上記のレポートフォームを使用して,印刷したりプレビューするには,このフォームクラスに印刷やプレビューを行なう手続きを追加します。
- QRListForm クラスの public 宣言に,以下の記述を追加します。
type
TQRListForm = class(TForm)
QuickReport: TQuickReport;
Title: TQRBand;
:
:
private
{ Private 宣言 }
public
{ Public 宣言 }
procedure PreviewList; // 追加
procedure PrintList; // 追加
end;
- implementation 部に以下の手続きを記述します。
implementation
{$R *.DFM}
procedure TQRMDForm.PreviewList;
begin
QuickReport.Preview;
end;
procedure TQRMDForm.PrintList;
begin
QuickReport.Print;
end;
- この時点で,このフォームの印刷やプレビューを実行する手段が整いました。
ここで,この手続きを実行するメインフォームを作成します。
デスクトップには,レポートフォームの他に空のフォーム(Form1)があるはずです。このフォームをメインフォームとして使用します。
- メインフォームに,TButton を2つ配置します。
オブジェクトインスペクタで,以下のプロパティを設定します。
Button1.Caption : 印刷
Button2.Caption : プレビュー
- Button1 の OnClick イベントに以下のように記述します。
procedure TForm1.Button1Click(Sender: TObject);
begin
QRMDForm.PrintList;
end;
Button2 の OnClick イベントに以下のように記述します。
procedure TForm1.Button2Click(Sender: TObject);
begin
QRMDForm.PreviewList;
end;
- このメインフォームは,QRMDForm を使用しますので,[ファイル(F)|ユニットを使う(U)] から,QRMDForm のユニット(デフォルトであえば Unit2)を選択します。
- 以上の手順を行なって,コンパイル,実行してください。
QuickReport を使用して罫線を引くには,どうしたら良いですか?
該当するバージョン:Delphi 2.0 Delphi 3.0/Delphi 3.1 Delphi 4
Q:
QuickReport コンポーネントを使用して罫線を引くには,どうしたら良いですか?
A:
罫線の描画には,QRShape コンポーネントを使用します。QRBand の 高さを高くして QRShape コンポーネントを配置しやすくします。
rbDetail バンドは,グリッド表示の行に相当します。ここに,QRShape を配置して一行分の罫線を描いておけば,表が作成できます。
- ebDetail には,項目のデータ表示のために QRDBText が配置されています。
QRShape を QRDBText の上に配置します。 QRDBText は,QRShape に下に隠れていましますが,配置した QRShape を選択して,マウスの右ボタンをクリックし,「背面に移動(B)」を選択すると QRDBText は上に表示されます。
- QRShape の Top プロパティを 0 に設定し,大きさを適当に変更します。
配置されている QRDBText の数と同じ QRShape を隣接して配置し,表に一行分のセルを作成します。
- すべての QRShape の高さ( Height プロパティ)を同じにし,rbDetail バンドの Height プロパティを QRShape の Height プロパティよりも 1 少なく設定します。これは,上の罫線と下の罫線が重なって線が太くなるのを防ぐためです。
TQRExpr が DisplayFormat の設定を認識しません
該当するバージョン:Delphi 3.0/Delphi 3.1 Delphi 4
Q:
TQRExpr が DisplayFormat の設定を認識しません:
簡単に対応できますか?
A:
TQRExpr コンポーネントの替わりに TQRDBText コンポーネントを使用すると簡単に対応できます。TQRDBText は,DisplayFormat を認識します。
QuickReport QRExpr コンポーネントの使用方法
該当するバージョン:Delphi 3.0/Delphi 3.1 Delphi 4
QuickReport の QRExpr コンポーネントを使用すると,レポートのプレビュー,印刷の時に汎用的な計算結果を得る事ができます。計算の種類は Expression プロパティを使用して設定します。
ここではフォーム上に QuickReport を使用して Delphi のサンプルデータ,ANIMALS.DBF が表示されている時に,SIZE 項目の平均値を QRExpr を使用して表示する手順を説明します。
以下の手順を実行すると,プレビュー時に QRExpr コンポーネントに計算結果が表示されます。
(Delphi3での手順)
- オブジェクトインスペクタの Expression プロパティをダブルクリックして「式の設定」ダイアログを表示します。
- 「選択可能な関数」の中から AVERAGE を選択して「追加」ボタンを押します。
「AVERAGE(」 とダイアログの中に表示されます。
- データ項目の中から SIZE を選択して「追加」ボタンを押します。
(データ項目になにも表示されていない場合には、Table1.ActiveプロパティをTrueに変更してください)
リストボックスの中に TABLE1.SIZE と表示されます。
- 「OK」ボタンを押すとリストボックスには AVERAGE( TABLE1.SIZE ) と表示されます。
- 「OK」ボタンを押してダイアログを閉じます。
(Delphi4での手順)
- オブジェクトインスペクタの Expression プロパティをダブルクリックして「式の設定」ダイアログを表示します。
- 「関数」ボタンを押します。統計をクリックすると、選択可能な関数にAVERAGEが表示されますので、それを選択し、「次へ」ボタンを押します。
- 第1引数の入力の後ろにある「...」ボタンを押します。
- 「項目」ボタンを押します。選択可能な項目の中にTable1の項目が表示されていますので、その中からSIZEを選択し、「OK」ボタンを押します。
- AVARAGE()の第1引数の入力の欄に、Table1.SIZEと表示されているのを確認後、「OK」ボタンを押します。
- 第1引数-数値の欄にTable1.SIZEが表示されているのを確認後、「OK」ボタンを押します。
- 式を入力してください。にAVARAGE(TABLE1.SIZE)と表示されているのを確認後、「OK」ボタンを押してダイアログを閉じます。
QuickReport でデータソースを使用せずにレポートを作成する
該当するバージョン:Delphi 2.0 Delphi 3.0/Delphi 3.1 Delphi 4
Q:
QuickReport では Delphi データソースの内容をレポートにできますが,テーブル以外の内容をレポートにする事はできないのでしょうか。
A:
QuickReport には Delphi データソース以外からレポートを作成するために OnNeedData イベントが用意されています。このイベントを使用してレポートを作成する事ができます。
まず,DataSet を使用せずにレポートを作成する際の基本的な処理の流れについて説明します。
- BreforePrint イベントで変数の初期化を行います。
- OnNeedData イベントで印刷する文字列を QRLabel などに設定します。
引数 MoreData が True であるならば,印刷後,さらに OnNeedData イベントが発生します。
MoreData を False に設定すると,OnNeedData イベントの発生は終了します。
以下のサンプルはメモコンポーネントの内容を QRLabel コンポーネントに表示してレポートの作成を行うものです。Form1 に配置したボタンを押すと Form2 のプレビューを実行します。
ユニット
Unit1 // レポートの印刷フォーム
フォーム
Form1
コンポーネント
Memo1 : TMemo
Button1 : TButton
ユニット
Unit2 // レポートフォーム
フォーム
Form2
コンポーネント
QuickRep1 : TQuickRep // Delphi2.0の場合 TQuickReport
DetailBand1 : TQRBand
QRLabel1 : TQRLabel //DetailBand1 上に配置
変数
CurrentItem : Integer (グローバルに宣言)
[処理]
- 各ユニットの implementation 部以降に 以下のように追加して,それぞれのフォームを参照できるようにします。
* Unit1
uses Unit2;
* Unit2
uses Unit1;
- Unit2 に配置した QuickReport の BeforePrint イベントに以下のように記述します。
CurrentItem := 0;
PrintReport := True;
- QuickReport の OnNeedData イベントに以下のように記述します。
// Memo の行数と比較して QRLabel に内容を設定
if CurrentItem < Form1.Memo1.Lines.Count then
QRLabel1.Caption := Form1.Memo1.Lines[CurrentItem];
// CurrentItem のカウンタを1つ増やす
CurrentItem := CurrentItem + 1;
// Memo の印刷が終了した時点で MoreData を False に設定して
// OnNeedData の処理を終了
if CurrentItem = Form1.Memo1.Lines.Count then
MoreData := False
else
MoreData := True;
- Unit1 の Button の OnClick イベントに以下のように記述します。
Form2.QuickRep1.Preview;
QuickReportのPreview表示から、レポートの読み込みと保存、プリンタの設定ボタンを消すには、どのようにしたらよいのでしょうか? (99/5/12)
該当するバージョン:Delphi 3.0/Delphi 3.1 Delphi 4
Q:
QuickReportのPreview表示から、レポートの読み込みと保存、プリンタの設定ボタンを消すには、どのようにしたらよいのでしょうか?
A:
通常,Previewで表示されているのは,TQRStandardPreviewを使用して表示されて います。レポートの読み込みや保存,プリンタの設定ボタンは,その中で定義されているDelphi4ではToolButton、Delphi3ではSpeedButtonになっていますので,個々のVisibleプロパティをFalseにする事で 消すことが可能になります。
以下のサンプルを参考にしてください。
unit Unit2;
interface
uses Windows, SysUtils, Messages, Classes, Graphics, Controls,
StdCtrls, ExtCtrls, Forms, Quickrpt, QRCtrls, QRPrev, QRPrntr, Db,
DBTables;
type
TQuickReport2 = class(TQuickRep)
Table1: TTable;
QRBand1: TQRBand;
QRLabel1: TQRLabel;
QRDBText1: TQRDBText;
procedure QuickReport2Preview(Sender: TObject);
private
public
end;
var
QuickReport2: TQuickReport2;
implementation
{$R *.DFM}
procedure TQuickReport2.QuickReport2Preview(Sender: TObject);
var
test1 : TQRStandardPreview;
begin
TEST1 := TQRStandardPreview.CreatePreview(Application,TQRPrinter(Sender));
TEST1.SaveReport.Visible := false; //Delphi3.0/3.1ではTEST1.Save.Visible
TEST1.LoadReport.Visible := false; //Delphi3.0/3.1ではTEST1.Load.Visible
TEST1.PrintSetup.Visible := false;
TEST1.Show;
end;
end.