Einzelnen Beitrag anzeigen

Benutzerbild von bernau
bernau

Registriert seit: 1. Dez 2004
Ort: Köln
1.268 Beiträge
 
Delphi 11 Alexandria
 
#4

AW: Microsoft Print to PDF -> rectangle -> border fehlerhaft

  Alt 11. Aug 2023, 12:03
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.
Miniaturansicht angehängter Grafiken
bild_2023-08-11_125604215.png  
Angehängte Dateien
Dateityp: pdf testmspdf6.pdf (78,0 KB, 4x aufgerufen)
Gerd
Kölner Delphi Usergroup: http://wiki.delphitreff.de

Geändert von bernau (11. Aug 2023 um 12:08 Uhr)
  Mit Zitat antworten Zitat