PrinterでFloodFillを使うには

解決


Taku  2001-12-20 08:53:35  No: 381

フォームのCanvasに描いた操作を
プリンターのCanvasに同様のコードで出力しているのですが
FloodFillだけ上手くいきません

     with printer do
     begin
       BeginDoc;
       canvas.pen.mode:=pmCopy;
       canvas.Pen.Style:=psSolid;
       canvas.Pen.Width:=10;
       canvas.Pen.Color:=clRed;
       canvas.Brush.Color:=canvas.Pen.Color;
       canvas.MoveTo(10,10);
       canvas.LineTo(1000,10);
       canvas.LineTo(1000,1000);
       canvas.LineTo(10,1000);
       canvas.LineTo(10,10);
       canvas.FloodFill(500,500,canvas.Pen.Color,fsBorder);  
       EndDoc;
    end;

with printer do  を  with Form1  do
にした場合は、線で囲まれた部分を塗りつぶしますが
印刷では塗りつぶしが出来ません
どこが悪いのでしょうか?


にしの  2001-12-20 09:14:19  No: 382

TCanvasのFloodFill関数は、内部でWin32APIのExtFloodFill関数を呼んでいます。
この関数は、メモリデバイスコンテキストと、ラスタオペレーションをサポートするデバイスだけに使えるらしいです。
Win32APIのGetDeviceCaps関数で、RASTERCAPSを指定したときの戻り値にRC_FLOODFILLが含まれていれば使えると思います。

一度TCanvasオブジェクトに書いて、それをPrinterオブジェクトのCanvasにコピーすれば回避できると思います。
このときも、StretchBltを使用する場合は、やはりGetDeviceCapsのRASTERCAPSにRC_STRETCHBLTが含まれていないとコピーできません。


Taku  2001-12-20 18:20:57  No: 383

有り難うございました
単純に、printer.Canvas.Polygon()で印刷できました


※返信する前に利用規約をご確認ください。








  このエントリーをはてなブックマークに追加