gelöst: LazReport

Rund um die LCL und andere Komponenten
hausi
Beiträge: 132
Registriert: Mi 23. Sep 2009, 08:44
OS, Lazarus, FPC: Winux (L 0.9.xy FPC 2.2.z)
CPU-Target: xxBit

gelöst: LazReport

Beitrag von hausi »

Hallo habe da eine Frage zu Lazreport

Ich habe einen Report und den will ich drucken. Vorher rufe ich den Dialog auf und dann will ich den Report mit den Einstellungen drucken, die ich im Dialog eingestellt habe:

Code: Alles auswählen

if PrintDialog1.Execute then
 begin
    frReport1.LoadFromFile('test.lrf');
frReport1.PrintPreparedReport();  ;
end;
Nun weiss ich nicht, was ich bei dieser Konstellation in der Klammer von printprepareReport eingeben muss.

Hausi
Zuletzt geändert von hausi am Mi 28. Okt 2009, 13:59, insgesamt 1-mal geändert.

monta
Lazarusforum e. V.
Beiträge: 2809
Registriert: Sa 9. Sep 2006, 18:05
OS, Lazarus, FPC: Linux (L trunk FPC trunk)
CPU-Target: 64Bit
Wohnort: Dresden
Kontaktdaten:

Re: LazReport

Beitrag von monta »

Code: Alles auswählen

procedure PrintPreparedReport(const PageNumbers: String; Copies: Integer);
ist doch eigentlich selbsterklärend.
Du müsstest also nur die beiden Werte übergeben.

Ich nehme an, du meinst den Printer-Dialog?
Johannes

hausi
Beiträge: 132
Registriert: Mi 23. Sep 2009, 08:44
OS, Lazarus, FPC: Winux (L 0.9.xy FPC 2.2.z)
CPU-Target: xxBit

Re: LazReport

Beitrag von hausi »

Code: Alles auswählen

if PrintDialog1.Execute then
 begin
    frReport1.LoadFromFile('test.lrf');
frReport1.PrintPreparedReport(const PageNumbers: String; Copies: Integer);
end;
Geht leider nicht.

Hausi

monta
Lazarusforum e. V.
Beiträge: 2809
Registriert: Sa 9. Sep 2006, 18:05
OS, Lazarus, FPC: Linux (L trunk FPC trunk)
CPU-Target: 64Bit
Wohnort: Dresden
Kontaktdaten:

Re: LazReport

Beitrag von monta »

na du musst schon die Werte ersetzen.

Printdialog gibt die ja sicher als Eigenschaft wieder zurück, so das du irgendwas, wie printdialog.pages und printdialog.copycount oder so hast.

so geht es bspw.: (maximale Seitenzahl (10)) ggf. anpassen.

Code: Alles auswählen

if PrintDialog1.Execute then
 begin
    frReport1.LoadFromFile('test.lrf');
    frReport1.PrintPreparedReport('1-10'; 1);
end;
Johannes

hausi
Beiträge: 132
Registriert: Mi 23. Sep 2009, 08:44
OS, Lazarus, FPC: Winux (L 0.9.xy FPC 2.2.z)
CPU-Target: xxBit

Re: LazReport

Beitrag von hausi »

Geht leider auch nicht. Doch der Tipp mit den Eigenschaften muss ich mal nachsehen.

Suche einfach ein Muster, wie man einen Report druckt mit den Einstellungen, die man im Printdialog eingestellt hat.

Hausi

hausi
Beiträge: 132
Registriert: Mi 23. Sep 2009, 08:44
OS, Lazarus, FPC: Winux (L 0.9.xy FPC 2.2.z)
CPU-Target: xxBit

Re: LazReport

Beitrag von hausi »

Da mir hier niemand eine Antwort weis, habe ich die Frage noch in einem anderen Forum gestellt. Sollte ich dort die Antwort erhalten, werde ich die Lösung hier posten. Natürlich bin ich auch dankbar, wenn mir hier jemand eine Lösung vorschlagen kann.

Hausi

hausi
Beiträge: 132
Registriert: Mi 23. Sep 2009, 08:44
OS, Lazarus, FPC: Winux (L 0.9.xy FPC 2.2.z)
CPU-Target: xxBit

Re: LazReport

Beitrag von hausi »

Da ich ein Anfänger bin, frage ich höflich, ob mir einer sagen kann, welche Daten ich einfüllen muss. Die Kontexthilfe sagt folgendes:

PrintPrepareReport(const PageNumbers:String;Copies:Integer);

Leider bin ich ein dummer Anfänger und weis nicht, was ich da in den Klammern einfüllen muss.

Hausi

_X_
Beiträge: 250
Registriert: Di 16. Dez 2008, 20:13
OS, Lazarus, FPC: aptosid (aptosid.com); Lazarus SVN gtk2+qt4; FPC 2.4.0
CPU-Target: 32/64Bit

Re: LazReport

Beitrag von _X_ »

hausi hat geschrieben:PrintPrepareReport(const PageNumbers:String;Copies:Integer);
Also wenn ich rate, und einfach nur mein Englisch benütze, würde ich sagen:

PageNumbers -> Welche Seiten du drucken möchtest
Copies -> Wie oft du das ganze willst

