喫茶XRAYトップページ

[スレッド全体
]

[1026] Re:いまだエディタが完成せず。返信 削除
2006/11/23 (木) 21:38:09 Mr.XRAY
▼ 宮さん

> 質問1:どちらを使うべきなのか解りません。
TextOutFileはTplPrevのメソッドです。このメソッドは禁則処理をして印刷
(印刷プレビュー)します。
したがって、テキストエディタの印刷には向いていないと思います。
また、DrawTextExでは、ページを越える印刷は自分で処理する必要がありま
す。
テキストエディタの印刷は、テキストをStringListなどに読込んで、自分で
各々の行を印刷する処理を自分で書くことになるでしょう。

> 質問2:プレビューのページ数は正しく表示しているのですがテキストが一ページを
> 表示したままです。
> デモ03TextFileと0404_PageCountを参考にしました。


03_TextFileの説明
http://homepage2.nifty.com/Mr_XRAY/Delphi/plPrev/T_TextOutFile.htm
では、
>複数頁にわたるテキスト文書の印刷コード例はメソッドの説明ページにあり
>ます.

となっていますので、そちらを参考にして下さい。
http://homepage2.nifty.com/Mr_XRAY/Delphi/plPrev/M_TextOutFile.htm
テキストエディタの場合、このメソッドの最後の引数の値を0にします。

結果的に、StringListOutを使用するか、テキストをStringList等に読込んで
自分で印刷する(改頁を考慮した)コードを書くことになります。
StringListOutメソッドは、その処理を内部で行っているだけです。ただし、
禁則処理や、文字列の両端揃えなどの機能を持たせているため、処理は遅い
です(現在のところ処理の高速化の予定はありません)。

[備考]
TplPrevを用いた印刷処理(改頁等)は、基本的にTPrinterを使用したものと同じです。
TPrinterではどのように処理するのかを、まず知る必要があります。

http://homepage2.nifty.com/Mr_XRAY/Delphi/plPrev/plPrev.htm
■ 描画用キャンバスと印刷プレビュー画面
の4行目の説明参考。


[1027] 改頁を伴う印刷の基本コード返信 削除
2006/11/23 (木) 21:56:45 Mr.XRAY
例えば、以下の様なものです。
実行してみれば、頁ごとに印刷のコードがなければ、全て同じとなってしまう
のが理解できると思います。

uses Printers;

procedure TForm1.Button1Click(Sender: TObject);
var
     i     : Integer;
     Start : Integer;
     Stop  : Integer;
begin
     Start:=1;
     Stop :=3;
     Printer.BeginDoc;
     Printer.Canvas.Font.Size:=50;
     try
       for i:=Start to Stop do begin
         if i=Start   then Printer.Canvas.TextOut(500,400,'1頁目');
         if i=Start+1 then Printer.Canvas.TextOut(500,800,'2頁目');
         if i=Start+2 then Printer.Canvas.TextOut(500,1200,'3頁目');
         if i=Stop    then Printer.Canvas.TextOut(500,1200,'最後の頁');
         if i<>Stop then Printer.NewPage;
       end;
     finally
       Printer.EndDoc;
     end;
end;

これを宮さんのように以下の様にすると、全ての頁に同じものが印刷されてし
まいます。

procedure TForm1.Button1Click(Sender: TObject);
var
     i     : Integer;
     Start : Integer;
     Stop  : Integer;
begin
     Start:=1;
     Stop :=3;
     Printer.BeginDoc;
     Printer.Canvas.Font.Size:=50;
     try
       for i:=Start to Stop do begin
         Printer.Canvas.TextOut(500,400,'1頁目');
         if i<>Stop then Printer.NewPage;
       end;
     finally
       Printer.EndDoc;
     end;
end;

TplPrevコンポーネントは、基本的にTPrinterを使用した印刷の方法を理解
していない方を対象にしていません。TPrinterではプレビューができないし〜、
という方が対象ですのであしからず (^_^;)


[1028] Re:改頁を伴う印刷の基本コード返信 削除
2006/11/24 (金) 10:32:37
▼ Mr.XRAYさん
> TplPrevコンポーネントは、基本的にTPrinterを使用した印刷の方法を理解
> していない方を対象にしていません。TPrinterではプレビューができないし〜、
> という方が対象ですのであしからず (^_^;)


早速のご指導、ありがとうございます。
PCとの最も身近なヒューマンインターフェースである印刷が、
大変難しいですね。
かなり有名なエディターでも、印刷機能がお粗末なものがある理由が
解りました。
サゼッションに従い、素人はほどほどにします。
ありがとうございました。m(_ _)m



[1031] Re2:改頁を伴う印刷の基本コード返信 削除
2006/11/24 (金) 19:28:22 Mr.XRAY
▼ 宮さん

> サゼッションに従い、素人はほどほどにします。
そんなこと言わずに頑張ってください。
プログラムを始める前は、何か、プログラムでいろいろなことが、
「もしかしたら簡単にできるのかしら」
という期待が大きい場合がありますね。

実際にやってみると、結局、自分でガリガリとコードを書かないと、コンピュ
ータはなんにもやってくれない。で、挫折しそうになるか、挫折していまう方
もいる様です。

しかし、例えば1〜1000までの整数の足し算(公式を使わずに)を人がやったら
途中でいやになってしまいます。でも、コンピュータは文句を言わずに黙々
とやってくれます。
このような単純処理はコンピュータの得意技です。つまり、定型業務には、
たとえ開発に苦労しても、それだけの価値があると思っています。

スポーツ、運動でも学問(プログラミング)でも、ある程度の期間やっていると、
ある時、一つの壁を越えることがあるそうです。語学もそうだそうです。

私は、誰でもコンピュータプログラミングは、もしやる気になれば出来ると
考えています。もちろん、オリンピックで金メダルを獲るようなレベルには
誰でもがなれるわけではありませんが、一定のレベルにはいくのではないで
しょうか。

若輩が生意気なことを言って申し訳ありません。

[1032] Re3:改頁を伴う印刷の基本コード返信 削除
2006/11/25 (土) 00:41:31
▼ Mr.XRAYさん

>
> 実際にやってみると、結局、自分でガリガリとコードを書かないと、コンピュ
> ータはなんにもやってくれない。で、挫折しそうになるか、挫折していまう方
> もいる様です。

アドバイスありがとうございます。いま、がりがりやっています。
そのうち何かできるかもしれません。
なにせ、時間は売るほど有りますから。
では。


[▼次のスレッド]
INCM/CMT
Cyclamen v3.82