私にとって印刷はトラウマです。さっぱり理解できないです。
テキストファイルの印刷に躓いています。
マスターの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にしている場合も
長い行も折り返して印刷するにはどのようにしたらいいでしょうか。
ご指導のほどお願いいたします。
|