========================================================================== テキスト印刷&プレビューコンポーネント TPreviewBox Text Print & Preview Component Version 0.4 Copyright(C) 2007 seizo ========================================================================== 【 概要 】 プレビュー機能付きのテキスト印刷コンポーネントです。 実際にテキストファイルを印刷しようとすると、紙サイズ・フォント・ 余白をどう扱うか等、意外とやっかいな問題が多くある事に気付きこの コンポーネントを作成しました。 また、このコンポーネントとほぼ同等の印刷機能を持つ PrintText と いう汎用の関数も PrintTxt(PrintTxt.pas) というユニットとして同梱 してあります。 TPreviewBox コンポーネント や PrintText 関数を使用すれば、作成 するアプリケーションやコンポーネントに簡単にテキスト印刷機能及び プレビュー機能を付加する事が可能です。 TPreviewBox のおもな仕様です。 ・たて・横それぞれ最大16個(合計256個)までプレビューページを表示 する事が可能 ・プレビューを開始する先頭ページの指定が可能 ・プレビューの倍率を指定する事が可能(10〜100%) ・印刷するページを指定して印刷する事が可能 (例 : 8〜12ページのみ印刷等) ・オプション指定によりファイル名やタイムスタンプやページ番号を各 ページの余白に印刷する事が可能 ・タブサイズを 0 〜 32 の範囲で指定する事が可能 【 プロパティ 】 このコンポーネント 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 TabSize: Integer; 印刷・プレビュー時のタブサイズを 0 〜 32 の範囲で指定します。 property DefaultExt: Boolean FileName プロパティに含まれる拡張子の値によってタブサイズの ディフォルト値を自動指定します。 (.pas .c .h .cpp .hpp を特定の拡張子として扱います。) 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; 現在の種々の紙情報を表示するメソッドです。 【 テクニカル情報 】 バグが見つかった場合「まず自分自身を疑え」というのがプログラミングの鉄則で すが、画面表示が予想に反しておかしな表示をする場合があります。--- 印刷時に は常に正常に印刷されます。--- Windows のMetafile 関係のバグと思われますが、 以下に示しましたサンプルアプリケーションの「リフレッシュ」ボタンを押した 場合の様にフォントを設定し直したりすると正常に表示される場合もあります。 バグがあるのを承知で公開するのは、けしからんとお叱りを受けそうですが、この 様なバグの解決方法を誰か見つけることが出来るのではないかという期待を込めて TPreviewBox のソースを公開しています。 procedure TForm1.Button5Click(Sender: TObject); begin PreviewBox1.Font := FontDialog1.Font; end; 【 新しくなった点 】 // Version 0.2 // ・プレビューイメージ上でも以下の各イベントが発生する様に修正 しました。 OnClick, OnDblClick, OnDragDrop, OnDragOver, OnEndDock, OnEndDrag, OnMouseDown, OnMouseMove, OnMouseUp, OnStartDock, OnStartDrag ・TPreviewBox を使用したサンプルアプリケーションを添付しました。 // Version 0.3 // ・DrawMode プロパティを追加しました。この値によって印刷及び プレビューの各種の方法が決定されます。 // Version 0.4 // ・TabSize プロパティを追加しました。これによって印刷・プレビュー時の タブサイズを 0 〜 32 の範囲で指定する事が出来る様になりました。 ・DefaultExt プロパティを追加しました。これによって FileName プロパティ に含まれる拡張子の値によってタブサイズのディフォルト値を自動指定出来る 様になりました。(.pas .c .h .cpp .hpp を特定の拡張子として扱います。) ・タブサイズを指定する事が出来る様になったのにともない、とくに DrawMode プロパティの必要性がなりましたので廃止しました。 (DrawMode という名前の定数として残してはありますが。) 【 収録ファイル 】 PrevBox.pas - TPreviewBox 本体のソースファイル PrevBox.dcr - TPreviewBox のアイコン用ファイル PrintTxt.pas - PrintText 関数を使用する為のユニットファイル Readme.txt - このファイル Test.exe - TPreviewBox を使用したサンプルアプリケーション Test.lzh - サンプルアプリケーションのソースファイル 【 TPreviewBox のインストール方法 】 適当なフォルダを作成して、そのなかに PrevBox.pas と PrevBox.dcr を コピーしてからコンポーネントのインストールで、その PrevBox.pas を 選択して下さい。 【 PrintText 関数の使用方法 】 PrintText 関数は以下の様に定義されています。 function PrintText(Text: String; TextName: String; Font: TFont; TabSize: Integer; PrintOption: Integer): Integer; 一般のアプリケーションでこの関数を使う場合は、アプリケーションと 同じフォルダに PrintTxt.pas をコピーしてから、アプリケーションの ソースファイルの uses 節に PrintTxt と記述して下さい。 例えば、該当アプリケーションが TMemo を使用しているとすれば PrintText(Memo1.Text, OpenDialog1.FileName, Memo1.Font, 8, 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