AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Tutorials Delphi Drucken
Tutorial durchsuchen
Ansicht
Themen-Optionen

Drucken

Ein Tutorial von Dipl Phys Ernst Winter · begonnen am 21. Mai 2009 · letzter Beitrag vom 24. Nov 2019
Antwort Antwort
samso

Registriert seit: 29. Mär 2009
439 Beiträge
 
#1

AW: Re: Drucken

  Alt 24. Nov 2019, 10:57
Delphi-Quellcode:
  Result.Right := trunc((PhysicalPage.X-Offset.X-PrintablePage.X)*XResolution+0.5);
  Result.Bottom := trunc((PhysicalPage.Y-Offset.Y-PrintablePage.Y)*YResolution+0.5);
Beim Microsoft PDF Printer kommt bei mir 2x Null raus.

Ja, das kann sein. Hier wird nicht die Seitengröße berechnet, sondern die Breite der Seitenränder (also der Bereich des Blattes der nicht bedruckt werden kann). D.h. Result.Right=0 heißt, dass der rechte Seitenrand eine Breite von 0 hat. Entsprechend hat bei Result.Bottom=0 der untere Seitenrand eine Höhe von 0. Das ist bei einem PDF-Drucker eigentlich auch zu erwarten. Die Seitengrößen stehen in PrintablePage und PhysicalPage. Der Quelltext soll lediglich zeigen, wie man verschiedene Kennwerte eines Druckerdokuments ermittelt. Vielleicht wäre es schlauer gewesen an dieser Stelle nicht TRect zu vergewaltigen, sondern statt dessen ein eigenes Record zu erfinden. Also so:

Delphi-Quellcode:
type
  TMarginSizes = record
    Left, Top, Right, Bottom: Integer;
  end;

function GetDefaultMinMargins: TMarginSizes;
var
  XResolution, YResolution: Extended;
  PhysicalPage: TSize;
  PrintablePage: TSize;
  Offset: TPoint;
begin
  XResolution := 1/GetDeviceCaps(Printer.Handle, LOGPIXELSX)*1000;
  YResolution := 1/GetDeviceCaps(Printer.Handle, LOGPIXELSY)*1000;
  PhysicalPage.cx := GetDeviceCaps(Printer.Handle, PHYSICALWIDTH);
  PhysicalPage.cy := GetDeviceCaps(Printer.Handle, PHYSICALHEIGHT);
  PrintablePage.cx := GetDeviceCaps(Printer.Handle, HORZRES);
  PrintablePage.cy := GetDeviceCaps(Printer.Handle, VERTRES);
  Offset.X := GetDeviceCaps(Printer.Handle, PHYSICALOFFSETX);
  Offset.Y := GetDeviceCaps(Printer.Handle, PHYSICALOFFSETY);
  Result.Left := trunc(Offset.X*XResolution+0.5);
  Result.Top := trunc(Offset.Y*YResolution+0.5);
  Result.Right := trunc((PhysicalPage.cx-Offset.X-PrintablePage.cx)*XResolution+0.5);
  Result.Bottom := trunc((PhysicalPage.cy-Offset.Y-PrintablePage.cy)*YResolution+0.5);
end;

Geändert von samso (24. Nov 2019 um 12:53 Uhr)
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 04:39 Uhr.
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz