This shows you the differences between two versions of the page.
| 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] (current) 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 | ||