Delphi-PRAXiS

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.

MiniMax 9. Mai 2011 14:10

AW: Drucken (ein leidiges Thema)
 
Also ich habe mal mit Rave versucht zu spielen:
Delphi-Quellcode:
procedure TForm4.RvSystem1Print(Sender: TObject);
begin
with Sender as TBaseReport do
  begin
    SetFont('Arial', 15);
    GotoXY(1,1);
    Print('Welcome to Code Based Reporting in Rave');
  end;
end;

procedure TForm4.sButton1Click(Sender: TObject);
begin
RvSystem1.execute;
end;
So wenn ich nun auf den Button klicke kommt folgende meldung:
Code:
Erste Gelegenheit für Exception bei $769DFBAE. Exception-Klasse EAccessViolation mit Meldung 'Zugriffsverletzung bei Adresse 0040D05C in Modul 'Auftragsverwaltung.exe'. Lesen von Adresse 00000042'. Prozess Auftragsverwaltung.exe (5344)
Wenn ich dann ok klicke, kommt der Output Options Dialog der aber leer ist. Bei ok kommt folgendes:
Code:
Erste Gelegenheit für Exception bei $769DFBAE. Exception-Klasse EStringListError mit Meldung 'Listenindex überschreitet das Maximum (-1)'. Prozess Auftragsverwaltung.exe (5344)
Dann direkt danach:
Code:
Erste Gelegenheit für Exception bei $769DFBAE. Exception-Klasse EAccessViolation mit Meldung 'Zugriffsverletzung bei Adresse 0040D05C in Modul 'Auftragsverwaltung.exe'. Lesen von Adresse 00000042'. Prozess Auftragsverwaltung.exe (5344)
Das ganze zeigt er mir immer bei dem end; des onclick events an!

Dann bei Ok ist alles wieder normal und es tut sich nix!!
Weiß jemand woran das liegt?

Perlsau 9. Mai 2011 15:05

AW: Drucken (ein leidiges Thema)
 
Zitat:

Zitat von MiniMax (Beitrag 1099731)
Also ich habe mal mit Rave versucht zu spielen:
Delphi-Quellcode:
procedure TForm4.RvSystem1Print(Sender: TObject);
begin
with Sender as TBaseReport do
  begin
    SetFont('Arial', 15);
    GotoXY(1,1);
    Print('Welcome to Code Based Reporting in Rave');
  end;
end;

procedure TForm4.sButton1Click(Sender: TObject);
begin
RvSystem1.execute;
end;
So wenn ich nun auf den Button klicke kommt folgende meldung:
Code:
Erste Gelegenheit für Exception bei $769DFBAE. Exception-Klasse EAccessViolation mit Meldung 'Zugriffsverletzung bei Adresse 0040D05C in Modul 'Auftragsverwaltung.exe'. Lesen von Adresse 00000042'. Prozess Auftragsverwaltung.exe (5344)
Wenn ich dann ok klicke, kommt der Output Options Dialog der aber leer ist. Bei ok kommt folgendes:
Code:
Erste Gelegenheit für Exception bei $769DFBAE. Exception-Klasse EStringListError mit Meldung 'Listenindex überschreitet das Maximum (-1)'. Prozess Auftragsverwaltung.exe (5344)
Dann direkt danach:
Code:
Erste Gelegenheit für Exception bei $769DFBAE. Exception-Klasse EAccessViolation mit Meldung 'Zugriffsverletzung bei Adresse 0040D05C in Modul 'Auftragsverwaltung.exe'. Lesen von Adresse 00000042'. Prozess Auftragsverwaltung.exe (5344)
Das ganze zeigt er mir immer bei dem end; des onclick events an!

Dann bei Ok ist alles wieder normal und es tut sich nix!!
Weiß jemand woran das liegt?

Nee, keine Ahnung, RvSystem habe ich bislang noch nicht verwendet. Für Kunden habe ich zwei Anwendungen entwickelt, die mittels Rave einen Report generieren. Eine davon kannst du dir gerne selbst anschauen, es gibt eine Shareware-Version auf meiner Firmen-Homepage: Schau unter Downloads nach Waffenbuch.

In meinem Datenmodul liegen neben den benötigten Datasets und Datasources für jeden benötigten Report ein TRvProject und für jede daran beteiligte Tabelle eine TRvDataSetConnection. Letztere sind mit den entsprechenden Datasets verbunden (Property Dataset).

Ein Doppelklick auf die jeweilige Projektkomponente öffnet den Rave-Designer, wo du dein Report-Formular gestaltest. Ausführliche Hinweise findest du in den Tutorials, auf die ich bereits hingewiesen habe (ich schreib jetzt hier garantiert kein Rave-Tutorial).

