過去の桐井戸端BBS (桐ver.8)
9070 何ページ分の何ページ目かというふうにページ番号を表示したい 桐谷賢治 2000/12/22-09:14
一覧表やレポートなどでページ番号を付ける事がありますが、通常は<1>のようなってます。
これの応用で何ページ分の何ページ目かを表示させる方法はありますか?
例<1−3> 3ペー分の1ページ目という意味。
よろしくおねがいします。
9072 Re:ページ番号の表示 幅田 2000/12/22-09:39
記事番号9070へのコメント
桐谷賢治さん、こんにちは

>一覧表やレポートなどでページ番号を付ける事がありますが、通常は<1>の
>ようなってます。これの応用で何ページ分の何ページ目かを表示させる方法はあり
>ますか?例<1−3> 3ページ分の1ページ目という意味。

印刷するレポートの総ページを1ページから出力したいっていうことでしょうか?

過去の桐井戸端BBSに何度か話題になったと思います。

↓か
http://www.fuku3.com/~habata/kbbs/kakov7/02439.htm

↓あたりを参考にしてみてください。
http://www.fuku3.com/~habata/kbbs/kakov8/03030.htm

9082 Re:ページ番号の表示 toshi-chan 2000/12/22-19:13
記事番号9070へのコメント
桐谷賢治さん、こんばんは。

一覧表印刷の場合はできません。
一覧表印刷のプレビューを実行するとページ番号が表示されますが、
あれはその都度計算しているもので取り出すことはできないそうです。
以前ユーザサポートに質問したときの答でした。

何とかできないものかといろいろ考えましたが、あきらめました。
9087 一般論として総ページ数は求められません 佐田 守弘 2000/12/22-23:54
記事番号9070へのコメント
桐谷賢治さん
一覧表印刷やレポート印刷で総ページ数を印刷したいとの事ですが、
幅田さんが紹介されている通り、以前から多数の論議がされております。
詳しくは過去ログを見て頂く事として、簡単に総括しておきます。

●一般論として総ページ数は予め求められません
桐の様なデータベースソフトで、かつ、1レコードあたりの印刷行数も一定でないような場合、
総ページ数はレイアウトを割り付けてみるなり、印刷を行ってみないと分かりません。
しかも、MS-DOS環境の「行」「桁」基準の割り付けなら比較的楽でしょうが、
Windows環境の印刷レイアウトでは、フォントや文字サイズなどによって文字のピッチが細かく変わりますから、
印刷幅と文字数だけで印字行数を求める事はできません。
しかも禁則処理や英文のワードラップが入って来ると、尚更複雑になります。
更に、プリンタの機種によって、割り付けが微妙に変わります。
ですから、印刷前に総ページ数を求める事は事実上不可能ですし、
そのための関数もありません(おそらく作れないのでしょう)。

●レイアウト表示は印刷シミュレーション
「レイアウトを表示すればページ数が表示されるではないか」と思われるでしょう。
レイアウト表示は印刷のシミュレーションです。
どの様に行っているかの詳細までは分かりませんが、プリンタドライバに印刷実行のシミュレーションを行わせ、
その結果を画像として取り込んで表示させているのではないかとも思います。

●印刷ページ数が計算できる場合
一般論は以上の通りですが、ある条件下ではレコード数から印刷ページ数を計算できる場合があります。
その条件とは、1レコードあたりの印字行数が固定されている場合です。
この場合であれば、1ページに印刷できる行数からレコード数を求めて、総ページ数を計算する事ができます。

佐田守弘(KS-00119)
9097 Re:ページ番号の表示 T.Samura 2000/12/24-07:32
記事番号9070へのコメント
桐谷賢治さん、こんにちは 。

レポート印刷での総ページは以下の方法で得ていますので参考にして下さい。
一覧表オブジェクトを使えば一覧表も可能かと思います。
半年前にnifty FAPPLIで発言した文章です。
元々はピクチャオブジェクトを使用した場合に1頁 に収まるかどうかでレポートファイルを使い分ける必要が有ったためです。

−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−

桐V7以降のレポート印刷ではオブジェクトによっては印刷しないと総ページ数が判らずなにかと不便を感じます。
桐V5の時は「文書ファイル名=」を指定できましたので代用方法を探した所
プリンタのプロパティで印刷先のポートに保存ファイル名を指定することで「空印刷?」に成功しましたので
宜しければ参考にして下さい。
ただ裏技的なので環境によってはうまく行かないかもしれません。

OS:Windows98 SE
桐:VER7 #109
手順
・実際に印刷するプリンタと同種のプリンタを「プリンタの追加」で追加作成する。
・プリンタのプロパティの詳細で「ポートの追加」「その他ローカルポート」で接続先ポート名を例えば「c:\temp\temp.bin」で登録する。
 それで「印刷先のポート」は「c:\temp\temp.bin(不明なローカルポート)」になる。(c:\temp フォルダは予め作成する)
・プリンタ名を「null file」等に変更しておく。
・レポート定義の明細部のどこかに#SETQ(&昭和年,#PAGE)を記述しページ数を組み込み変数に代入させる。
・一括処理で
  &STR=#ウインドウズプリンタ名(0)
  プリンタ "null file"
  レポート印刷 "who.rpt",部数=1,開始ページ=1,終了ページ=0,...
  プリンタ &STR
  * これ以降 &昭和年 を総ページ数として使用する

戻る