![]() |
Komponente für PrintPreview, Printing und Export
Hallo,
ich hab mich jetzt schon 2 Stunden durchs Netz gegoogelt und bin leider etwas überfahren von den vielen hundert kostenlosen oder kostenpflichtigen Komponenten, die es auf dem Gebiet gibt... Vielleicht kann mir jemand ein, zwei Tipps zu Komponenten geben, mit der er/sie gute Erfahrungen gemacht haben. Folgendes brauche ich: Im Grunde will ich verschiedene Reporting Aufgaben für meine Datenbankanwendung programmieren. Der User soll den Report dann schon vom Programm aus anschauen und ausdrucken können. Nativer PDF-Export wäre natürlich sehr fein, aber das würde ich notfalls auch irgendwie anders machen. Fertige Reporting Lösungen (wie Rave oder so) will ich eher nicht verwenden, da ich gerne alles voll unter Delphi-Steuerung hätte (ich muss ein paar komplizierte Überprüfungen und Verrechnungen in die Reports einbauen und würde das gerne in der Delphi-Programmiersprache lösen). Ich habe an irgendein TCanvas-Derivat gedacht, auf das ich alles draufschreiben kann, dass der User dann anschauen und darauf herumzoomen kann und schließlich ausdrucken oder exportieren - und das mit möglichst wenig zusätzlichem Programmieraufwand. Gibts da was passendes? Freeware wäre bevorzugt, aber ich bin auch bereit ein paar Euro zu investieren, wenn der Mehrwert es gerechtfertig. Vielen Dank Codex P.S. Ich benutzte Delphi 2009, manche Komponenten sollen da ja Probleme machen, oder? |
Re: Komponente für PrintPreview, Printing und Export
Ich würde zu FreeReport/FastReport raten. Da ist Scripting in PascalScript möglich
|
Re: Komponente für PrintPreview, Printing und Export
Scheint ne ganz gute und preiswerte Reporting-Lösung zu sein...
Aber genau das wollte ich ja nicht. Ich möchte die Daten selbst aus der Datenbank lesen, innerhalb von Delphi verarbeiten und erst dann an eine Komponente zur Ausgabe, Ausdrukc und Export übergeben. Über den Datenverarbeitungsprozess möchte ich die volle Kontrolle behalten - ich hab nur keine Lust auch noch Preview, Zoom, Pan und Export Codex selbst zu schreiben, das soll ruhig ne geeignete Komponente übernehmen... Gibts da sonst was? Grüße Codex |
Re: Komponente für PrintPreview, Printing und Export
Meinst Du sowas?
![]() |
Re: Komponente für PrintPreview, Printing und Export
Auch für das wäre FastReport geeignet, denn du kannst die Daten auch als virtuelles DataSet oder Wertemengen bereitstellen oder
![]() |
Re: Komponente für PrintPreview, Printing und Export
Ah... Danke!!!
VPE ist genau was ich gesucht habe und es gibt sogar eine kostenlose Community-Edition, die kostenlos ist (wobei ich nicht verstanden habe, ob die irgendwelche Einschränkungen hat...) PrintPreview wäre auch gegangen, aber die VPE ist von dem was ich gelesen habe noch besser geeignet!! Vielen Dank, ich werd mir das mal installieren und genauer anschauen... Codex |
Re: Komponente für PrintPreview, Printing und Export
Zitat:
Zitat:
|
Re: Komponente für PrintPreview, Printing und Export
Interne Verarbeitung ließe sich auch mit Rave machen, da du dort ebenfalls ein DataSet direkt aus der Anwendung an Rave schicken kannst.
Sicher lässt sich das alles auch selbst programmieren. Aber inkl. eines bedienbaren Designers dürfte da einiges an Zeit drauf gehen. Roter Kasten: Poste es trotzdem der Vollständigkeit halber |
Re: Komponente für PrintPreview, Printing und Export
Hier noch was Handgeschriebenes aus 10 Jahren,...
Delphi-Quellcode:
unit Unit1;
interface uses SysUtils, WinTypes, WinProcs, Messages, Classes, Graphics, Controls, Forms, Dialogs,printers, ExtCtrls, StdCtrls, Buttons; type TForm1 = class(TForm) Panel1: TPanel; SpeedButton1: TSpeedButton; PrinterSetupDialog1: TPrinterSetupDialog; SpeedButton2: TSpeedButton; Shape1: TShape; procedure SpeedButton1Click(Sender: TObject); procedure SpeedButton2Click(Sender: TObject); procedure FormResize(Sender: TObject); procedure FormCreate(Sender: TObject); procedure FormClose(Sender: TObject; var Action: TCloseAction); procedure FormPaint(Sender: TObject); private { Private-Deklarationen } public { Public-Deklarationen } end; var Form1: TForm1; blatt : TCanvas; dc : HDC; druckbreite,druckhoehe: integer; panelx : TWinControl; MMproPixelY, MMproPixelX : single; implementation {$R *.DFM} procedure DC_TextOut(c:TCanvas;x,y,winkel,groesse:integer;txt:PChar); var hfont, fontold : integer; dc : hdc; fontname : string; begin dc := c.handle; fontname := c.font.name + #0; hfont := CreateFont(groesse,0,winkel*10,0,fw_normal,0,0,0,1,out_tt_precis,$10,2,4,@fontname[1]); fontold := SelectObject(dc,hfont); c.TextOut(x,y,txt); SelectObject(dc, fontold); DeleteObject(hfont); end; procedure blattanpassen; var prnxy, formxy : single; dx,dy,x,y : integer; blattbreite, blatthoehe : integer; scale : single; xofs,yofs : single; begin MMproPixelX := 25.4 / GetdeviceCaps(printer.handle,LOGPIXELSX) ; MMproPixelY := 25.4 / GetdeviceCaps(printer.handle,LOGPIXELSY) ; blattbreite := Round(GetdeviceCaps(printer.handle,PHYSICALWIDTH) * MMproPixelX); blatthoehe := Round(GetdeviceCaps(printer.handle,PHYSICALHEIGHT) * MMproPixelY); xofs := Round(GetdeviceCaps(printer.handle,PHYSICALOFFSETX)*MMproPixelX); yofs := Round(GetdeviceCaps(printer.handle,PHYSICALOFFSETY)*MMproPixelY); druckbreite := GetDeviceCaps(printer.handle, horzsize); druckhoehe := GetDeviceCaps(printer.handle, vertsize); y := 35; x := 10; formxy := (form1.clientWidth - x) / (Form1.clientheight - y); prnxy := blattbreite / blatthoehe; If formxy < prnxy Then begin //Breite dominiert dx := form1.clientWidth - 20; dy := round(dx / prnxy); y := round((Form1.ClientHeight / 2 + 8) - (dy / 2)); end else begin //Höhe dominiert dy := form1.clientHeight - y-10; dx := round(dy * prnxy); x := round((form1.clientWidth / 2) - (dx / 2)); End; form1.shape1.setbounds(x,y,dx,dy); scale := dy /blatthoehe; panelx.setbounds(x+Round(xofs*scale),y+Round(yofs*scale),Round(druckbreite*scale),Round(druckhoehe*scale)); SetMapMode(blatt.handle,mm_anisotropic); SetViewportExtEX(blatt.handle,dx,dy,nil); // Scalierung SetWindowExtEX(blatt.handle,druckbreite*10,-druckhoehe*10,nil); Setbkmode(blatt.handle,TRANSPARENT); blatt.Brush.Style := bssolid; blatt.Brush.Color := clwhite; blatt.Pen.Color := clblack; blatt.fillrect(bounds(0,0,druckbreite*10,-druckhoehe*10)); end; procedure ausgabe(ziel : TCanvas); var i,l,n,x,y,breite,hoehe : integer; s : string; begin with ziel do begin font.Height:=50; font.Name := 'Arial'; SetTextAlign(handle,TA_CENTER+TA_TOP); breite := druckbreite*10; hoehe := druckhoehe*10; moveto(0,1);LineTo(breite,1); i := 1; while i <= breite do begin MoveTo(i,-1); if (i-1) mod 100 = 0 then begin LineTo(i,-50); TextOut(i,-50,intToStr(i div 100)); end else LineTo(i,-30); inc(i,10); end; SetTextAlign(handle,TA_LEFT+TA_TOP); n := 200; i := 0; x := druckbreite * 5; y := druckhoehe * 5; while i < 500 do begin Dec(n,5); DC_textout(ziel,x, -y, i, n, ' rotierender Text'); Inc(i,15); end; end; end; procedure TForm1.SpeedButton1Click(Sender: TObject); begin printer.begindoc; SetMapMode(printer.canvas.handle,MM_LOMETRIC); ausgabe(printer.canvas); printer.enddoc end; procedure TForm1.SpeedButton2Click(Sender: TObject); begin printersetupdialog1.execute; blattanpassen; ausgabe(blatt); end; procedure TForm1.FormResize(Sender: TObject); begin blattanpassen; ausgabe(blatt); end; procedure TForm1.FormCreate(Sender: TObject); begin panelx := TWincontrol.create(self); panelx.parent := Form1; blatt := TCanvas.Create; blatt.handle := GetDC(panelx.handle); setmapmode(blatt.handle,mm_anisotropic); end; procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction); begin releaseDC(handle, blatt.handle); end; procedure TForm1.FormPaint(Sender: TObject); begin blattanpassen; ausgabe(blatt); end; end. |
Re: Komponente für PrintPreview, Printing und Export
Witzig.. Deine "manuelle" Varianten sieht aus, wie ich es früher auch gelöst habe... incl. berechnen, wieviel Pixel pro MM und restliche Druckereigenschaften am Anfang ;)
Verwende aber für manuelle Ausgaben schon seit Jahren die TPreview Komponente, die DeddyH verlinkt hat, selbst wenn kein Preview nötig ist. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 11:08 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 by Thomas Breitkreuz