喫茶XRAYトップページ

[▲前のスレッド]

[8573] 印刷プレビュー制御コンポーネントにて返信 削除
2015/3/12 (木) 11:10:55 Sara
マスターこんにちは。

現在マスター作の印刷プレビュー制御コンポーネントをありがたく利用させていただいている
ところですが、ProcNameを使って印刷をするとメモリリークするようです。

まぁ、私の使い方が間違っている可能性もあるわけですが・・・(^^;

印刷ボタン押下時の処理


   plPrev1.FormWindowState := fwMaximized;
    plPrev1.plSetPrinter.Orientation := poLandscape;
    plprev1.plSetPrinter.PaperNumber := DMPAPER_A4;
    plPrev1.BtnOptions := plPrev1.BtnOptions + [boPrinterSetBtn];
    plPrev1.ProcName := PrintProc;
    plPrev1.ShowModal;
    plPrev1.plSetPrinter.SaveToFile(PrtInfoName);


procedure PrintProc;
begin
   plPrev1.BeginDoc;
   try

     実際の印刷処理

   finally
      plPrev1.EndDoc;
   end;
end;


こんな感じで使っています。

ちなみに、BeginDocとEndDocを呼ばなければ、メモリリークしません。
改ページも正常におかなわれませんが・・・(^^;

ProcNameを使わずに直接PrintProcを呼ぶと正常に動作します。
プリンター設定ボタンが出てきませんが・・・(^^;


一応、ご報告まで・・・



[8574] Re:印刷プレビュー制御コンポーネントにて返信 削除
2015/3/12 (木) 15:57:01 Mr.XRAY
▼ Saraさん

> ところですが、ProcNameを使って印刷をするとメモリリークするようです。

ありゃ,う〜む.もう時効ですね.
ハハハッ.後でチェックしておきま〜すです.


[8575] Re2:印刷プレビュー制御コンポーネントにて返信 削除
2015/3/12 (木) 18:17:35 たてぐや
▼ Mr.XRAYさん
▼ Saraさん

> > ところですが、ProcNameを使って印刷をするとメモリリークするようです。

 plPrevにはずいぶんお世話になりました。表立ってメモリリークが発生した
という経験はありません。気付かなかっただけでしょうか? ^^;


[8576] Re3:印刷プレビュー制御コンポーネントにて返信 削除
2015/3/13 (金) 08:11:40 Syake
plPrevありがたや<m(__)m>

ProcNameを利用して特にメモリーリークした経験はありません。
最も、ProcName自体はあまり使ってませんが。

大量の印刷データのプレビューでエラーを吐くことが有りますが、
特定のプログラムだけなので、どこかに私目のプログラムミスが
有るのでしょうが見直すのも面倒なので放置しています。
(自慢する事ではないですが・・・)


[8577] Re4:印刷プレビュー制御コンポーネントにて返信 削除
2015/3/13 (金) 09:40:13 Sara
▼ Mr.XRAYさん
▼ たてぐやさん
▼ Syakeさん


> ProcNameを利用して特にメモリーリークした経験はありません。
> 最も、ProcName自体はあまり使ってませんが。
>
> 大量の印刷データのプレビューでエラーを吐くことが有りますが、
> 特定のプログラムだけなので、どこかに私目のプログラムミスが
> 有るのでしょうが見直すのも面倒なので放置しています。
> (自慢する事ではないですが・・・)


plPrev付属のTEST内の04_PageCountの内容をProcNameを使うように変更して
実行しても、やはりメモリーリークが起きますので、私の勘違いではない。
と 思いたい・・・(^^;

まぁプリンター設定のボタンを表示しなくても良いのであれば、ProcNameを
使う必要もないのでしょうけど・・・ちょっと使いたかったもので。

ReportMemoryLeaksOnShutdown := True;を指定してあるプロジェクトで
plPrevを使うまでは、全然気が付きませんでした。




[8580] Re5:印刷プレビュー制御コンポーネントにて返信 削除
2015/3/13 (金) 17:56:53 Mr.XRAY
> ReportMemoryLeaksOnShutdown := True;を指定してあるプロジェクトで
> plPrevを使うまでは、全然気が付きませんでした。


なるほど,ちょっくら待ってね (^^;


[8581] Re:印刷プレビュー制御コンポーネントにて返信 削除
2015/3/13 (金) 18:00:32 おかぽん
▼ Saraさん

マスターではありませんが・・・

procedure TCustomplPrev.BeginDoc;

  FPrintFromPage := 1;             //印刷開始頁も1
  //以下の一行追加
  if (FCanvas <> nil) and (FCanvas is TMetafileCanvas) then FCanvas.Free;
  CreateMetaCanvas(True);          //メタキャンバスの作成
  ScaleInitialize(FCanvas, False); //キャンバスのスケーリング

とりあえず、これでメモリーリークなくなります。

ProcName を使ったときと使わないときの ShowModalのタイミングでしょうかね。

[8582] Re2:印刷プレビュー制御コンポーネントにて返信 削除
2015/3/13 (金) 19:54:19 Mr.XRAY
▼ おかぽんさん,ありがとうございます.

> ProcName を使ったときと使わないときの ShowModalのタイミングでしょうかね。


いや,これは完全にバグですね.
解放忘れですからね.
おかぽんさんって,やさしいんですね (涙)

コンポの修正は,ちょっと考えがあって,後日にします.
プリンタ設定コンポの指摘もありましたので,とりあえず,
ヒント・バグの方への記事としておきます.


[8584] Re3:印刷プレビュー制御コンポーネントにて返信 削除
2015/3/13 (金) 23:00:39 Sara
▼ Mr.XRAYさん
▼ おかぽんさん
 
> > ProcName を使ったときと使わないときの ShowModalのタイミングでしょうかね。
>
>
> いや,これは完全にバグですね.
> 解放忘れですからね.
> おかぽんさんって,やさしいんですね (涙)
>
> コンポの修正は,ちょっと考えがあって,後日にします.
> プリンタ設定コンポの指摘もありましたので,とりあえず,
> ヒント・バグの方への記事としておきます.


了解しました〜ありがとうございます。(^^)


[8585] Re2:印刷プレビュー制御コンポーネントにて返信 削除
2015/3/14 (土) 08:28:20 たてぐや
▼ おかぽんさん

> とりあえず、これでメモリーリークなくなります。

 なるほど、今まで私が作ってきたプログラムでも出ていた可能性があるんで
すね。表面化しなかっただけのことか。むむむ。


[8586] Re3:印刷プレビュー制御コンポーネントにて返信 削除
2015/3/14 (土) 21:58:39 おかぽん
▼ たてぐやさん
>  なるほど、今まで私が作ってきたプログラムでも出ていた可能性があるんで
> すね。表面化しなかっただけのことか。むむむ。


Saraさんではありませんが、plPrev付属のTEST内の04_PageCountでテストした
だけで、とりあえず、メモリーリークの解消を優先したので、十分な動作確認は
お願いしたいです。

ちなみに、ProcNameを使ってplPrev1.ShowModal すると、プレビューフォームが
表示される時点で、メタファイルキャンバスを作成しているようです。
これが開放忘れになっているだけのようなので、ProcNameを使用しない場合は、
発生しないのではないのでしょうか。

ProcName を使用しない場合、plPrev 側で ShowModal しますが、その時点では、
印刷データとしてのメタファイルキャンバスが存在している状態のため、
追加でメタファイルキャンバスを作成しない。

・・・と思われますので、ProcName を使用しなければ、大丈夫だと思います。
このへんが、「ShowModalのタイミングでしょうかね」とコメントした理由です。

一応、追記ということで。

[8587] Re4:印刷プレビュー制御コンポーネントにて返信 削除
2015/3/15 (日) 15:29:59 たてぐや
▼ おかぽんさん

> ・・・と思われますので、ProcName を使用しなければ、大丈夫だと思います。
> このへんが、「ShowModalのタイミングでしょうかね」とコメントした理由です。


 当該プログラムはすでに退社した会社に置いてきています。在社中に不具合
が出ていなかったので、大丈夫なんでしょう。詳しい情報ありがとうございま
す。

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