喫茶XRAYトップページ


[2599] テキストの印刷さえ出来ない私・・・返信 削除
2009/9/2 (水) 19:57:49 宮 〔HomePage
私にとって印刷はトラウマです。さっぱり理解できないです。
テキストファイルの印刷に躓いています。
マスターのhttp://mrxray.on.coocan.jp/Delphi/plSamples/T_MemoPrev.htm
の4番をテストしているのですが、
●長い行のはみ出した文字列が印刷できません。
マージンセットは出来るようになりました。
procedure TForm1.Button4Click(Sender: TObject);
var
    ARect : TRect;
    SL    : TStringList;
    i     : Integer;
begin
    Memo1.Clear;
    Memo1.WordWrap:=True;
    Memo1.Lines.LoadFromFile(ExtractFilePath(Application.ExeName)+'C#コンセプト.txt');
    Sleep(1000);
    //印刷範囲の設定
    ARect:=Rect(150,
                150,
                Ceil(plSetPrinter1.PaperWidth*254.0/plSetPrinter1.XResolution)-150,
                Ceil(plSetPrinter1.PaperHeight*254.0/plSetPrinter1.YResolution)-150);
    plPrev1.BeginDoc;
    SL:=TStringList.Create;
    try
      SL.Text:=Memo1.Lines.Text;
      plPrev1.FontName('MS ゴシック');
      //SLの全てを印刷するなら第2引数はPChar(SL.Text)でよい

      for i:=3 to 8 do begin
        DrawTextEx(plPrev1.Canvas.Handle,PChar(SL[i]),-1,ARect,
                   DT_LEFT,nil);
        ARect.Top:=ARect.Top+50;
      end;
      //StringListで保存した場合はWordWrapがTrueでも折返し位置には改行
      //文字は(存在しないので)保存しない
      SL.SaveToFile(ExtractFilePath(Application.ExeName)+'C#コンセプト.txt');
    finally
      FreeAndnil(SL);
      plPrev1.EndDoc;
    end;
    plPrev1.ShowModal;
end;
●一方、-----------------------------------
procedure TForm1.PrintStrings(Strings: TStrings);
var
  Prn: TextFile;
  i: word;
begin
  AssignPrn(Prn);
  try
    Rewrite(Prn);
    try
      for i := 0 to Strings.Count - 1 do
        writeln(Prn, Strings.Strings[i]);
    finally
      CloseFile(Prn);
    end;

  except
    on EInOutError do
      MessageDlg('印刷エラー', mtError, [mbOk], 0);
  end;
end;

procedure TForm1.Button5Click(Sender: TObject);
begin
     PrintStrings(Memo1.Lines);
end;
は、表示の通り折り返してある行はそのまま印刷できます。
これが、プレビューできてかつマージンセットが出来ればいいのですが。

WordrapをOnにしている場合もOFFにしている場合も
長い行も折り返して印刷するにはどのようにしたらいいでしょうか。
ご指導のほどお願いいたします。


[2600] Re:テキストの印刷さえ出来ない私・・・返信 削除
2009/9/2 (水) 21:15:17 Mr.XRAY
▼ 宮さん

> 私にとって印刷はトラウマです。さっぱり理解できないです。
> テキストファイルの印刷に躓いています。


それはお疲れ様です.ではがんばってください.
それではまた,さようなら.

では,あまりにも冷たいので,ヒントだけ.

> procedure TForm1.Button4Click(Sender: TObject);

では,

> は、表示の通り折り返してある行はそのまま印刷できます。

できません.何故ならば,Button4をクリックすると,Memo1にテキスト
ファイルから読込んで表示しなおしているからです.

つまり,現在表示されているMemo1の改行状態とは無関係に,
テキストファイルを印刷しているからです.
Memo1の表示状態で,改行を変更してから,Button4をクリックすると
Memo1の表示が,元に戻っているのが確認できます.

そういうこともテスト可能したコードであります.
バグではないのであしからず.

http://mrxray.on.coocan.jp/Delphi/plSamples/T_MemoPrev.htm
は,TMemoのWordWrapのテストも兼ねたものです.
ですから,いろいろテストしやすいように,設計段階で,Memo1に
テキストを設定しています.

どうでしょうか?
もし,どうしても,動作が理解できなかったら,またどうぞ.

[2601] Re2:テキストの印刷さえ出来ない私・・・返信 削除
2009/9/2 (水) 23:38:50 宮 〔HomePage
▼ Mr.XRAYさん
>
> http://mrxray.on.coocan.jp/Delphi/plSamples/T_MemoPrev.htm
> は,TMemoのWordWrapのテストも兼ねたものです.
> ですから,いろいろテストしやすいように,設計段階で,Memo1に
> テキストを設定しています.


