{ Powerpdf DBExample ported manually to Lazarus. Source file is copied from original delphi example. cvs-file is taken from lazarusexamples\ConsoleProgramDemo } unit UDBExample; {$mode objfpc}{$H+} interface uses Classes, SysUtils, csvdataset, DB, Forms, Controls, Graphics, Dialogs, Menus, PReport; type { TForm1 } TForm1 = class(TForm) MainMenu1: TMainMenu; miFile: TMenuItem; miHelp: TMenuItem; miCreatePDF: TMenuItem; miExit: TMenuItem; miAbout: TMenuItem; N1: TMenuItem; PReport1: TPReport; PRGridPanel1: TPRGridPanel; PRLayoutPanel1: TPRLayoutPanel; PRLayoutPanel2: TPRLayoutPanel; PRPage1: TPRPage; PRRect1: TPRRect; PRRect2: TPRRect; PRText1: TPRText; PRText2: TPRText; PRText3: TPRText; PRText4: TPRText; PRText5: TPRText; PRText6: TPRText; SaveDialog1: TSaveDialog; ScrollBox1: TScrollBox; Table1: TCSVDataset; TxtAddr: TPRText; TxtCity: TPRText; TxtCompany: TPRText; TxtCustNo: TPRText; TxtState: TPRText; procedure FormCreate(Sender: TObject); procedure miAboutClick(Sender: TObject); procedure miCreatePDFClick(Sender: TObject); procedure miExitClick(Sender: TObject); procedure PRGridPanel1BeforePrintChild(Sender: TObject; ACanvas: TPRCanvas; ACol, ARow: integer; Rect: TRect); private public end; var Form1: TForm1; implementation {$R *.lfm} { TForm1 } procedure TForm1.FormCreate(Sender: TObject); begin Table1.LoadFromFile(ExtractFilePath(Application.ExeName)+'customer.csv'); PRPage1.Visible := false; end; procedure TForm1.miAboutClick(Sender: TObject); begin ShowMessage(POWER_PDF_VERSION_STR + #13#10 + POWER_PDF_COPYRIGHT); end; procedure TForm1.miExitClick(Sender: TObject); begin Close; end; procedure TForm1.miCreatePDFClick(Sender: TObject); begin if SaveDialog1.Execute then begin Screen.Cursor := crHourGlass; Application.ProcessMessages; TxtCustNo.Printable := true; TxtCompany.Printable := true; TxtAddr.Printable := true; TxtCity.Printable := true; TxtState.Printable := true; try with PReport1 do begin FileName := SaveDialog1.FileName; // starting printing document. BeginDoc; Table1.Open; while not Table1.Eof do Print(PRPage1); // save document. EndDoc; Table1.Close; end; finally Screen.Cursor := crDefault; end; end; end; procedure TForm1.PRGridPanel1BeforePrintChild(Sender: TObject; ACanvas: TPRCanvas; ACol, ARow: integer; Rect: TRect); begin with Table1 do if not Table1.Eof then begin // setting text from current record. TxtCustNo.Text := Table1.Fields[0].AsString; TxtCompany.Text := Table1.Fields[1].AsString; TxtAddr.Text := Table1.Fields[4].AsString; TxtCity.Text := Table1.Fields[3].AsString; TxtState.Text := Table1.Fields[2].AsString; // move next current record. Table1.Next; end else begin TxtCustNo.Printable := false; TxtCompany.Printable := false; TxtAddr.Printable := false; TxtCity.Printable := false; TxtState.Printable := false; end; end; end.