Question
“How can I dynamically create and configure a TextPipeline to print from data that I generate at runtime?”
Solution
This example first generates a text file containing sample data, then dynamically creates and configures a TextPipeline to access the text file.
Download: TextPipeDynamicFile.zip
Sample Delphi code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 |
{------------------------------------------------------------------------------} { TForm1.FormCreate } procedure TForm1.FormCreate(Sender: TObject); var lsFileName: String; begin {assign the file name (ex. current directory + myDataFile.txt)} lsFileName := ExtractFilePath(ParamStr(0)) + 'myDataFile.txt'; {create the data and save it to the file} CreateDataFile(lsFileName); {create textpipeline} myTextPipeline := TppTextPipeline.Create(Self); {assign the file name } myTextPipeline.FileName := lsFileName; {define the field's in order: FieldName, DataType, FieldLength (i.e. max length) } myTextPipeline.DefineField('Company', dtString, 30); myTextPipeline.DefineField('Contact', dtString, 20); myTextPipeline.DefineField('Phone', dtString, 15); myTextPipeline.DefineField('Addr1', dtString, 30); myTextPipeline.DefineField('City', dtString, 15); myTextPipeline.DefineField('State', dtString, 20); end; {------------------------------------------------------------------------------} { TForm1.CreateDataFile } procedure TForm1.CreateDataFile(aFileName: String); var lStringList: TStringList; liRecord: Integer; lsRecord: String; begin lStringList := TStringList.Create; for liRecord := 1 to 500 do begin lsRecord := CreateRecord(liRecord); lStringList.Add(lsRecord); end; {save the data to a text file} lStringList.SaveToFile(aFileName); lStringList.Free; end; {------------------------------------------------------------------------------} { TForm1.CreateRecord } function TForm1.CreateRecord(aRecordNo: Integer): String; var lcDelimiter: Char; lsRecordNo: String; begin lcDelimiter := ','; {comma delimiter } lsRecordNo := IntToStr(aRecordNo); Result := ('Company-' + lsRecordNo + lcDelimiter + 'Contact-' + lsRecordNo + lcDelimiter + 'Phone-' + lsRecordNo + lcDelimiter + 'Addr1-' + lsRecordNo + lcDelimiter + 'City-' + lsRecordNo + lcDelimiter + 'State-' + lsRecordNo ); end; {------------------------------------------------------------------------------} { TForm1.Button1Click } procedure TForm1.Button1Click(Sender: TObject); begin ppReport1.DataPipeline := myTextPipeline; ppReport1.Print; end; |