Der Einstieg in RaveReport ist nicht leicht, man muß sich die Funktionalität erarbeiten. Gilt aber für die meisten anderen komplexeren Komponenten ebenso.

MiniMax 9. Mai 2011 15:54

AW: Drucken (ein leidiges Thema)
 
Mhmm ok -- Danke! Wenn ich aber auf Rave Project doppelklicke kommt der Splashscreen von Rave und hängt sich nach ner zeit auf! Weiß einer Warum?

Perlsau 9. Mai 2011 16:31

AW: Drucken (ein leidiges Thema)
 
Zitat:

Zitat von MiniMax (Beitrag 1099775)
Mhmm ok -- Danke! Wenn ich aber auf Rave Project doppelklicke kommt der Splashscreen von Rave und hängt sich nach ner zeit auf! Weiß einer Warum?

Keine Ahnung, bei mir funktioniert das so, ich arbeite gerade damit. Welche Rave-Version hast du denn?

MiniMax 9. Mai 2011 17:21

AW: Drucken (ein leidiges Thema)
 
Die die bei der RAD Studio 2009 Architekt bei war! Kann man die Kompo eventuell neu installieren?

fkerber 9. Mai 2011 17:23

AW: Drucken (ein leidiges Thema)
 
Hi,

hast du Delphi als Admin gestartet?
Ich weiß noch, dass ich das bei meiner 2007er tun musste, damit ich danach den Rave-Designer starten musste, weil der wohl beim Starten was in eine INI schreibt, die im Programmverzeichnis liegt (wenn man denn den "Fehler" gemacht hat, Delphi+Rave dahin zu installieren).


LG, Frederic

MiniMax 10. Mai 2011 14:52

AW: Drucken (ein leidiges Thema)
 
Werde ich sofort mal ausprobieren! Es liegt nämlich im Programmverzeichnis!

MiniMax 10. Mai 2011 15:34

AW: Drucken (ein leidiges Thema)
 
War zwar nen guter Tipp, bringt es aber net! Unter Win7 kommt direkt nach dem Start die Meldung Programm funktioniert nicht mehr -- Beenden!

Perlsau 10. Mai 2011 15:37

AW: Drucken (ein leidiges Thema)
 
Zitat:

Zitat von MiniMax (Beitrag 1100013)
War zwar nen guter Tipp, bringt es aber net! Unter Win7 kommt direkt nach dem Start die Meldung Programm funktioniert nicht mehr -- Beenden!

Also ich weiß, warum ich nicht auf Vista oder 7 umsteige ...:twisted:

MiniMax 10. Mai 2011 15:39

AW: Drucken (ein leidiges Thema)
 
naja unter Win Vista is es das selbe!

Perlsau 10. Mai 2011 15:42

AW: Drucken (ein leidiges Thema)
 
Zitat:

Zitat von MiniMax (Beitrag 1100016)
naja unter Win Vista is es das selbe!

Eben! Die meisten Fälle, bei denen man meine Firma wegen PC-Notfällen kontaktiert, beruhen auf verlorenen Zugriffsrechten unter Vista oder Win7. Als Programmierer kann ich so'n Mist wirklich nicht gebrauchen. Vista oder 7 bietet für gewerbliche Windows-Anwender keine nennenswerten Vorteile gegenüber XP-Prof.

Namenloser 10. Mai 2011 17:36

AW: Drucken (ein leidiges Thema)
 
[OT]
Zitat:

Zitat von Perlsau (Beitrag 1100017)
Zitat:

Zitat von MiniMax (Beitrag 1100016)
naja unter Win Vista is es das selbe!

Eben! Die meisten Fälle, bei denen man meine Firma wegen PC-Notfällen kontaktiert, beruhen auf verlorenen Zugriffsrechten unter Vista oder Win7. Als Programmierer kann ich so'n Mist wirklich nicht gebrauchen. Vista oder 7 bietet für gewerbliche Windows-Anwender keine nennenswerten Vorteile gegenüber XP-Prof.

Quatsch. Was unter Vista „Programm funktioniert nicht mehr“ heißt, hieß unter XP „Diese Anwendung hat ein Problem festgestellt“ und hat mit Adminrechten überhaupt nichts zu tun. Außerdem kann man die UAC ausschalten und genau so als Admin weiterarbeiten wie unter früheren Versionen inklusive des damit verbundenen Sicherheitsrisikos.
[/OT]

fkerber 10. Mai 2011 20:44

AW: Drucken (ein leidiges Thema)
 
Hi,

ich habe unter W7 mit D2007 und Rave 7 keine Problem.


LG, Frederic


Alle Zeitangaben in WEZ +1. Es ist jetzt 14:58 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-2025 by Thomas Breitkreuz