ITwork Geschrieben 18. November 2002 Geschrieben 18. November 2002 Wie erstelle ich eine Druckfunktion unter Delphi 5?? :confused: Das soll mit Delphi 5 Enterprise nicht möglich sein. Ist es denn unter Delphi 5 Professionell möglich und wie sieht das ganze aus?? Zitieren
Pointerman Geschrieben 18. November 2002 Geschrieben 18. November 2002 Hallo Mc-S! Es wäre gut zu wissen was Du drucken willst: 1. Dein Formular (dann nimm: "MeinFormular.Canvas.Print). 2. Einen Text (z.B. aus der RichEdit-Komponente: "RichEdit.Print"). 3. Du Benutzt QuickReport(ist bei Delphi5 im lieferumfang. In der Komponentenleiste unter QReport.). Du kannst natürlich auch eine Druckkomponente für Delphi suchen (z.B. ReportBuilder, FastReport, CrystalReports...). Hoffe ich konnte Dir irgendwie helfen :confused: Gruß, Maart Zitieren
ITwork Geschrieben 18. November 2002 Autor Geschrieben 18. November 2002 Ich möchte ein Formular ausdrucken, wobei möglichst nur einen Teil des Formulars. Ich habe aber keine Ahnung wie ich das machen soll/kann. Alternativ: Ich will einfach die aktuellen Informationen aus dem Formular ausgeben. Also alles was ich da so eingegeben habe. z.B. Name: Karl Meyer Geb. Datum: 1.1.2000 Wohnort: München ......... Zitieren
Pointerman Geschrieben 18. November 2002 Geschrieben 18. November 2002 Hallo mal wieder! Also, wenn Du keine Lust hast Dich sofort in QuickReport oder ähnliches einzuarbeiten oder Du schlicht und ergreifend keine Zeit hast hab ich ene einfache, schnelle aber relativ(EXTREM) unelegante Lösung:WD : Nimm die RichEdit-Komponente aus der Komponentenliste "Win32". Entweder Du packst sie auf das Formular und setzt die Eigenschaft Visible auf False(damit der Anwender sie nicht immer sieht), oder Du erzeugst Sie nur kurz selber zum Ausdrucken. Wenn Du eine Instanz von RichEdit erzeugt hast, schreibst Du in die Eigenschaft Text den Krempel rein, den du Ausgedruckt haben willst. Wenn Du mehrere Zeilen haben möchtest: RichEdit.Text := 'Hallo' + #13 + #10 + 'Welt'; //Hallo ist in der ersten Zeile, Welt in der Zweiten (#13, #10 sind die Steuerzeichen für "neue Zeile" und "Wagenrückluaf"). Wenn Du den Text drin hast, kannste einfach die Methode Print von RichEdit aufrufen (Ich meine da kannst/musst Du dann die Überschrift noch angeben). Das ist, glaube ich, besser als mit dem Canvas rum zu fuschen. Hoffe es hilft Dir. Gruß Maart Zitieren
geloescht_JesterDay Geschrieben 22. November 2002 Geschrieben 22. November 2002 also, gaaanz einfach: In der Unit Printers befindet sich die Klasse TPrinter. Mit der kannst du beliebiges auf den Drucker ausgeben. Auch dein Formular oder einen Teil davon. Beispiel: var p: TPrinter; XDest, YDest, XSrc, YSrc: Integer; PWidth, PHeight: Integer; begin // X bzw. Y für Ausgabe auf Papier (hier ist zu beachten, dass ein Pixel beim Drucker sehr klein ist und //abhängig von der gewählten Auflösung. //Z.B. 600 dpi entsprechen 600 Pixel einem Inch = 2,54 cm) XDest:= 50; YDest:= 50; // Ausschnitt des Formulars, der gedruckt werden soll XSrc:= 0; YSrc:= 0; // Angefangen in der linken oberen Ecke PWidth:= self.Width div 2; PHeight:= self.Height div 2; // Bis Hälfte Breite bzw. Höhe, also linkes oberes Viertel drucken p.BeginDoc; // Formular drucken BitBlt(p.Canvas.handle, XDest, YDest, PWidth, PHeight, self.Canvas.handle, XSrc, YSrc, SRCCOPY); p.EndDoc; end; nicht probiert, aber müsste so funktionieren. Wenn du die Ausgabe skalieren willst musst du "StretchBlt" nehmen, falls du die Ausgabe drehen willst "PlgBlt" (geht nur unter NT und folgende, nicht 9x) Für nur Text nimmst du Printer.Canvas.TextOut (Wobei wenn du ein Textfile o.ä. drucken willst die Methoden von vorhandenen Komponenten (TRichEdit o.ä.) einfacher zu nutzen sind ) Ach ja, geht mit allen Delphi Versionen... nicht möglich bei D5 Enterprise @Pointerman: Eine TCanvas Methode Print gibt es nicht. Was mir gerade noch einfällt... mit dem Beispiel oben Druckst du nur den Client Bereich, also onhe Fenster Titelleiste. Wenn du die haben willst musst du das Handle vom Desktop nehmen bei BitBlt. aus dem Kopf sag ich mal das müsste so gehen: var: DC: HDC begin DC:= GetDC(0); BitBtl(p.canvas.handle, 0, 0, 50, 50, DC, self.left, self.top, SRCCOPY); freedc(DC); end; so ungefähr zumindest... Zitieren
Empfohlene Beiträge
Dein Kommentar
Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.