User Tools

Site Tools


tutorial:printdatausinglazreport

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Both sides previous revision Previous revision
Next revision
Previous revision
Next revision Both sides next revision
tutorial:printdatausinglazreport [2019/12/29 22:15]
admin
tutorial:printdatausinglazreport [2019/12/29 22:27]
admin
Line 67: Line 67:
 {{tutorial:​lazreport_designerview.png}} {{tutorial:​lazreport_designerview.png}}
 </​hidden>​ </​hidden>​
 +\\
  
 6. พิมพ์คำสั่งเข้าไปใน Event ชื่อ FormCreate ดังนี้ 6. พิมพ์คำสั่งเข้าไปใน Event ชื่อ FormCreate ดังนี้
Line 94: Line 95:
 </​sxh>​ </​sxh>​
 \\ \\
- +6.1 สองบรรทัดแรก เป็นการเปลี่ยน Caption ของ Button1, Button2  
-  - สองบรรทัดแรก เป็นการเปลี่ยน Caption ของ Button1, Button2  +6.2  ​Button1 เราจะกำหนดให้ Button1Click แล้วเรียกหน้าต่าง PrintPreview ของไฟล์ report1.lrf ขึ้นมาโดยใช้คำสั่งดังนี้ ​
-  ​- ​ ​Button1 เราจะกำหนดให้ Button1Click แล้วเรียกหน้าต่าง PrintPreview ของไฟล์ report1.lrf ขึ้นมาโดยใช้คำสั่งดังนี้ ​+
  
 <sxh delphi;> <sxh delphi;>
Line 106: Line 106:
 </​sxh>​ </​sxh>​
 \\ \\
-  -  ​Button2 เราจะกำหนดให้ Button2Click แล้วเรียกหน้าต่าง DesignReport ขึ้นมาเพื่อทำการแก้ใขไฟล์ report1.lrf โดยใช้คำสั่งดังนี้+6.3  ​Button2 เราจะกำหนดให้ Button2Click แล้วเรียกหน้าต่าง DesignReport ขึ้นมาเพื่อทำการแก้ใขไฟล์ report1.lrf โดยใช้คำสั่งดังนี้
  
 <sxh delphi;> <sxh delphi;>
