========================================================================== テキスト印刷&プレビューコンポーネント TPreviewBox Text Print & Preview Component Version 0.1 Copyright(C) 2007 seizo ========================================================================== 【 概要 】 プレビュー機能付きのテキスト印刷コンポーネントです。 実際にテキストファイルを印刷しようとすると、紙サイズ・フォント・ 余白をどう扱うか等、意外とやっかいな問題が多くある事に気付きこの コンポーネントを作成しました。 また、このコンポーネントとほぼ同等の印刷機能を持つ PrintText() と いう汎用の関数も PrintTxt(PrintTxt.pas) というユニットとして同梱 してあります。 TPreviewBox コンポーネント や PrintText() 関数を使用すれば、作成 するアプリケーションやコンポーネントに簡単にテキスト印刷機能及び プレビュー機能を付加する事が可能です。 TPreviewBox のおもな仕様です。 ・たて・横それぞれ最大16個(合計256個)までプレビューページを表示 する事が可能 ・プレビューを開始する先頭ページの指定が可能 ・プレビューの倍率を指定する事が可能(10〜100%) ・印刷するページを指定して印刷する事が可能 (例 : 8〜12ページのみ印刷等) ・オプション指定によりファイル名やタイムスタンプやページ番号を各 ページの余白に印刷する事が可能 【 プロパティ 】 このコンポーネント TPreviewBox で追加されたプロパティは、以下の通りです。 property Text: String; テキスト印刷のプレビューをする対象のテキストを指定します。 property PageCount: Integer; 印刷時のページ数を保持するリードオンリイのプロパティ。 property Column: Integer; 横一列に並べるプレビューイメージの数を指定します。(1〜16) property Row: Integer; 縦一列に並べるプレビューイメージの数を指定します。(1〜16) property StartPage: Integer; プレビューの先頭ページを指定します。(1〜PageCount) property ImageCount: Integer; コントロール上に表示する実際のプレビューイメージの数を保持 するリードオンリイのプロパティ。 property Ratio: Integer; プレビューの倍率を指定します。(%単位、10〜100) property Font: TFont; 印刷時のフォントを指定します。 property PrintOption: Integer; 印刷時のオプションを指定します。 PrintOption で使用する定数は、次の様に定義されています。 const poFileName = 1; // 印刷時にファイル名を印字する。 poTimeStamp = 2; // 印刷時にタイムスタンプを印字する。 poPageNumber = 4; // 印刷時にページ番号を印字する。 例えば、すべてのオプションを有効にするには、このプロパティ に (poFileName or poTimeStamp or poPageNumber) という値を 指定します。(すなわち 7 という値です。) property FileName: String; 現在テキスト印刷のプレビューをする対象になっているテキスト にファイル名等の名前を付けます。PrintOption で poFileName が 有効になっている場合は、この名前が印字するファイル名として 使用されます。 property PageSize: Integer; 1ページのおおよそのサイズを保持するリードオンリイのプロパティ property PaperInfo: TPaperInfo; 現在の紙情報を返すリードオンリイのプロパティ TPaperInfo は、次の様に定義されています。 type TPaperInfo = record PrintableArea: TIntegerSize; // 印刷可能領域のサイズ MMPrintableArea: TDoubleSize; // 印刷可能領域のサイズ(mm) PaperSize: TIntegerSize; // 紙サイズ MMPaperSize: TDoubleSize; // 紙サイズ(mm) DPI: TSize; // DPI値 LeftMargin: Integer; // 余白 TopMargin: Integer; RightMargin: Integer; BottomMargin: Integer; MMLeftMargin: Double; // 余白(mm) MMTopMargin: Double; MMRightMargin: Double; MMBottomMargin: Double; ScaleFactor: Integer; // スケールファクタ(%) TrueMMPrintableArea: TDoubleSize; // 真の印刷可能領域のサイズ(mm) TrueMMPaperSize: TDoubleSize; // 真の紙サイズ(mm) TrueMMLeftMargin: Double; // 真の余白(mm) TrueMMTopMargin: Double; TrueMMRightMargin: Double; TrueMMBottomMargin: Double; end; property Pages[Index: Integer]: String; 各ページのテキストを返すリードオンリイの配列プロパティ Index は、1〜PageCount でなければなりません。 property Images[Index: Integer]: TImage; コントロール上に表示されているプレビューイメージを返す リードオンリイの配列プロパティ Index は、1〜ImageCount でなければなりません。 例えば、Images[Index] は (StartPage + Index - 1) ページ目 のプレビューイメージを表わしているという事になります。 【 メソッド 】 このコンポーネント TPreviewBox で追加されたメソッドは、以下の通りです。 procedure Print; 現在の各設定で印刷をします。 procedure PrintPage(PageFrom: Integer; PageTo: Integer); 現在の各設定でページを指定して印刷をします。 function GetPageMeta(PIndex: Integer): TMetafile; 指定したページのメタファイルイメージを返す関数です。 procedure DispPaperInfo; 現在の種々の紙情報を表示するメソッドです。 【 TPreviewBox のインストール方法 】 適当なフォルダを作成して、そのなかに PrevBox.pas と PrevBox.dcr を コピーしてからコンポーネントのインストールで、その PrevBox.pas を 選択して下さい。 【 PrintText() 関数の使用方法 】 PrintText() 関数は以下の様に定義されています。 function PrintText(Text: String; TextName: String; Font: TFont; PrintOption: Integer): Integer; 一般のアプリケーションでこの関数を使う場合は、アプリケーションと 同じフォルダに PrintTxt.pas をコピーしてから、アプリケーションの ソースファイルの uses 節に PrintTxt と記述して下さい。 例えば、該当アプリケーションが TMemo を使用しているとすれば PrintText(Memo1.Text, OpenDialog1.FileName, Memo1.Font, poFileName or poTimeStamp or poPageNumber); の様な感じで Memo1 の内容を印刷する事が出来ます。 【 参考資料 】 中村 拓男 著(ソフトバンクパブリッシング発行) Delphi Graphic Secrets Know-how & Libraries 中村 拓男さん、有難うございました。 【 著作権 】 このプログラムの著作権は、seizo が有します。 【 ソフトウェア種別 】 このプログラムはフリーソフトウェアです。以下の事項を御承諾頂ければ、 自由にコピー、使用、配布を行なって頂いて構いません。 ◎このプログラムを使用した上でのいかなる損害、損失にも当方は一切 責任を負いません。このプログラムの使用は、使用者の責任において 行なって下さい。 ◎このプログラムを配布される場合は、このドキュメントファイルも含め 全てのファイルをオリジナルの状態で配布して下さい。 【 その他 】 まだまだ、改良の余地はたくさんあると思います。バグや感想、「ここは、 こうした方が良いのではないか?」等のご意見がありましたらメールで 御連絡下さい ◎seizoの連絡先 e-mail : seizo@mars.dti.ne.jp 他のコンポーネントやアプリ等をここで紹介しています。 http://www.vector.co.jp/vpack/browse/person/an003597.html