喫茶XRAYトップページ

[スレッド全体
]

[13681] plPrevで例外が・・・返信 削除
2023/11/27 (月) 14:17:18 Syake
ご無沙汰でございます。
当地でもめっきり寒くなりました。
あれほど暑かった夏が・・・。

ところで、印刷プレビューして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;

一応、問題なく働いてくれてますがこんなもので、良いのでしょうか(^-^;


[13682] plPrevで例外が・・・返信 削除
2023/11/27 (月) 14:21:36 Syake
おっと、消し忘れ・・・


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);
      {---- 略 ------}
      end;
    finally
      SetMapMode(Printer.Canvas.Handle, MM_TEXT);
      Printer.EndDoc;
      Application.ProcessMessages;
      FPrinting := False;
      Screen.Cursor := SaveCursor;
    end;
  end;
 {----- 略 ---------}
end;

相変わらず、おっちょこちょいで未だに・・・"(-""-)"


[13694] Re:plPrevで例外が・・・返信 削除
2024/1/30 (火) 16:45:32 おかぽん
こんにちは
(2023年とか見える気がするけど気にしない)

解決案じゃなく、plPrev ですらなく、QuickReport ですが、
PDFの作成キャンセル対策に

1)Printer.Printers[PrinterIndex]に'PDF'の文字があるとき
2)Printer.BeginDoc; 後にプリンタのジョブ数を確認
3)ジョブ数が0だとキャンセル扱いで Printer.EndDoc;

と、させてました。
(ソース有るので改造したやつです。10年以上前に作ったやつでした)

PDFなんて、ローカルのプリンタなので、複数のPDF作成を
同時に行わないであろうという判断でしょうね。

Syakeさんの投稿の通り、Printer.Printing で判断できるなら、
そっちのほうが簡単ですよね。

・・・という、ほぼ独り言です。


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