Je dessine des zones remplies avec des trous optionnels dans Delphi en utilisant les appels Win API (polygone). Les trous (ne pas les remplir avec la couleur bg) coupés par les régions d'écrêtage. Cela fonctionne bien jusqu'à ce que j'appelle un aperçu d'impression (et l'aperçu d'impression semble bien jusqu'à ce que la page visualisée ne contienne pas la (les) zone (s) remplie (s) avec le (s) trou (s)). Le contenu de la page dans l'aperçu avant impression tiré par le même appel de méthode de la zone remplie, juste avant d'appeler une mise à l'échelle de la taille du papier et la région de détourage sur le dc. La méthode de dessin d'objets surfaciques remplis ne combine pas sa propre opération de découpe avec le découpage de page. Comment faire une opération ET entre le clip de coupe de page et les autres (les trous de découpe doivent être OU liés les uns aux autres).Comment faire fonctionner ET entre une principale et d'autres régions de découpage?
La méthode de dessin d'objet FilledArea (seulement les lignes spécifiques de découpage):
...
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;
Le code de dessin zone de découpage aperçu avant impression:
// 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;
Un écran temps de conception tiré d'une zone remplie de deux trous:
Un écran d'aperçu avant impression du même design (les lignes de contour décalées sont sign La zone de coupe de la page est ignorée, le contenu est dessiné deux fois en raison des deux pages)
Ceci est incompréhensible. –
@SertacAkyuz Qu'est-ce que vous ne comprenez pas? –
Qu'est-ce que vous faites. Un graphique de démonstration pourrait être bien. Ensuite, vous pourriez encore avoir besoin d'un [MCVE]. –