This shows you the differences between two versions of the page.
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:44] 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 ส่วนบรรทัดที่เหลือ เป็นการใส่ข้อมูลให้กับ Array\\ | |
- | - สองบรรทัดแรก เป็นการเปลี่ยน 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 115: | Line 115: | ||
end; | end; | ||
</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:lazreport_runform.png}} | ||
+ | \\ | ||
+ | |||
+ | 8.1 เนื่องจากเรายังไม่ได้ตกแต่งหน้าตา report ใน Design View ดังนั้น ให้กดปุ่ม Button2 ที่ขึ้นข้อความว่า "Edit Design Report" จากนั้นจะมีหน้าต่างแสดง Design View ของ report1.lfr ขึ้นมา ให้จัดรูปแบบ report ตามในรูปข้างล่าง | ||
+ | |||
+ | {{tutorial:lazreport_designpreview.png}} | ||
+ | \\ | ||
+ | |||
+ | {{tutorial:lazreport_designpreviewcompleted.png}} | ||
+ | \\ | ||
+ | |||
+ | 8.2 เนื่องจากเรายังไม่ได้ตกแต่งหน้าตา report ใน | ||
+ | |||
+ | {{tutorial:lazreport_previewcompleted.png}} | ||
\\ | \\ |