QuickReportのグループヘッダーの最終行の印字を避けるためには?

解決


こいち  2011-08-16 17:58:11  No: 40842  IP: 192.*.*.*

現在、Delphi2007でQuickReportにて、グループヘッダーがあるレポートを作成しています。

グループヘッダーは1ページにいくつも表示するように
ForceNewPageプロパティをFalseにしています。

また、改ページした場合は、グループヘッダーを再表示させたいため、
ReprintOnNewPageプロパティをTrueにしています。

レポートを作成してテストしていたところ、
あるページの最終行にグループヘッダーが表示されて改ページされている
印字パターンを見つけました。
その場合、次ページの1行目にはいきなりディテールデータが印字されて
います。

これを回避する方法はあるのでしょうか?
ご存知の方がいらっしゃいましたらご教授ください。
よろしくお願いします。

編集 削除
金魚  2011-08-18 17:21:38  No: 40843  IP: 192.*.*.*

バンドのAfterPrintで、ハンドの高さの累計を計算しておく。
頁の高さと印刷済みハンドの高さの累計から。グループヘッダー出力前に「まだ、グループヘッダーをこの頁に印刷してよいかどうか」を判定する。
で、どうだい。

編集 削除
こいち  2011-08-19 15:40:31  No: 40844  IP: 192.*.*.*

金魚様、ありがとうございます。
以下のやり方で解決出来ました。

グループバンドのBeforePrint処理で、印字位置より、最終行に印字する予定の場合は、改ページを行う。

参考までにソースを以下に記します。

  ※qrMain:TQuiqRep

  With qrMain do
  begin
    if CurrentY + Sender.Height >= Page.Length - Page.TopMargin - Page.BottomMargin then
      NewPage;
  end;

編集 削除
金魚  2012-03-07 05:49:21  No: 40845  IP: 192.*.*.*

質問された、こいちさんが解決済みであり、しかも半年前の質問に対してで恐縮です。
これまで、こいちさんのような処理の解決に、金魚は回答のように「バンドのAfterPrintで、ハンドの高さの累計を計算しておく。」で処理してきました。
こいちさんのやり方の方がスマートだなと思い、改修の機会に書換えをしてみたところ思ったようにゆきませんでした。
CurrentYが 0.1mm単位に対して Sender.Heightがピクセル単位であることから変換(例えば Sender.Height * 2.67)が必要ではないでしょうか。

編集 削除