はい。しこしこ気長にやってみます。
でも、印刷の解説サイトを読んでも解らないです。
それも、かなり懇切丁寧に書いてあるのに。
plSetPrinter,  plPrevも貼り付けてあるのですが
未だにどんな働きをするのか解っていません。


でもボタン1〜ボタン4までの違いがわかりません。
自分にとってどれがベストなのか???
やはり、プリント界は宇宙だっ。
そういうレベルです。

印刷の権威なのでここに質問させて頂きました。
どうも有り難うございました。(^_^;)




[2602] Re3:テキストの印刷さえ出来ない私・・・返信 削除
2009/9/3 (木) 00:30:33 Mr.XRAY
▼ 宮さん

> でもボタン1〜ボタン4までの違いがわかりません。

いろいろなテストが可能なようにしてあるだけです.
取り敢えず,Button4クリックでやっているということなので,
このコードに以下の様に //* を追加(コメントアウト)して実行してみてください.

//*を追加したら,コンパイルして実行します([F9]押下)
表示されたMemo1のテキストの改行位置をいろいろ変更してみてください
(改行を削除するとか).
また,このテストプログラムでは,フォームが小さいので,
必ず大きくしてから実行してください.
(設計時ではなく,実行して,フォームが表示されてからマウスで大きく
してください)

この変更部分 //* は,ディスクからテキストをMemo1に読み込まない
ようにしているだけです.
つまり,テストプログラムであらかじめ用意しているテキストだけを
印刷プレビューします.
これは,すなわち,Memo1に表示されているものを印刷プレビューする
ことになります.

必要に応じて,
for i:=5 to 10 do begin
の部分(5とか10)も変更してください.

procedure TForm1.Button4Click(Sender: TObject);
var
    ARect : TRect;
    SL    : TStringList;
    i     : Integer;
begin
//*    Memo1.Clear;
    Memo1.WordWrap:=True; //ここもコメントアウトするとどうなるか?
//*    Memo1.Lines.LoadFromFile('MemoLines.txt');
//*    Sleep(1000);  //この1秒は表示がかわるのをみるためなので
    //印刷範囲の設定

    //以下,略


以上の実験では,あらかじめ,私が用意したテキストを印刷プレビュー
するだけですが,自分が用意したテキストを印刷する場合は,ファイル
から読みこむとか,Memo1に直接タイプして入力するなどしてください.

この作業(上の数行の説明)をいろいろやると,
> でもボタン1〜ボタン4までの違いがわかりません。
の違いが少しは見えてくるのではないかと思います.

[2603] Re4:テキストの印刷さえ出来ない私・・・返信 削除
2009/9/3 (木) 01:50:36 Mr.XRAY
> > でもボタン1〜ボタン4までの違いがわかりません。

なお,蛇足ですが,このテストプログラムは,TMemoの改行とその表示
の問題のテストですので,用紙の印刷幅を超えた文字は印刷しません.

DrawTextExの書式指定フラグを
DT_LEFT or DT_WORDBREAK
にする等の工夫をしてください.

[2604] [2600][2602]のレス内容変ですね(笑)返信 削除
2009/9/3 (木) 10:04:54 Mr.XRAY
▼ 宮さん

今読み返してみたら,変ですね.
スミマセンでした.
[T130]のサンプルプログラムとその文章ももう一度検討してみます.

テキストファイルに格納されている改行位置と,
TMemoに表示される改行位置の関係を整理する必要があるようです.

というわけで,ちょっとまってください.

[2605] [T180_Memoのテキストを印刷プレビュー]を修正 返信 削除
2009/9/3 (木) 15:10:15 Mr.XRAY
修正してUPしました.試してみてください.
少しは簡単な説明にしたつもりです.

[2620] Re:[T180_Memoのテキストを印刷プレビュー]を修正 返信 削除
2009/9/10 (木) 12:50:24 宮 〔HomePage
▼ Mr.XRAYさん
> 修正してUPしました.試してみてください.
> 少しは簡単な説明にしたつもりです.


エディターを入れ替えるのは大変で、無我夢中でやっていました。
それで、ここにもだいぶご無沙汰していました。
本日久しぶりに、
訪問したらいろいろアドバイスを頂いていて有り難うございました。

ほとんどrtfファイルを作成する必要を感じないので、
思い切ってTRichEditを捨てました。
従いましてテキストファイル専用になりました。
まだまだ使い勝手の改良中です。
有り難うございました。
では。



INCM/CMT
Cyclamen v3.82