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
tutorial:printdatausinglazreport [2019/12/29 22:21]
admin
tutorial:printdatausinglazreport [2019/12/29 23:24]
admin
Line 95: Line 95:
 </​sxh>​ </​sxh>​
 \\ \\
- +6.1 สองบรรทัดแรก เป็นการเปลี่ยน Caption ของ Button1, Button2 ​ส่วนบรรทัดที่เหลือ เป็นการใส่ข้อมูลให้กับ Array\\ 
-  ​6.1 สองบรรทัดแรก เป็นการเปลี่ยน Caption ของ Button1, Button2  +6.2 สำหรับ ​Button1 เราจะกำหนดให้ Button1Click แล้วเรียกหน้าต่าง PrintPreview ของไฟล์ report1.lrf ขึ้นมาโดยใช้คำสั่งดังนี้ ​
-  6.2  Button1 เราจะกำหนดให้ Button1Click แล้วเรียกหน้าต่าง PrintPreview ของไฟล์ report1.lrf ขึ้นมาโดยใช้คำสั่งดังนี้ ​+
  
 <sxh delphi;> <sxh delphi;>
Line 107: Line 106:
 </​sxh>​ </​sxh>​
 \\ \\
-  ​6.3  Button2 เราจะกำหนดให้ Button2Click แล้วเรียกหน้าต่าง DesignReport ขึ้นมาเพื่อทำการแก้ใขไฟล์ report1.lrf โดยใช้คำสั่งดังนี้+6.3 สำหรับ ​Button2 เราจะกำหนดให้ Button2Click แล้วเรียกหน้าต่าง DesignReport ขึ้นมาเพื่อทำการแก้ใขไฟล์ report1.lrf โดยใช้คำสั่งดังนี้
  
 <sxh delphi;> <sxh delphi;>
Line 121: Line 120:
  
 <sxh delphi;> <sxh delphi;>
-procedure TForm1.frReport1GetValue(const ParName: String; var ParValue: Variant);+procedure TForm1.frReport1GetValue(const ParName: String; ​ 
 +var ParValue: Variant);
 begin begin
   if ParName='​Header'​ then   if ParName='​Header'​ then
Line 140: Line 140:
 </​sxh>​ </​sxh>​
 \\ \\
- +7.1 เนื่องจากเรามีข้อมูลแบบ Array ที่จำเป็นต้องมีตัวช่วยในการดึงข้อมูลแบบซ้ำๆ ให้เขียนโค๊ดลงบน Event ที่เหลือดังต่อไปนี้
-  ​7.1 เนื่องจากเรามีข้อมูลแบบ Array ที่จำเป็นต้องมีตัวช่วยในการดึงข้อมูลแบบซ้ำๆ ให้เขียนโค๊ดลงบน Event ที่เหลือดังต่อไปนี้+
  
 <sxh delphi;> <sxh delphi;>
Line 160: Line 159:
 </​sxh>​ </​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:​lazreport_runform.png}}
 +\\
 +
 +8.1 เนื่องจากเรายังไม่ได้ตกแต่งหน้าตา report ใน Design View ดังนั้น ให้กดปุ่ม Button2 ที่ขึ้นข้อความว่า "Edit Design Report"​ จากนั้นจะมีหน้าต่างแสดง Design View ของ report1.lfr ขึ้นมา ให้จัดรูปแบบ report ตามในรูปข้างล่าง
 +
 +{{tutorial:​lazreport_designpreview.png}}
 +\\
 +
 +<hidden ภาพรายละเอียดของ Design Report>
 +{{tutorial:​lazreport_designpreviewcompleted.png}}
 +</​hidden>​
 +\\
 +
 +**__หมายเหตุ__** - หากเราลืมใส่ Control ที่ชื่อว่า frDesigner1 ลงบน Form ในตอนแรก จะทำให้ไม่สามารถแสดง Design View ด้วยการกดปุ่ม ฺButton2 ดังกล่าวได้ ดังนั้นจึงไม่ควรลืมใส่ frDesigner1 เด็ดขาด \\
 +
 +เมื่อแก้ใข report เสร็จแล้ว ควรกดปุ่ม save ทุกครั้ง
 +
 +8.2 หลังจากจัดการ report เสร็จเรียบร้อย สามารถเรียกดู Print Preview ได้จากการ click ปุ่ม Button1 จะมีหน้าต่าง Print Preview ขึ้นมาดังรูปข้างล่าง  ​
 +
 +{{tutorial:​lazreport_previewcompleted.png}}
 +\\
 +
 +**__หมายเหตุ__** - เราสามารถสั่งพิมพ์ report ดังกล่าวได้โดย click ที่รูป Printer ​
tutorial/printdatausinglazreport.txt · Last modified: 2019/12/29 23:24 by admin