Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   Delphi Komponente für PrintPreview, Printing und Export (https://www.delphipraxis.net/138890-komponente-fuer-printpreview-printing-und-export.html)

Alphacodex 19. Aug 2009 12:49


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?

mkinzler 19. Aug 2009 12:52

Re: Komponente für PrintPreview, Printing und Export
 
Ich würde zu FreeReport/FastReport raten. Da ist Scripting in PascalScript möglich

Alphacodex 19. Aug 2009 13:11

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

DeddyH 19. Aug 2009 13:14

Re: Komponente für PrintPreview, Printing und Export
 
Meinst Du sowas? http://www.delphiarea.com/products/d...nents/preview/

mkinzler 19. Aug 2009 13:20

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 Virtual Print Engine Community Edition

Alphacodex 19. Aug 2009 14:06

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

webcss 19. Aug 2009 14:11

Re: Komponente für PrintPreview, Printing und Export
 
Zitat:

Zitat von Alphacodex
...eine kostenlose Community-Edition, die kostenlos ist...

muss dann wohl so sein! 8)
Zitat:

Zitat von Alphacodex
(wobei ich nicht verstanden habe, ob die irgendwelche Einschränkungen hat...)

Wird halt eher schleppend gepflegt, d.h. sie hinkt der Kaufversion etwas hinterher..

mquadrat 19. Aug 2009 15:03

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

Mackhack 20. Aug 2009 08:04

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.

Satty67 20. Aug 2009 08:17

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.

Mackhack 20. Aug 2009 08:20

Re: Komponente für PrintPreview, Printing und Export
 
Zitat:

Zitat von Satty67
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.

Schrieb ja ... aus 10 Jahren,... ich verwende es auch nicht mehr.

Alphacodex 20. Aug 2009 22:56

Re: Komponente für PrintPreview, Printing und Export
 
Hallo,

Ist schon irgendwie schade, dass das "Rad" immer wieder neu erfunden werden muss und in wievielen Stunden menschlicher Schweissarbeit immer wieder ähnliches neugemacht wird. Wobei man ja grade bei Delphi schon recht viele vorgefertigte Sachen findet, so dass man nicht alles selbst machen muss, oder es zumindest freundliche Forenbesucher gibt, die ihre harte Arbeit zur Verfügung stellen!!

Ich bleibe vorerst bei der VPE, die bietet genau das was ich brauche, ich musste sie allerdings erst einigermaßen Delphi2009 tauglich machen, weil die ganzen String-Geschichten Probleme machten, zum Glück waren alle Sourcecodes dabei...


Vielen Dank
Codex

Missionar 22. Aug 2009 15:49

Re: Komponente für PrintPreview, Printing und Export
 
Zitat:

Zitat von Alphacodex
Hallo,

Ist schon irgendwie schade, dass das "Rad" immer wieder neu erfunden werden muss und in wievielen Stunden menschlicher Schweissarbeit immer wieder ähnliches neugemacht wird. Wobei man ja grade bei Delphi schon recht viele vorgefertigte Sachen findet, so dass man nicht alles selbst machen muss, oder es zumindest freundliche Forenbesucher gibt, die ihre harte Arbeit zur Verfügung stellen!!

Weshalb mußt Du denn das RAD neu erfinden??? Ist doch alles mit an Board. Einfach mal hier im Forum nach "Codebased printing" suchen und Du solltest genügend Beispiele finden, die volle Kontrolle über das Dokument zu bekommen.

Missionar 22. Aug 2009 15:50

Re: Komponente für PrintPreview, Printing und Export
 
Zitat:

Zitat von Alphacodex
Hallo,

Ist schon irgendwie schade, dass das "Rad" immer wieder neu erfunden werden muss und in wievielen Stunden menschlicher Schweissarbeit immer wieder ähnliches neugemacht wird. Wobei man ja grade bei Delphi schon recht viele vorgefertigte Sachen findet, so dass man nicht alles selbst machen muss, oder es zumindest freundliche Forenbesucher gibt, die ihre harte Arbeit zur Verfügung stellen!!

Weshalb mußt Du denn das RAD neu erfinden??? Ist doch alles mit an Board. Einfach mal hier im Forum nach "Codebased printing" suchen und Du solltest genügend Beispiele finden, die volle Kontrolle über das Dokument zu bekommen.

Missionar 22. Aug 2009 15:52

Re: Komponente für PrintPreview, Printing und Export
 
Zitat:

Zitat von Alphacodex
Hallo,

Ist schon irgendwie schade, dass das "Rad" immer wieder neu erfunden werden muss und in wievielen Stunden menschlicher Schweissarbeit immer wieder ähnliches neugemacht wird. Wobei man ja grade bei Delphi schon recht viele vorgefertigte Sachen findet, so dass man nicht alles selbst machen muss, oder es zumindest freundliche Forenbesucher gibt, die ihre harte Arbeit zur Verfügung stellen!!

Weshalb mußt Du denn das RAD neu erfinden??? Ist doch alles mit an Board. Einfach mal hier im Forum nach "Codebased printing" suchen und Du solltest genügend Beispiele finden, die volle Kontrolle über das Dokument zu bekommen.

DeddyH 22. Aug 2009 16:39

Re: Komponente für PrintPreview, Printing und Export
 
Wieso musst Du das 3 mal posten :gruebel:

Alphacodex 22. Aug 2009 17:06

Re: Komponente für PrintPreview, Printing und Export
 
Is ja gut... ich hab Deinen Post ja gelesen!!! ;-)

Was ich meine ist, dass viele die gleichen Sachen immer wieder neu schreiben. Mal generell gesprochen - gibt sicher auch schöne Ausnahmen. Toll finde ich halt so große OpenSource Projekte, wo diese Energie gebündelt wird und am Ende was wirklich konkurrenzfähiges rauskommt.

Ansonsten ist es ja gerade bei Delphi wohl noch mit am Besten, hier wird ja viel getauscht und zur Verfügung gestellt, da muss man zum Glück wirklich nicht immer alles selbst von Grund auf neu schreiben (könnte ich auch gar nicht...)


Viele Grüße
Codex

Missionar 22. Aug 2009 17:27

Re: Komponente für PrintPreview, Printing und Export
 
Zitat:

Zitat von DeddyH
Wieso musst Du das 3 mal posten :gruebel:

Hallo Rüsselmops,

das Netz hing. Ein Mod kann ja die übrigen zwei Beiträge löschen.

Alfonso 29. Aug 2009 23:34

Re: Komponente für PrintPreview, Printing und Export
 
Schau dir mal List&Label von Combit an. Ich benutze es seit Jahren und bin sehr zufrieden damit. Es kann Previews und PDF. Ferner kann es sowohl datengebunden wie auch datenungebunden verwendet werden. Über callback Funktionen kannst du ziemlich viel Einfluss im Report nehmen und eigene Funktionen hinzufügen.

Ist halt etwas teurerer ...

Gruß
Alfonso


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