Lazarus 3.0 (2023.12.21.)
Letöltés

  • Oldal:
  • 1

TÉMA:

Lazreport PrintDialog (példányszám) 2015 dec. 04 13:42 #1642

  • makgab
  • makgab profilkép Témaindító
  • Törzsgárda tag
  • Törzsgárda tag
  • Hozzászólások: 280
  • Köszönetek: 1

JohnnyK írta: A példányszámokhoz a ciklusos megoldás fog szerintem működni. A ciklus belsejében kell meghívni a PrepareReport és a PrintPreparedReport eljárásokat is. A ciklusban növelnéd a COPY változóhoz tartozó értéket, amit az frReportGetValue eljárásban rendelsz hozzá.


Igen, köszönöm. Így tettem. :)

Lazreport PrintDialog (példányszám) 2015 dec. 04 13:40 #1641

  • JohnnyK
  • JohnnyK profilkép
  • Haladó forumozó
  • Haladó forumozó
  • Hozzászólások: 78
  • Köszönetek: 16
A példányszámokhoz a ciklusos megoldás fog szerintem működni. A ciklus belsejében kell meghívni a PrepareReport és a PrintPreparedReport eljárásokat is. A ciklusban növelnéd a COPY változóhoz tartozó értéket, amit az frReportGetValue eljárásban rendelsz hozzá.

Lazreport PrintDialog (példányszám) 2015 dec. 04 13:25 #1640

  • makgab
  • makgab profilkép Témaindító
  • Törzsgárda tag
  • Törzsgárda tag
  • Hozzászólások: 280
  • Köszönetek: 1

me írta: ...
"frReport1.PrintPreparedReport(IntToStr(KezdoLap) + '-' + IntToStr(UtolsoLap), MasolatokSzama);"
részt egy ciklusba tegyem?


Ez nem működik. De a frReport1.PrepareReport előtt kell beállítani. Akkor jó lesz. :)

Lazreport PrintDialog (példányszám) 2015 dec. 04 10:50 #1639

  • makgab
  • makgab profilkép Témaindító
  • Törzsgárda tag
  • Törzsgárda tag
  • Hozzászólások: 280
  • Köszönetek: 1

Gábor írta:

ElsoLap := 1;
UtolsoLap := 1;
MasolatokSzama := 1;
frReport1.PrintPreparedReport(IntToStr(KezdoLap) + '-' + IntToStr(UtolsoLap), MasolatokSzama);


Azt hogyan célszerű megadni, hogy a nyomtatáskor a példányszámot is rá tudjam írni a reportra?
Tehát definiáltam egy változót a report-ban, pl. COPY
Azt szeretném, hogy az első példány esetén "1. példány", a második esetén "2. példány" szöveget küldeném bele a COPY változóba.
Vagy a
frReport1.PrintPreparedReport(IntToStr(KezdoLap) + '-' + IntToStr(UtolsoLap), MasolatokSzama);
részt egy ciklusba tegyem?
A frReportGetValue(const ParName: String; var ParValue: Variant) mikor hívódik meg? Minden report futáskor és nyomtatáskor is?

Lazreport PrintDialog (példányszám) 2015 nov. 30 18:31 #1615

  • makgab
  • makgab profilkép Témaindító
  • Törzsgárda tag
  • Törzsgárda tag
  • Hozzászólások: 280
  • Köszönetek: 1
köszönöm.

Lazreport PrintDialog (példányszám) 2015 nov. 30 18:20 #1614

  • Gábor
  • Gábor profilkép
  • Adminisztrátor
  • Adminisztrátor
  • Hozzászólások: 499
  • Köszönetek: 86
A TPrinterDialog, a TOpenDialog és a többi is csak általános felületet biztosít az aktuális operációs rendszeren elérhető adott célú ablakokhoz.

Szerintem készíts egy saját ablakot a nyomtató kiválasztására, melyben a rendszeren elérhetőnek ítélt nyomtatók (Printers unit / TPrinter.Printers:TStrings) közül választhat a felhasználó.
Ez után már futtathatod az frReport1.PrintPreparedReport parancsot:
ElsoLap := 1;
UtolsoLap := 1;
MasolatokSzama := 1;
frReport1.PrintPreparedReport(IntToStr(KezdoLap) + '-' + IntToStr(UtolsoLap), MasolatokSzama);
Hogyan kérdezzünk okosan? / Mit kell tennünk kérdezés előtt? -- Lazarus 3.0 -- FPC 3.2-- GNU/Linux 5.15.0 x86_64

Lazreport PrintDialog (példányszám) 2015 nov. 30 15:31 #1612

  • makgab
  • makgab profilkép Témaindító
  • Törzsgárda tag
  • Törzsgárda tag
  • Hozzászólások: 280
  • Köszönetek: 1
Üdv!
A lazreportot ki szeretném nyomtatni, akkor printdialog komponenssel engedem a usernek, hogy válasszon nyomtatót.
A Lazarus example szerint:
procedure TForm1.printBtnClick(Sender: TObject);
var
  FromPage, ToPage, NumberCopies: Integer;
  ind: Integer;
  Collap: Boolean;
begin
  // printing
 
  // Load report definition from application directory
  //  AppDirectory:=ExtractFilePath(ParamStr(0));
  frReport1.LoadFromFile('lazrep1.lrf');
  // Need to keep track of which printer was originally selected to check for user changes
  //  ind:= Printer.PrinterIndex;
  // Prepare the report and just stop if we hit an error as continuing makes no sense
  if not frReport1.PrepareReport then Exit;
  // Set up dialog with some sensible defaults which user can change
  with PrintDialog1 do
  begin
    Options:=[poPageNums ]; // allows selecting pages/page numbers
    Copies:=1;
    Collate:=true; // ordened copies
    FromPage:=1; // start page
    ToPage:=frReport1.EMFPages.Count; // last page
    MaxPage:=frReport1.EMFPages.Count; // maximum allowed number of pages
    if Execute then // show dialog; if succesful, process user feedback
    begin
      if (Printer.PrinterIndex <> ind ) // verify if selected printer has changed
        or frReport1.CanRebuild // ... only makes sense if we can reformat the report
        or frReport1.ChangePrinter(ind, Printer.PrinterIndex) //... then change printer
        then
        frReport1.PrepareReport //... and reformat for new printer
      else
        exit; // we couldn't honour the printer change
 
      if PrintDialog1.PrintRange = prPageNums then // user made page range selection
      begin
        FromPage:=PrintDialog1.FromPage; // first page
        ToPage:=PrintDialog1.ToPage;  // last page
      end;
      NumberCopies:=PrintDialog1.Copies; // number of copies
      // Print the report using the supplied pages & copies
      frReport1.PrintPreparedReport(inttostr(FromPage)+'-'+inttostr(ToPage), NumberCopies);
    end;
  end;
end;

Ez oké is, de hiába adja meg kódban, hogy "PrintDialog1.Copies:=1" a printdialógban lehet állítani a példányszámot.
Lehet ezt valahogy rögzíteni? Hogy a printdialógban ne tudjon a user többet nyomtatni, mint amennyit megadok?

  • Oldal:
  • 1