Delphi-PRAXiS

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

Christophe 16. Okt 2006 13:51

Re: Drucken
 
Hallo Jürgen

Danke für deinen vorschlag. Ich programmiere zwar schon lange aber erst seit kurzem auch in Delphi, vielleicht fehlt mir deshalb das grundwissen für den druck.
Nun das Programm das ich geschrieben habe ist eine Umfrage. Wenn der Benutzer die Fragen Beatwortet hat kommt er zu einer übersicht (formstatistik) und kann sich wenn er will diese Form ausdrucken (das formular wird zur laufzeit erstellt).

Der Benutzer will nicht zuerst diese form skallieren und dann ausdrucken. Deshalb suche ich eine lösung die es erlaubt direkt zu drucken. Und da ich schon die ganze form gestalltet habe möchte ich nicht unbedingt alles nochmal gestallten damit der drucker weis wie ich es will. Und das ganze ist doch schon in dieser Form vorhanden, wird ja auch geduckt (einfach nicht alles... ). Es muss doch eine lösung geben die mir einfach diese gesammte form ausdruckt.

Gruss Christophe

Klaus01 16. Okt 2006 14:09

Re: Drucken
 
Hast Du denn mal TExcellentPrinter angetestet, gibt es auch als TrialVersion -> http://www.code4sale.com/joehecht/prnform.htm

Grüße
Klaus

Knotti 16. Okt 2006 14:37

Re: Drucken
 
Ich hab auch soetwas gemacht wie du das Formular ausgedruckt und dabei so gestreckt das es das A4 Format ausfüllt bei gleichbleibenden Seitenverhältnissen...

Musst aber warten bis ich daheim bin dann kann ich den Code posten...

Christophe 16. Okt 2006 14:45

Re: Drucken
 
Zitat:

Zitat von Knotti
Ich hab auch soetwas gemacht wie du das Formular ausgedruckt und dabei so gestreckt das es das A4 Format ausfüllt bei gleichbleibenden Seitenverhältnissen...

Kann man den druck dann auch über mehrere Seiten machen?

Knotti 16. Okt 2006 15:08

Re: Drucken
 
Ka. ich hab für das bischen Code selber ne halbe ewigkeit gebraucht aber Poster kan man damidt nicht drucken denk ich...
Ich weis auch garnicht ob das das ist was ihr sucht... Sorry wenn es das falsche ist...

Delphi-Quellcode:
 begin
  printer.Orientation:=poLandscape; //Querformat
  Form2.PrintScale:=poPrintToFit; //Form auf Querformat vergrößern (zoomen)
  if printersetupdialog1.Execute then
   begin
    Form2.print; //drucken
   end
 end

Christophe 17. Okt 2006 08:01

Re: Drucken
 
Nun anscheinend gibt es in Delphi keine lösung um dieses Problem zu lösen ausser das ich das ganze nochmal schreiben muss. Schade bin so gut vorangekommen und nun verschlingt dieser druck meine ganze zeit.*grrr*

Gibt es eine möglichkeit das ganze in ein textfile zu schreiben damit ich das Textfile drucken kann?

Und wenn ich schon dran bin ....

Zitat:

Zitat von Der_Unwissende
...An sich ist dein Formular nicht mehr als ein Canvas, auf den gezeichnet wird....
Gruß Der Unwissende

dann sollte ich das canvas doch drucken können. ich weis ich habe schon viele fragen gestellt aber ich verstehe die logik hinter diesem form1.print nicht wirklich.

ich versuche den lösungsansatz von jürgen mal. aber ob dies auch auf meherere seiten verteilt funktioniert bin ich gespannt. Auf jede fall danke ich allen die mir versucht haben zu helfen.

Gruss christophe

marabu 17. Okt 2006 08:24

Re: Drucken
 
Hallo,

es gibt viel zu viele Gründe, warum das Drucken einer Form letztendlich unbefriedigend bleiben muss. Und trotzdem hat sich jemand die Mühe gemacht: klick

Grüße vom marabu

Klaus01 17. Okt 2006 08:30

Re: Drucken
 
Zitat:

Zitat von marabu
Hallo,

es gibt viel zu viele Gründe, warum das Drucken einer Form letztendlich unbefriedigend bleiben muss. Und trotzdem hat sich jemand die Mühe gemacht: klick

Grüße vom marabu

Na, vielleicht hilft es, wenn Du ihm das vorschlägst?

Grüße
Klaus

marabu 17. Okt 2006 08:42

Re: Drucken
 
Hallo Klaus,

jetzt habe ich eine Weile grübeln müssen. Dann habe ich den ganzen thread gelesen und jetzt weiß ich auch was du meinst.

Freundliche Grüße

Christophe 17. Okt 2006 08:44

Re: Drucken
 
ja das hat man mir schon ein paar mal geschrieben. :-D aber wieso 199$ bezahlen? nur damit ich eine form drucken kann. Ich mache es mir einfach und verteile meine ausgabe auf verschieden forms. ohne 199$ zu bezahlen. und wenn ich mal zeit habe schreibe ich es selber. :coder: und selbstverstädlich poste ich es dann hier wenn ich es hinbekomme. bedarf besteht ja. bis dahin ....

Klaus01 17. Okt 2006 09:15

Re: Drucken
 
http://www.etsimo.uniovi.es/delphi/f...e/printp43.zip

Aus dem Readme:
Zitat:

*procedure Print
Prints the form or scrollbox defined in Source.
Für welche Delphi Version das ist, keine Ahnung.
Ist vielleicht einen Blick wert.

und kostest nix.

Grüße
Klaus

bundy 17. Okt 2006 09:25

Re: Drucken
 
Hy ich verwände für diese Formularprints immer

http://www.devexpress.com/Products/V...stem/Index.xml

kostet zwar was, aber die welt ist es nicht und funktioniert prima.


lg
Bundy

Christophe 17. Okt 2006 09:32

Re: Drucken
 
aloha Klaus

Des könnte was sein :dancer: DANKE!!! werde ich gleich heute abend austesten...


Alle Zeitangaben in WEZ +1. Es ist jetzt 01:26 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