喫茶XRAYトップページ


[1025] いまだエディタが完成せず。返信 削除
2006/11/23 (木) 20:46:32
マスター、皆様こんばんは。
一つご指導頂きたいのですが。ローレベルなことですみません。
あれから、取り合えすRichEditをPageControlに動的に貼り付けて
印刷部分は例のサンプルコードを利用させて頂き苦労してルーラーも完成し
エディタが一応は完成して天にも昇る気持ちでうはうはでしたがRichEditを貼り付ける件に対して
決定的な欠陥を発見して断念しました。その後Memoやその他のエディタコンポーネントを
貼り付けて試しても同じエラーは起きないためMemoタイプのエディタに乗り換えました。
Memo、AFEdit、SonEditで再制作しています。
となると、やはり印刷周りが貧弱でplPrevのプレビューがかっこいいのでどうしても
取り入れたいので苦労しています。データはTstringlist 渡しでもFile渡しでも
いいですが
plPrevのデモ03TextFileではTextOutFileを使っていてサンプルのMemo例を見てみると
DrawTextExが使われています。

質問1:どちらを使うべきなのか解りません。
質問2:プレビューのページ数は正しく表示しているのですがテキストが一ページを
表示したままです。
デモ03TextFileと0404_PageCountを参考にしました。
よろしくお願いします。m(_ _)m
・・・
begin
     with plPrev1 do
     begin
       BeginDoc;
       try
         FontSize(10.5);
         FontName('MS P明朝');
         RowH:=60;
       while True do
       begin
         LastY:=TextOutFile(TopMargin,LeftMargin,
                            PaperWidth-RightMargin,RowH,'MemoData.txt');
         if plPrev1.PageNumber>plPrev1.PageCount then break;
          plPrev1.NewPage;
       end;
       finally
         plPrev1.EndDoc;
       end;
       ShowModal;
     end;
end;
procedure TformMDI.plPrev1BeforeView(Sender: TObject; Page: Integer);
・・・

[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