Announcement

Collapse
No announcement yet.

reale größe beim Drucken beibehalten (Delphi7)

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • reale größe beim Drucken beibehalten (Delphi7)

    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

  • #2
    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>
    Mari
    Schöne Grüße, Mario

    Comment


    • #3
      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


      • #4
        Mit der Komponente TXPrint aus der Zeitschrift Toolbox (http://www.toolbox-mag.de/ bzw. http://reweb.fh-weingarten.de/toolbox/) kann geräteunabhängig gedruckt werden

        Comment


        • #5
          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>
          Mari
          Schöne Grüße, Mario

          Comment


          • #6
            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


            • #7
              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>
              Mari
              Schöne Grüße, Mario

              Comment


              • #8
                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


                • #9
                  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


                  • #10
                    Du könntest es auch noch mal mit Freereport ausprobieren, den Du dir z.B unter http://www.delphipages.com/result.cfm?TD=20 runterladen kannst. Ob er allerdings mit der Personal Version funktioniert kann ich Dir nicht sage

                    Comment


                    • #11
                      Danke - ich werd mir das mal ansehen...ein bisschen stört mich, dass das nur für non commercial use freigegeben ist...ich habe zwar nicht vor, mein Programm zu verkaufen, lasse mir diese Möglichkeit aber gerne offen, sollte sich etwas ergeben

                      Comment


                      • #12
                        Wo hast Du denn gelesen, dass Freereport nur für non commercial use freigegeben ist ? Aus den Lizensbestimmungen geht das nicht hervor ? Oder habe ich was übersehe

                        Comment


                        • #13
                          Oh - hast recht...ich hatte nicht so viel Zeit und habe die Seite nur überflogen...bin davon ausgegangen, dass nur eine Komponente auf der Seite angeboten wird, und bei der obersten Komponente steht das nur für non commercial use eben dabei...aber bei FreeReport nicht - stimmt.<br>Danke

                          Comment

                          Working...
                          X