Delphi-PRAXiS
Seite 1 von 3  1 23      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   Drucken (ein leidiges Thema) (https://www.delphipraxis.net/160330-drucken-ein-leidiges-thema.html)

MiniMax 8. Mai 2011 18:57

Drucken (ein leidiges Thema)
 
Moin Zusammen,
ich habe mal wieder ein Problem:
Ich möchte in meiner Anwendung eine Art Rechnung Drucken. Sprich ich habe eine feste Vorlage mit Kopf, Tabellenüberschrift und Fußzeile. Diese möchte ich nun mit Text füllen (St, Artikel, Artikelnr, StPreis, Ges Preis).
Ich habe zwar Rave aber da komme ich net mitweiter --> wie bekomme ich da meine Daten rein? Was benötige ich aus der Rave Kompo?

Ich hoffe ihr könnt mir helfen!

Daniel 8. Mai 2011 19:07

AW: Drucken (ein leidiges Thema)
 
Moin,

für den ersten Anfang schon mal mit einem der Tutorials herumgespielt?
z.B. http://edn.embarcadero.com/article/30329

MiniMax 8. Mai 2011 19:40

AW: Drucken (ein leidiges Thema)
 
Mhmm das geht net! Da bekomme ich nen fehler von wegen zugriffsverletzung! Kann ich dass net Manuell mit Printer machen? Und wenn wie?

Guido R. 8. Mai 2011 22:25

AW: Drucken (ein leidiges Thema)
 
Hallo Minimax,

ich persönlich kann nur empfehlen FastReport zu nutzen. Wenn Du Rechnungen erstellen möchtest, nehme ich an, dass Du Deinen Kunden auch die Möglichkeit geben möchtest, selber das Design der Druckvorlagen zu verändern. Der Designer von FastReport ist m.E. deutlich eingängiger, sowohl für den Entwickler, als auch für den Endkunden. Die Testversion von FastReport ist auf 5 Seiten/Report und durch ein paar Nag-Screens bei Scriptverwendung beschränkt. Es gibt auch eine freie Version names FreeReport.

Die Anbindung der Daten ist recht einfach. Du erzeugst eine ganz normale Datenanbindung (tTable, tQuery, tADODataset etc) und verknüpfst eine tfrxDataset-Komponente damit. Schon kannst Du die Daten in einem Report verwenden.

Die Erzeugung mit Printer ist möglich, aber sehr aufwendig, wenn es einigermaßen flexibel und anwenderfreundlich sein soll.

Gruß
Guido R.

himitsu 9. Mai 2011 07:47

AW: Drucken (ein leidiges Thema)
 
Manuell geht auch,
entweder direkt über die entsprechenden WinAPIs
oder über TPrinter, welches ein Canvas besitzt, worauf man die aktuelle Seite draufmalen kann.

Satty67 9. Mai 2011 09:15

AW: Drucken (ein leidiges Thema)
 
Für ganz einfache Sachen (Tabellen, ein Bild) kann man schon TPrinter verwenden. Für flexible Formulare wie Rechnungen etc. ist das wirklich ein Haufen Arbeit und ein ReportDesigner wirklich empfehlenswert.

Beim "manuellen" drucken muss man sich noch entscheiden, ob man die Koordinaten/Maße an den Drucker anpasst oder den Drucker an den Maßstab (letzeres mit SetMapMode, SetViewPort etc.)

Ein kleines Beispiel für die erste Variante:
Delphi-Quellcode:
  private
    { Private-Deklarationen Form1 }
    FxFactor,
    FyFactor : Double;

[...]

procedure TForm1.CalculateLoMetricFactor;
var
  xDPI, yDPI : Integer;
begin
  xDPI := GetDeviceCaps(Printer.Handle, LOGPIXELSX);
  yDPI := GetDeviceCaps(Printer.Handle, LOGPIXELSY);
  FxFactor := xDPI / 254;
  FyFactor := yDPI / 254;
end;

function TForm1.CalcX(XValue : Integer): Integer;
begin
  Result := Round(XValue * FxFactor);
end;

function TForm1.CalcY(YValue : Integer): Integer;
begin
  Result := Round(YValue * FyFactor);
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
  if PrintDialog1.Execute then
  begin
    CalculateLoMetricFactor;
    Printer.BeginDoc;
    with Printer.Canvas do
    begin
      // Maßangaben in 1/10 mm
      StretchDraw(Rect(CalcX(400),CalcY(100),CalcX(400+400),CalcY(100+400)),
                       Image1.Picture.Graphic);

      Font.Size := 12;
      TextOut(CalcX(100), CalcY(100), '- Zeile 1');
      TextOut(CalcX(100), CalcY(200), '- Zeile 2');
    end;
    Printer.EndDoc;
  end;
end;
Selbst bei so einem einfachen Beispiel muss schon viel berechnet werden, damit das auf jedem Drucker gleich aussieht.

Perlsau 9. Mai 2011 13:24

AW: Drucken (ein leidiges Thema)
 
Zitat:

Zitat von MiniMax (Beitrag 1099596)
Moin Zusammen,
ich habe mal wieder ein Problem:
Ich möchte in meiner Anwendung eine Art Rechnung Drucken. Sprich ich habe eine feste Vorlage mit Kopf, Tabellenüberschrift und Fußzeile. Diese möchte ich nun mit Text füllen (St, Artikel, Artikelnr, StPreis, Ges Preis).
Ich habe zwar Rave aber da komme ich net mitweiter --> wie bekomme ich da meine Daten rein? Was benötige ich aus der Rave Kompo?

Ich hoffe ihr könnt mir helfen!

Bei Entwickler.com und bei Google findest du reichlich Tutorials.

MiniMax 9. Mai 2011 13:36

AW: Drucken (ein leidiges Thema)
 
Moin,
Danke für eure Antworten! Ich möchte eig nur keine DB verwenden! Gibt es da ne möglichkeit?

Satty67 9. Mai 2011 13:39

AW: Drucken (ein leidiges Thema)
 
Notfalls kann man auch schnell ein TClientDataSet füllen und verwenden.

Perlsau 9. Mai 2011 13:40

AW: Drucken (ein leidiges Thema)
 
Zitat:

Zitat von MiniMax (Beitrag 1099716)
Moin,
Danke für eure Antworten! Ich möchte eig nur keine DB verwenden! Kann man die Kompo FreeReport auch ohne Nutzen?

Eine weitere Möglichkeit gestylter Ausgabe-Formulare wäre noch Ole-Automation mit MS-Office oder OpenOffice.


Alle Zeitangaben in WEZ +1. Es ist jetzt 09:06 Uhr.
Seite 1 von 3  1 23      

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