QuickReportで総ページ数を取得するには?

解決


初心者  2013-01-07 03:19:16  No: 43605  IP: 192.*.*.*

初めまして。
WindowsXP、Delphi5で開発しています。
QuickReportで帳票を作成しているのですが、総ページ数がうまく取得出来ず悩んでおります。

改ページ条件を設定している帳票で、Aグループ3枚、Bグループ2枚、Cグループ5枚の印刷結果があるとすると、
  QuickRep.Prepare;
  QuickRep.PageNumber;
でグループを無視した総トータル数(上記の例だと10枚)は取得出来ますが、
各グループ毎の総ページ数を取得することは出来ないでしょうか?
宜しくお願い致します。

編集 削除
今日も雪  2013-01-10 10:43:33  No: 43606  IP: 192.*.*.*

印刷後に取得するならば、変数を用意して、ページ印刷後にインクリメント、グループがブレークしたらリフレッシュすればいいと思います。
が、取得したグループ枚数を、初心者さんは、どうしたいのでしょうか。
どの時点でほしいのか。印刷をしたいのか。ShowMessageで表示できればいいのかいかがでしょうか。

編集 削除
初心者  2013-01-14 19:59:45  No: 43607  IP: 192.*.*.*

ご返信遅くなりまして、申し訳御座いません。

印刷時に各グループ毎に「印刷ページ/取得したグループ枚数」として印刷(プレビュー)を行いたいと考えております。

従いまして、印刷前または印刷中にグループ枚数を取得出来たらありがたいです。

編集 削除
おかぽん  2013-01-15 09:32:32  No: 43608  IP: 192.*.*.*

QuickReportは、グループ毎の枚数をカウントしていないので、「今日も雪」さんの説明にあるとおり、
> 変数を用意して、ページ印刷後にインクリメント、グループがブレークしたらリフレッシュ
するしかありません。

「取得したグループ枚数」が、それぞれのグループの通しページ番号のみであれば、
グループページ番号用のTQRLabelを貼り付け、グループページ番号用の変数を準備し
・TQuickRep.OnEndPage で、グループページ番号用の変数をインクリメント。
・グループページ番号用のTQRLabelのOnPrint において、以下でページ番号を印刷。
  Value := IntToStr(グループページ番号用の変数);
・グループフッターでグループページ番号用の変数を1 に戻す

グループ毎の総ページ数も同時に印刷が必要な場合、基本的にQuickRep.Prepareが必須になります。
QuickRep.Prepareの動作そのものは、印刷プレビュー画面が出ないだけで QuickRep.Preview を
実行しているのとほぼ同じです。
QuickRep.PrepareとQuickRep.Preview ( or Print) をフラグ等で判定し、Prepare時のみ
グループフッターでグループ毎のページ数を取得するようにし、Preview( or Print) 時は、
取得したグループ毎の総ページ数を出力します。

編集 削除
初心者  2013-01-16 11:53:09  No: 43609  IP: 192.*.*.*

今日も雪様、おかぽん様、ご返信ありがとうございます。

QuickRep.Prepareの基本動作がわかっていなかったため、悩んでおりましたが、印刷プレビュー画面が出ないだけで QuickRep.Preview を
実行しているのとほぼ同じであれば、配列で確保しておくことが出来そうです。

あとはロジックだけの問題ですので、本件は解決とさせて頂きます。

ありがとうございました。

編集 削除