Line 116: Line 116:
 </​sxh>​ </​sxh>​
 \\ \\
 +
 +7. สำหรับการดึงข้อมูลจากโปรแกรม ไปพิมพ์ลงบน report ให้พิมพ์โค๊ดใน Event ที่ชื่อ frReport1GetValue ดังนี้
 +
 +<sxh delphi;>
 +procedure TForm1.frReport1GetValue(const ParName: String; ​
 +var ParValue: Variant);
 +begin
 +  if ParName='​Header'​ then
 +     ​ParValue:​=MyHeader;​
 +  if ParName='​Name'​ then
 +     ​ParValue:​=MyName;​
 +  if ParName='​Language'​ then
 +     ​ParValue:​=MyLanguage;​
 +  if ParName='​Number'​ then
 +     ​ParValue:​=MyNumber; ​ //No need to convert to string
 +  if ParName='​no'​ then
 +     ​ParValue:​=nc;​
 +  if ParName='​Arr1'​ then
 +     ​ParValue:​=ArrData[1,​nc];​
 +  if ParName='​Arr2'​ then
 +     ​ParValue:​=ArrData[2,​nc];​
 +end;   
 +</​sxh>​
 +\\
 +7.1 เนื่องจากเรามีข้อมูลแบบ Array ที่จำเป็นต้องมีตัวช่วยในการดึงข้อมูลแบบซ้ำๆ ให้เขียนโค๊ดลงบน Event ที่เหลือดังต่อไปนี้
 +
 +<sxh delphi;>
 +procedure TForm1.frUserDataset1CheckEOF(Sender:​ TObject; var Eof: Boolean);
 +begin
 +  Eof:​=nc>​length(ArrData[2]);​
 +end;
 +
 +procedure TForm1.frUserDataset1First(Sender:​ TObject);
 +begin
 +  nc:=1;
 +end;
 +
 +procedure TForm1.frUserDataset1Next(Sender:​ TObject);
 +begin
 +  inc(nc);
 +end;   
 +</​sxh>​
 +\\
 +มาถึงตอนนี้ เราจะได้โค๊ดทั้งหมดเป็นดังนี้
 +
 +<hidden Source Code "​Unit1">​
 +<sxh delphi;>
 +unit Unit1;
 +
 +{$mode objfpc}{$H+}
 +
 +interface
 +
 +uses
 +  Classes, SysUtils, FileUtil, LR_Class, LR_DSet, LR_Desgn, Forms, Controls,
 +  Graphics, Dialogs, StdCtrls;
 +
 +type
 +
 +  { TForm1 }
 +
 +  TForm1 = class(TForm)
 +    Button1: TButton;
 +    Button2: TButton;
 +    frDesigner1:​ TfrDesigner;​
 +    frReport1: TfrReport;
 +    frUserDataset1:​ TfrUserDataset;​
 +    procedure Button1Click(Sender:​ TObject);
 +    procedure Button2Click(Sender:​ TObject);
 +    procedure FormCreate(Sender:​ TObject);
 +    procedure frReport1GetValue(const ParName: String; var ParValue: Variant);
 +    procedure frUserDataset1CheckEOF(Sender:​ TObject; var Eof: Boolean);
 +    procedure frUserDataset1First(Sender:​ TObject);
 +    procedure frUserDataset1Next(Sender:​ TObject);
 +  private
 +
 +  public
 +
 +  end;
 +
 +var
 +  Form1: TForm1;
 +  MyHeader:​string = '​INFORMATION';​
 +  MyName:​string = '​Lazarus-IDE';​
 +  MyLanguage:​string = '​Object Pascal';​
 +  MyNumber:​integer = 120;
 +  ArrData:​array[1..2,​1..7] of string;
 +  nc:integer = 1;
 +
 +implementation
 +
 +{$R *.lfm}
 +
 +{ TForm1 }
 +
 +procedure TForm1.FormCreate(Sender:​ TObject);
 +begin
 +  Button1.Caption:​='​Print Preview';​
 +  Button2.Caption:​='​Edit Design Report';​
 +
 +  ArrData[1,​1]:​='​TButton';​
 +  ArrData[1,​2]:​='​TStringgrid';​
 +  ArrData[1,​3]:​='​TToolBar';​
 +  ArrData[1,​4]:​='​TSaveDialog';​
 +  ArrData[1,​5]:​='​TSQLQuery';​
 +  ArrData[1,​6]:​='​TSpinEdit';​
 +  ArrData[1,​7]:​='​TfrReport';​
 +
 +  ArrData[2,​1]:​='​Standard';​
 +  ArrData[2,​2]:​='​Additional';​
 +  ArrData[2,​3]:​='​Common Controls';​
 +  ArrData[2,​4]:​='​Dialogs';​
 +  ArrData[2,​5]:​='​SQLdb';​
 +  ArrData[2,​6]:​='​Misc';​
 +  ArrData[2,​7]:​='​LazReport';​
 +end;
 +
 +procedure TForm1.Button1Click(Sender:​ TObject);
 +begin
 +  frReport1.LoadFromFile('​report1.lrf'​);​
 +  frReport1.ShowReport;​
 +end;
 +
 +procedure TForm1.Button2Click(Sender:​ TObject);
 +begin
 +  frReport1.LoadFromFile('​report1.lrf'​);​
 +  frReport1.DesignReport;​
 +end;
 +
 +procedure TForm1.frReport1GetValue(const ParName: String; var ParValue: Variant
 +  );
 +begin
 +  if ParName='​Header'​ then
 +     ​ParValue:​=MyHeader;​
 +  if ParName='​Name'​ then
 +     ​ParValue:​=MyName;​
 +  if ParName='​Language'​ then
 +     ​ParValue:​=MyLanguage;​
 +  if ParName='​Number'​ then
 +     ​ParValue:​=MyNumber; ​ //No need to convert to string
 +  if ParName='​no'​ then
 +     ​ParValue:​=nc;​
 +  if ParName='​Arr1'​ then
 +     ​ParValue:​=ArrData[1,​nc];​
 +  if ParName='​Arr2'​ then
 +     ​ParValue:​=ArrData[2,​nc];​
 +end;
 +
 +procedure TForm1.frUserDataset1CheckEOF(Sender:​ TObject; var Eof: Boolean);
 +begin
 +  Eof:​=nc>​length(ArrData[2]);​
 +end;
 +
 +procedure TForm1.frUserDataset1First(Sender:​ TObject);
 +begin
 +  nc:=1;
 +end;
 +
 +procedure TForm1.frUserDataset1Next(Sender:​ TObject);
 +begin
 +  inc(nc);
 +end;
 +
 +end.
 +</​sxh>​
 +</​hidden>​
 +\\
 +
 +8. หลังจากตรวจทานโค๊ดทุกบรรทัดให้ถูกต้องแล้ว ให้กด Compile โปรแกรมได้ จะได้หน้าตาโปรแกรมเป็นดังนี้
 + 
tutorial/printdatausinglazreport.txt · Last modified: 2019/12/29 23:24 by admin