Hi<p>Ich hab mit Delphi 7 Personal ein Zeichenprogramm programmiert. Ich möchte jetzt die Funktion einbauen, dass man die fertige Zeichnung auch drucken kann. Ich mache das über die Printers-Unit mit BeginDoc(), dann wird die Zeichnung mit Draw() auf TPrinter.Canvas gezeichnet und dann EndDoc(). Leider habe ich das Problem, dass die Zeichnung am Drucker dann viel kleiner als auf dem Bildschirm erscheint, da er mit einer höheren Auflösung arbeitet. Wie kann ich das so hinkriegen, dass das Bild auf dem Papier die gleiche Größe hat wie auf dem Bildschirm? Ich habe mir mal überlegt, dass ich die Auflösungseinstellungen des Druckers abfragen könnte, dann noch die Auflösungseinstellungen des Bildschirms und dass dann irgendwie verrechnen...aber woher weiß ich dann wie groß 1 Pixel auf dem Bildschirm ist? Man kann ja die gleiche Auflösung auf verschieden großen Bildschirmen laufen lassen und damit ist ein Pixel dann entsprechend kleiner oder größer - bei der gleichen Auflösung. Somit kann ich das ja nicht mit der Druckerauflösung verrechnen.<br>Hat jemand eine bessere Idee oder weiß jemand, wie ich es trotz verschiedener Pixelgrößen verrechnen kann?<p>danke schonmal für eure Hilfe,<br>Sebastian Meßmer
Announcement
Collapse
No announcement yet.
reale größe beim Drucken beibehalten (Delphi7)
Collapse
X
-
Du kannst abfragen (hast Du das schon gefunden), wieviele DPI der Drucker hat. Somit kannst Du ausrechnen, wieviele Pixel ein cm bzw. umgekehrt sind. Du druckst also primär echte Längeneinheiten und nicht Pixel! Die echten Längeneinheiten kannst Du wieder mit der DPI-Zahl des Bildschirms in dessen Pixel umrechnen.<p>
Je nachdem was Du drucken willst, nimmt Dir ein Report genau diese Arbeit ab.<p>
MariSchöne Grüße, Mario
-
Die DPI des Druckers kann ich ja über TPrinter.PageHeight und TPrinter.PageWidth ermitteln. Die Monitorgröße über TScreen.Height und TScreen.Width.<br>Aber das hilft mir leider nichts, da bei einem 17''-Monitor mit 1280x1024 Pixeln ein einzelner Pixel leider eine andere Größe hat als bei einem 19''-Monitor mit 1280x1024 - es ist ja die gleiche Pixelzahl aber auf eine verschieden große Fläche verteilt<p>Report? Sry noch nie gehört...wo krieg ich sowas her? Am Besten gleich mit Hilfedatei...<p>danke, Sebastian Meßme
Comment
-
Noch mal: Die Ausgabe auf einem Monitor ist cm mäßig nicht verbindlich!<p>
Reports: Bei Delphi 7 sind der Quick-Report (muss nachinstalliert werden) und Rave-Reports dabei (http://www.nevrona.com/Default.aspx?tabid=164).<p>
Die Einarbeitung in einen Report ist nicht ganz einfach, aber letztendlich kommt man bei Programmen, die dem Endanwender eine Druckausgabe mit Preview und evtl. Export liefern sollen, nicht herum.<p>
MariSchöne Grüße, Mario
Comment
-
hm...TXPrint aus der Toolbox klingt laut Beschreibung nicht schlecht...kostet aber leider 10€ <p>Da ich leider nur die Personal Edition von Delphi7 hab, ist Rave Reports nicht dabei - und dann kostet das auch was...<p>Vom QuickReport hab ich die Standard-Version mal runtergeladen, aber da heißt es wenn ich das Package installieren will "Die Anwendung konnte nicht gestartet werden, weil dbrtl70.bpl nicht gefunden wurde." ... Was mache ich da falsch
Comment
-
DBRtl70 ist für Datenbankunterstützung zuständig. Das ist in der Personal Edition ebenfalls nicht dabei. Da Reports standardmäßig für Datenbanken entwickelt wurden, sieht es für Dich wohl sehr schlecht aus (habe am Anfang überlesen, dass es um Personal geht, sorry).<p>
Es bleibt nur der Weg zu Fuß...<p>
MariSchöne Grüße, Mario
Comment
-
Hallo Sebastian,
das ist etwas umfangreicher.<br>
Dem Drucker z.B. über SetMapMode(printer.canvas.handle, HM_LOMETRIC) die gewünschte Auflösung mitteilen.<br>
über getDeviceCaps(handle, Horsize) kann dann die Blattbreite in der zuvor gewählten Einheit ermittelt werden.<br>
Wenn man das gleiche schon auf dem Bildschirm macht und die Koordinaten intern in einem eigenen Koordinatensystem speichert, kann man die Ausgaben sehr einfach skalieren.<br>
Dann bei der Ausgabe auf den Bildschirm als auch auf den Drucker die Werte umrechnen.
Falls Du mehr Informationen haben möchtest, gib mir bitte dein eMail-Adresse. Ich suche dann ein Paar Routinen raus.
Gruß<br>
Hors
Comment
-
Hi<p>Das klingt sehr umfangreich...aber auch interessant...ich werde mich auf jeden Fall in diese Funktionen mal einarbeiten (sind mir leider beide neu). Über Code-Beispiele würde ich mich freuen. Schick sie bitte an [email protected].<p>Danke!!!!!<p>cu, Sebastia
Comment
Comment