ご無沙汰でございます。
当地でもめっきり寒くなりました。
あれほど暑かった夏が・・・。
ところで、印刷プレビューしてMicrosoft Print to PDFを選択後に「OK」
ファイル保存で「キャンセル」で「プリンタは現在印刷を行っておりません」
の例外を速攻で吐くという現象があります。
私の問題は「23/3/22:plPrevで印刷ができなくなる」とは少々異なります。
実際のところ、例外が発生する事は数年前にはわかってはいたのですが
おざなりにしておりました。
procedure TCustomplPrev.Print;
{---- 略 ------}
Printer.BeginDoc;//←ここで保存ダイアログが開く
{保存ダイアログをキャンセル後も以降は継続される}
FPrinting := True;
Screen.Cursor := FCursor;
try
for i := FromPage to ToPage do
begin
ScaleInitialize(Printer.Canvas,False);//例外発生
{---- 略 ------}
end;
finally
SetMapMode(Printer.Canvas.Handle, MM_TEXT);
Printer.EndDoc;
Application.ProcessMessages;
FPrinting := False;
Screen.Cursor := SaveCursor;
end;
{----- 略 ---------}
end;
で、保存ダイアログをキャンセルするとPrinter.PrintingはFalseの
ままなので、処理が継続されると例外が発生しますので以下の様に
記述を追加してみました。
procedure TCustomplPrev.Print;
{---- 略 ------}
Printer.BeginDoc;
if Printer.Printing then //←条件追加
begin
FPrinting := True;
Screen.Cursor := FCursor;
try
for i := FromPage to ToPage do
begin
ScaleInitialize(Printer.Canvas,False);//Printerが印刷中でない為ここで例外
{---- 略 ------}
end;
finally
SetMapMode(Printer.Canvas.Handle, MM_TEXT);
Printer.EndDoc;
Application.ProcessMessages;
FPrinting := False;
Screen.Cursor := SaveCursor;
end;
end;
{----- 略 ---------}
end;
一応、問題なく働いてくれてますがこんなもので、良いのでしょうか(^-^;
|