Eigentlich erklärt das Beispiel von Monta alles, und bis auf einen kleinen Fehler, statt ";" das ",", sollte das auch funktionieren.

Wenn ich mir TPrintdialog so ansehe:
PageNumbers -> inttostr(TPrintDialog.FromPage) + '-' + inttostr(TPrintDialog.ToPage);
Copies -> TPrintDialog.Copies

Also alles in allem:

Code: Alles auswählen

PrintPrepareReport(inttostr(TPrintDialog.FromPage) + '-' + inttostr(TPrintDialog.ToPage), TPrintDialog.Copies);
mfg _X_

creed steiger
Beiträge: 958
Registriert: Mo 11. Sep 2006, 22:56

Re: LazReport

Beitrag von creed steiger »

Schau dir halt unter lazarus/components/lazreport/samples/editor
die Demo mal an.Da ist ein Print Button dabei.

hausi
Beiträge: 132
Registriert: Mi 23. Sep 2009, 08:44
OS, Lazarus, FPC: Winux (L 0.9.xy FPC 2.2.z)
CPU-Target: xxBit

Re: LazReport

Beitrag von hausi »

Stimmt da hat es einen Button zum Drucken, doch der druckt mit dem Standarddrucker. Ich möchte aber dass man vor dem Drucken den Drucker auswählen kann.

Hausi

hausi
Beiträge: 132
Registriert: Mi 23. Sep 2009, 08:44
OS, Lazarus, FPC: Winux (L 0.9.xy FPC 2.2.z)
CPU-Target: xxBit

Re: LazReport

Beitrag von hausi »

Habe den Vorschlag von _x_ gestestet.

Leider meldet der Compiler folgende Meldung:

Error: Only class methods can be referred with class references

Hausi

hausi
Beiträge: 132
Registriert: Mi 23. Sep 2009, 08:44
OS, Lazarus, FPC: Winux (L 0.9.xy FPC 2.2.z)
CPU-Target: xxBit

Re: LazReport

Beitrag von hausi »

Folgende Einstellung kann ich problemlos kompilieren: (Danke _X_)

Code: Alles auswählen

if printdialog1.execute then
  begin
  frReport1.LoadFromFile('d:\lazprg\arbeit\fritz.lrf');
   frReport1.PrintPreparedReport(inttostr(PrintDialog1.FromPage) + '-' + inttostr(PrintDialog1.ToPage), PrintDialog1.Copies);
     end;
Doch wenn ich drucken will erscheint folgende Fehlermeldung:

List Index(0) out of bounds.

Wenn ich mit showreport die Druckliste aufrufe geht es problemlos.

Hausi

monta
Lazarusforum e. V.
Beiträge: 2809
Registriert: Sa 9. Sep 2006, 18:05
OS, Lazarus, FPC: Linux (L trunk FPC trunk)
CPU-Target: 64Bit
Wohnort: Dresden
Kontaktdaten:

Re: LazReport

Beitrag von monta »

Ich könnte mir vorstellen, das LazReport intern auch bei 0 loszählt, währenddessen der Printdialog bestimmt nicht eine 0te Seite zum Drucken hat.

Hast du mal probiert, wie es geht, wenn du entsprechend eins abziehst, bspw.:

Code: Alles auswählen

frReport1.PrintPreparedReport(inttostr(PrintDialog1.FromPage - 1) + '-' + inttostr(PrintDialog1.ToPage - 1), PrintDialog1.Copies);
(oder eventuell auch +1, einfach mal probiern ;) )
Johannes

hausi
Beiträge: 132
Registriert: Mi 23. Sep 2009, 08:44
OS, Lazarus, FPC: Winux (L 0.9.xy FPC 2.2.z)
CPU-Target: xxBit

Re: LazReport

Beitrag von hausi »

Wenn ich -1 nehme, kommt die Meldung "" is an invalid integer
Wenn ich + 1 nehme, kommt die Meldung out of bound wie vorher

Also habe ich vor dem Druck abgefangen, die Seiten nicht 0 sind.

Code: Alles auswählen

frReport1.LoadFromFile('d:\lazprg\arbeit\fritz.lrf');
  if printdialog1.execute then
  begin
     if printdialog1.frompage < 1 then printdialog1.frompage := 1;
      if printdialog1.ToPage < 1 then printdialog1.ToPage := 1;
     frReport1.PrintPreparedReport(inttostr(PrintDialog1.FromPage) + '-' + inttostr(PrintDialog1.ToPage), PrintDialog1.Copies);
  end;


Aber die Fehlermeldung ist immer die selbe: pout of bound

Hausi

hausi
Beiträge: 132
Registriert: Mi 23. Sep 2009, 08:44
OS, Lazarus, FPC: Winux (L 0.9.xy FPC 2.2.z)
CPU-Target: xxBit

Re: LazReport

Beitrag von hausi »

Ich habe den Inhalt von frompage und topage und copies abgefragt.

bei den Pages ist der Default 0
bei Copies 1

Also habe ich frompage und topage mit 1 abgefüllt, wenn der Inhalt 0 ist.

Nun erscheint folgende Fehlermeldung:

Project raised execption class 'ElistError' with message:
List index(0) out of bounds

Hausi

Antworten