Delphi-PRAXiS
Seite 1 von 3  1 23      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Drucken (https://www.delphipraxis.net/79011-drucken.html)

Christophe 14. Okt 2006 17:44


Drucken
 
Hallo zusammen,

Ich habe ein Formular erstellt und würde dieses nun gerne ausdrucken. Habe auch schon einiges gelesen aber nichts das ohne grossen aufwand geht. Ich habe es mit
Delphi-Quellcode:
Form1.print;
versucht was aber nicht zum gewünschten Resultat führte.... :wall: dan habe ich mit TPrinter rumgespielt dort muss aber alles auf das Canvas gezogen werden. :gruebel:
Nun meine Frage. Ist es möglich ohne grosses drum rum dieses formular auszudrucken (langes Formular). Will ja nicht nochmal alles von vorne machen nur weil ich nicht die ganze Form drucken kann.

Danke schon mal im voraus

grüsse Christophe

Klaus01 14. Okt 2006 17:51

Re: Drucken
 
Hast Du es damit schonmal versucht?

Delphi-Quellcode:
Form1.PaintTo(Printer.Canvas.Handle, 0, 0);
Grüße
Klaus

Christophe 14. Okt 2006 21:38

Re: Drucken
 
hmmm das macht ja das gleiche wie form1.print.... ausser das ich die grösse skalieren kann. Aber wie gesagt meine form ist grösser d.h. ein teil der Formulars sieht man nicht. Und um diesen bereich geht es. Das Formular ist schon so gestalltet wie ich den ausdruck haben will. Muss nur noch die ganze form drucken können auch den Bereich den man nicht sieht.

Klaus01 14. Okt 2006 21:59

Re: Drucken
 
Wenn die Lösung auch etwas kosten darf: -> http://www.code4sale.com/joehecht/prndib.htm

Grüße
Klaus

Der_Unwissende 14. Okt 2006 22:03

Re: Drucken
 
Zitat:

Zitat von Christophe
dan habe ich mit TPrinter rumgespielt dort muss aber alles auf das Canvas gezogen werden. :gruebel:
Nun meine Frage. Ist es möglich ohne grosses drum rum dieses formular auszudrucken (langes Formular).

Hi,
da ist wieder mal die Definition von großem Drumrum die große Frage. An sich ist dein Formular nicht mehr als ein Canvas, auf den gezeichnet wird. Dein Drucker wird unter Windows auch als GDI (Graphic Device Interface) behandelt, der Canvas von TPrinter ist halt ein GDI-Device, auf dass du zeichnen kannst. An sich hast du damit schon eine gewisse Einfachheit, da du einfach Dinge wie StretchBlt oder BitBlt mit diesem Canvas verwenden kannst. Wie Klaus dir auch schon zeigte, kannst du so also auch dein Formular kopieren.

Was die Größe angeht, so kannst du mittels StretchBlt oder StretchDraw auch einfach dein Formular auf eine bestimmte Größe stauchen. An sich solltest du es dir beim Drucken aber nicht so einfach machen. Es ist ein bekanntes Problem (vieler Programmiersprachen), dass Drucken nicht trivial ist. Was du beachten musst ist, dass du je nach Drucker unterschiedliche Ergebnisse bekommen würdest (mit dem hier gezeigten Weg). Das liegt dann an der eingestellten Auflösung. Du gibst die Größe deiner Seite letztlich in Pixel an, je nach DPI Wert des Druckers hast du also auf einen Inch unterschiedlich viele Pixel, bei hoher Auflösung würde also nur noch ein Teil der Seite bedruckt...
Deswegen solltest du die Einheit des Druckers erst auf etwas Einheitliches (z.B. millimeter oder zehntel- millimeter) umstellen. Wie man druckt und was man beachten muss verrät dir die DP-Suche

Gruß Der Unwissende

Christophe 15. Okt 2006 00:39

Re: Drucken
 
ich denke ich habe einen teil verstanden. :gruebel: der code sieht nun so aus:

Delphi-Quellcode:
Printer.BeginDoc;
  SetMapMode(Printer.Canvas.Handle, MM_ANISOTROPIC);
  SetWindowExtEx(Printer.Canvas.Handle,
                 GetDeviceCaps(Canvas.Handle, LOGPIXELSX),
                 GetDeviceCaps(Canvas.Handle, LOGPIXELSY),
              Nil);
  SetViewportExtEx(Printer.Canvas.Handle,
                   GetDeviceCaps(Printer.Canvas.Handle, LOGPIXELSX),
                   GetDeviceCaps(Printer.Canvas.Handle, LOGPIXELSY),
                Nil);
  Form1.PaintTo(Printer.Canvas.Handle, 0, 0);

Printer.EndDoc;
Das sieht nicht schlecht aus aber ich bekomme nur den letzten teil des formulars gedruckt. Aber ich denke es sollte etwa 3 seiten zum drucken geben bis der ganze inhalt drauf ist. Wie komme ich nun auf die Restlichen druckinfos? ich sollte doch irgendwo angeben können wie gross das canvas und wieviele seiten es sein sollen die geduckt werden sollen.

Jürgen Thomas 15. Okt 2006 08:42

Re: Drucken
 
Hallo Christophe,

wenn Dir Form1.Print nicht genügt (mir fehlten z.B. Menüs und manche Feldinhalte bei ComboBoxen u.ä.), dann nutze doch Delphi-Referenz durchsuchenTCustomForm.GetFormImage, speichere dieses Bitmap in einer Datei und bearbeite sie mit einem Bild-Editor, in dem Du skalieren und Ausschnitte drucken kannst.

Gruß Jürgen

Christophe 15. Okt 2006 09:34

Re: Drucken
 
Alles was auf meinem Formular liegt sind labels. Ob mir tform genügt weis ich nicht da ich nicht weis ob das ganze formular ausgedruckt werden kann. Ansich würde mir die TForm schon reichen. weis einfach nicht wie ich das ganze Formular ausdrucken kann.
Brauche dringend eine lösung am liebsten die wie oben schon beschrieben. Und das muss gehen da ich schon einen ausdruck vom oberen und vom unteren teil drucken konnte nur nicht alles miteinander.

danke!!

Christophe 16. Okt 2006 11:25

Re: Drucken
 
Habe leider keine Antwort erhalten. Aus den Antworten entnehmen ich das eine Form auch ein Canvas ist. Dan sollte es doch möglich sein diese ganze Form auszudrucken. Oder gibt es eine möglichkeit alle labels mit deren eigenschaften pos, grösse usw. in das Printer.canvas reinzuziehen?
Komme wirklich nicht mehr weiter und brauche diesen ausdruck.....HILFE

Jürgen Thomas 16. Okt 2006 11:49

Re: Drucken
 
Hallo Christophe,

aus Deinen beiden letzten Beiträgen kann ich nicht ersehen, dass bzw. warum Du mit den anderen Vorschlägen und meinen Gedanken nicht weiterkommst:
Zitat:

Zitat von Jürgen Thomas
wenn Dir Form1.Print nicht genügt (mir fehlten z.B. Menüs und manche Feldinhalte bei ComboBoxen u.ä.), dann nutze doch Delphi-Referenz durchsuchenTCustomForm.GetFormImage, speichere dieses Bitmap in einer Datei und bearbeite sie mit einem Bild-Editor, in dem Du skalieren und Ausschnitte drucken kannst.

Es ist mir noch nicht einmal klar, ob Du das Formular zur Laufzeit oder im Entwurf ausdrucken willst. Delphi bietet in der IDE auch den Menü-Punkt Datei|Drucken und stellt Dir dort Möglichkeiten zur Skalierung zur Verfügung. Jürgen


Alle Zeitangaben in WEZ +1. Es ist jetzt 15:03 Uhr.
Seite 1 von 3  1 23      

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