AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein GUI-Design mit VCL / FireMonkey / Common Controls Delphi Komponente für PrintPreview, Printing und Export
Thema durchsuchen
Ansicht
Themen-Optionen

Komponente für PrintPreview, Printing und Export

Ein Thema von Alphacodex · begonnen am 19. Aug 2009 · letzter Beitrag vom 29. Aug 2009
Antwort Antwort
Seite 1 von 2  1 2      
Alphacodex

Registriert seit: 16. Mär 2006
65 Beiträge
 
Delphi 2006 Professional
 
#1

Komponente für PrintPreview, Printing und Export

  Alt 19. Aug 2009, 12:49
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?
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.858 Beiträge
 
Delphi 11 Alexandria
 
#2

Re: Komponente für PrintPreview, Printing und Export

  Alt 19. Aug 2009, 12:52
Ich würde zu FreeReport/FastReport raten. Da ist Scripting in PascalScript möglich
Markus Kinzler
  Mit Zitat antworten Zitat
Alphacodex

Registriert seit: 16. Mär 2006
65 Beiträge
 
Delphi 2006 Professional
 
#3

Re: Komponente für PrintPreview, Printing und Export

  Alt 19. Aug 2009, 13:11
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
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.624 Beiträge
 
Delphi 12 Athens
 
#4

Re: Komponente für PrintPreview, Printing und Export

  Alt 19. Aug 2009, 13:14
Meinst Du sowas? http://www.delphiarea.com/products/d...nents/preview/
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.858 Beiträge
 
Delphi 11 Alexandria
 
#5

Re: Komponente für PrintPreview, Printing und Export

  Alt 19. Aug 2009, 13:20
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
Markus Kinzler
  Mit Zitat antworten Zitat
Alphacodex

Registriert seit: 16. Mär 2006
65 Beiträge
 
Delphi 2006 Professional
 
#6

Re: Komponente für PrintPreview, Printing und Export

  Alt 19. Aug 2009, 14:06
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
  Mit Zitat antworten Zitat
webcss

Registriert seit: 10. Feb 2006
255 Beiträge
 
Delphi XE2 Professional
 
#7

Re: Komponente für PrintPreview, Printing und Export

  Alt 19. Aug 2009, 14:11
Zitat von Alphacodex:
...eine kostenlose Community-Edition, die kostenlos ist...
muss dann wohl so sein! 8)
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..
"Wer seinem Computer Mist erzählt, muss immer damit rechnen..." (unbekannt)
"Der Computer rechnet damit, dass der Mensch denkt..." (auch unbekannt)
mein blog
  Mit Zitat antworten Zitat
mquadrat

Registriert seit: 13. Feb 2004
1.113 Beiträge
 
Delphi XE2 Professional
 
#8

Re: Komponente für PrintPreview, Printing und Export

  Alt 19. Aug 2009, 15:03
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
  Mit Zitat antworten Zitat
Benutzerbild von Mackhack
Mackhack

Registriert seit: 29. Nov 2003
Ort: San Diego, CA/USA
1.446 Beiträge
 
Delphi 2006 Architect
 
#9

Re: Komponente für PrintPreview, Printing und Export

  Alt 20. Aug 2009, 08:04
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.
Um etwas Neues zu schaffen muss man seine Ohren vor den Nein-sagern verschliessen um seinen Geist öffnen zu können.
(George Lukas)
  Mit Zitat antworten Zitat
Satty67

Registriert seit: 24. Feb 2007
Ort: Baden
1.566 Beiträge
 
Delphi 2007 Professional
 
#10

Re: Komponente für PrintPreview, Printing und Export

  Alt 20. Aug 2009, 08:17
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.
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 00:31 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz