Win API呼び出し(ポリゴン)を使用して、Delphi内に埋め込まれた領域にオプションの穴が描画されます。穴(bgの色で塗りつぶしてはいけません)は、領域を切り取ってカットします。印刷プレビューを呼び出すまでは正常に動作します(また、プレビューされたページに穴が空いている領域がない限り、印刷プレビューは正常に表示されます)。印刷プレビューのページ内容は、DC上に設定された用紙サイズのスケーリングとクリッピング領域を呼び出す直前に、同じ方法で塗りつぶしされた領域を呼び出します。塗りつぶし領域オブジェクトの描画方法では、ページ切り出し操作による独自の切り取り操作は結合されません。どのようにして、ページ切断クリップと他の切断クリップとの間でAND演算を行うことができますか(穴を切り取るものは、互いにOR関係にある必要があります)。メインと他のクリッピング領域をAND演算する方法は?
FilledAreaオブジェクトの描画方法(単にクリッピング特定行):
...
try
if (fHoles^.getCount > 0) then
begin
// Get a copy of the page clipping rgn
getClipRgn(dc, rgnPrev);
for i := 0 to fHoles^.getCount-1 do
begin
...
// create a rgn to the Xth hole
rgn := createPolygonRgn(rgnPts^, rgnPtsCount, ALTERNATE);
if (rgn <> 0) then
begin
// combine the Xth rgn with the active rgn (OR because there could be many holes in a single filled area)
extSelectClipRgn(dc, rgn, RGN_DIFF);
// releases the Xth rgn
deleteObject(rgn);
end;
...
end;
end;
// draw the polygon
finally
if (fHoles^.getCount > 0) then
begin
// selects a copy of the page cutting rgn copy
selectClipRgn(dc, rgnPrev);
// releases the copy of the page cutting rgn
deleteObject(rgnPrev);
end;
end;
印刷プレビュークリッピング領域の描画コード:
// Creates a page clipping rgn
rcRegion := createRectRgn(rcDevLeft_, rcDevTop_, rcDevRight_ + 2, rcDevBottom_ + 2);
try
// Selects a copy of the page clipping rgn
selectClipRgn(dc_, rcRegion);
...
// draw the page contents
...
finally
// Selects an empty clipping rgn
selectClipRgn(dc_, 0);
// Releases the created page clipping rgn
deleteObject(rcRegion);
end;
2を充填した領域から設計時のスクリーンショット穴:
同じデザインからの印刷プレビュー画面(シフトされた等高線はeページ切出し領域は無視され、2ページで2回描かれます)
これは理解できません。 –
@SertacAkyuzあなたは何を理解していますか? –
何をしていますか?デモンストレーション用グラフィックはうまくいくかもしれません。そして、もう一度[MCVE]が必要になるかもしれません。 –