Ich will euch mal an meinen weiteren Versuchen teilhaben lassen.
Rectangle und Fillrect haben in der resultierenden PDF unterschiedliche Abmaße.
Auf dem Bildschirm hat das gelbe Rechteck (mit Fillrect gezeichnet) genau die gleiche Breite wie das Rechteck, welches mit Rectangle gezeichnet wurde.
In der PDF sieht man bei den Rechtecken, die mit einer ungraden Penbreite gezeichnet werden, einen leichten Versatz. Pen 0 und 1 ist sowiso nicht zu gebrauchen. aber bei Pen 3,5,7,9 sieht man (wenn man vergrößert) diesen unschönen schwarzen strich.
Also: Die Kombination aus rectangle und fillrect auf dem Bildschirm ist OK. Diese Kombination sollte aber nicht in einer PDF und für eine Druckvorstufe verwendet werden. Da kann es dann unschöne Überraschungen geben.
Delphi-Quellcode:
var
lRect_Base: TRect;
lRect_FillRect:TRect;
begin
aCanvas.Pen.Color := clBlack;
aCanvas.Pen.Mode := pmCopy;
aCanvas.font.Height := 20;
lRect_Base.Create(0, 0, 40, 80);
lRect_Base.Offset(50, 100);
for var a := 0 to 9 do
begin
lRect_Base.Offset(50, 0);
// Titel schreiben
aCanvas.Brush.Style := bsClear;
aCanvas.TextOut(lRect_Base.Left,lRect_Base.Top-30,'Pen='+a.ToString);
//rectangle mit schwarzem Rahmen - grün
aCanvas.Brush.Style := bsSolid;
aCanvas.Brush.Color := clGreen;
aCanvas.Pen.Width := a;
aCanvas.Rectangle(lRect_Base);
//Fillrect mit gleicher Breite und Höhe - Rot
lRect_FillRect := lRect_Base;
lRect_FillRect.Offset(0, 30);
aCanvas.Brush.Color := clRed;
aCanvas.fillrect(lRect_FillRect);
//Fillrect mit angepasster Breite und Höhe um die Pen.width vom Rectangle auszugleichen - Gelb
lRect_FillRect.Offset(0, 30);
lRect_FillRect.left := lRect_FillRect.left - a div 2;
lRect_FillRect.width := lRect_FillRect.Width + ((a-1) div 2);
aCanvas.Brush.Color := clyellow;
aCanvas.fillrect(lRect_FillRect);
end;
end;
Die PNG ist ein Screenshot vom Programm.