2017-03-17 11 views
0

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回描かれます) enter image description here

+0

これは理解できません。 –

+0

@SertacAkyuzあなたは何を理解していますか? –

+0

何をしていますか?デモンストレーション用グラフィックはうまくいくかもしれません。そして、もう一度[MCVE]が必要になるかもしれません。 –

答えて

0

OKです。見つけた。 combineRgn Win APIコールを使用して、2つの入力領域間のBoole操作を定義する必要があります。

関連する問題