翻譯|使用教程|編輯:楊鵬連|2021-06-29 09:25:03.697|閱讀 230 次
概述:FastReport VCL它提供了可視化模板設(shè)計(jì)器,可以訪問 30 多種格式,并可以部署到云、網(wǎng)站、電子郵件和打印中。本文介紹了FastReport VCL自定義報(bào)表組件編寫。
# 界面/圖表報(bào)表/文檔/IDE等千款熱門軟控件火熱銷售中 >>
相關(guān)鏈接:
FastReport VCL是用于 Delphi、C++ Builder、RAD Studio 和 Lazarus 的報(bào)告和文檔創(chuàng)建 VCL 庫。它提供了可視化模板設(shè)計(jì)器,可以訪問 30 多種格式,并可以部署到云、網(wǎng)站、電子郵件和打印中。
立即點(diǎn)擊下載FastReport VCL v6.9最新版
FastReport 有大量的組件,可以放在報(bào)表設(shè)計(jì)頁面上。它們是:文本、圖片、線條、幾何圖形、OLE、Rich、條碼、圖表等。您也可以編寫自己的自定義組件,然后將其附加到FastReport。
在 FastReport 中定義了幾個(gè)類,從中繼承了組件。有關(guān)更多詳細(xì)信息,請參閱“ FastReport 類層次結(jié)構(gòu)”一章。這個(gè)TfrxView類是我們最感興趣的,因?yàn)榇蠖鄶?shù)報(bào)表組件都是從它繼承而來的。
至少應(yīng)該有基本類中Draw定義的方法TfrxReportComponent。
procedure Draw(Canvas: TCanvas; ScaleX, ScaleY, OffsetX, OffsetY: Extended); virtual;在設(shè)計(jì)器中、預(yù)覽窗口中和輸出打印期間繪制組件時(shí)調(diào)用此方法。TfrxView覆蓋此方法以繪制對象框架和背景。此方法應(yīng)該在“Canvas”繪圖表面上繪制組件內(nèi)容。對象坐標(biāo)和大小都存儲在AbsLeft,AbsTop,Width和Height相應(yīng)屬性。
ScaleX 和 ScaleY 參數(shù)分別定義 X 軸和 Y 軸上的對象縮放。這些參數(shù)在 100% 縮放時(shí)等于 1,如果用戶在設(shè)計(jì)器或預(yù)覽窗口中修改縮放,則這些參數(shù)可能會有所不同。OffsetX 和 OffsetY 參數(shù)通過 X 軸和 Y 軸進(jìn)行點(diǎn)位移。因此,當(dāng)考慮這些參數(shù)時(shí),左上角坐標(biāo)如下:
X := Round(AbsLeft * ScaleX + OffsetX);為了簡化坐標(biāo)操作,在類中定義了BeginDraw方法(其參數(shù)類似于Draw方法)TfrxView
procedure BeginDraw(Canvas: TCanvas; ScaleX, ScaleY, OffsetX, OffsetY: Extended); virtual;它應(yīng)該在Draw方法的第一行中調(diào)用。此方法將坐標(biāo)轉(zhuǎn)換為FX, , FY, FX1, FY1, FDX, FDY,FFrameWidth整數(shù)值,以后可以在 TCanvas 方法中使用。此方法還將 Canvas、ScaleX 和 ScaleY 值復(fù)制到FCanvas、FScaleX、FScaleY變量中,可以從任何類方法中引用這些變量。
還有兩種為TfrxView類中的對象繪制背景和框架的方法。
procedure DrawBackground; procedure DrawFrame;BeginDraw 方法應(yīng)該在調(diào)用這些方法之前被調(diào)用。
讓我們檢查創(chuàng)建一個(gè)將顯示箭頭的組件。
type TfrxArrowView = class(TfrxView) public { we should override only two methods } procedure Draw(Canvas: TCanvas; ScaleX, ScaleY, OffsetX, OffsetY: Extended); override; class function GetDescription: String; override; published { Place required properties into the published section } property BrushStyle; property Color; property Frame; end; class function TfrxArrowView.GetDescription: String; begin { component description will be displayed next to its icon in toolbar } Result := 'Arrow object'; end; procedure TfrxArrowView.Draw(Canvas: TCanvas; ScaleX, ScaleY, OffsetX, OffsetY: Extended); begin { call this method to perform coordinates transformation } BeginDraw(Canvas, ScaleX, ScaleY, OffsetX, OffsetY); with Canvas do begin { set colors } Brush.Color := Color; Brush.Style := BrushStyle; Pen.Width := FFrameWidth; Pen.Color := Frame.Color; { draw arrow } Polygon( [Point(FX, FY + FDY div 4), Point(FX + FDX * 38 div 60, FY + FDY div 4), Point(FX + FDX * 38 div 60, FY), Point(FX1, FY + FDY div 2), Point(FX + FDX * 38 div 60, FY1), Point(FX + FDX * 38 div 60, FY + FDY * 3 div 4), Point(FX, FY + FDY * 3 div 4)]); end; end; { registration } var Bmp: TBitmap; initialization Bmp := TBitmap.Create; Bmp.LoadFromResourceName(hInstance, 'frxArrowView'); frxObjects.RegisterObject(TfrxArrowView, Bmp); finalization { delete component from list of available ones } frxObjects.Unregister(TfrxArrowView); Bmp.Free; end.創(chuàng)建其顯示從一個(gè)DB之一的任何數(shù)據(jù)傳輸應(yīng)的組件DataSet,DataField屬性分為“發(fā)布”部分,然后重寫GetData方法。讓我們以TfrxCheckBoxView標(biāo)準(zhǔn)組件為例對其進(jìn)行檢查。
該組件可以通過基本類中聲明的DataSet和DataField屬性連接到 DB 字段TfrxView。此外,該組件具有Expression可放置表達(dá)式的屬性。一旦計(jì)算出來,結(jié)果將被放入Checked屬性中。如果Checked屬性等于“True” ,則此組件顯示一個(gè)叉號。您可以在下方看到組件的初始聲明文本(最重要的部分)。
TfrxCheckBoxView = class(TfrxView) private FChecked: Boolean; FExpression: String; procedure DrawCheck(ARect: TRect); public procedure Draw(Canvas: TCanvas; ScaleX, ScaleY, OffsetX, OffsetY: Extended); override; procedure GetData; override; published property Checked: Boolean read FChecked write FChecked default True; property DataField; property DataSet; property Expression: String read FExpression write FExpression; end; procedure TfrxCheckBoxView.Draw(Canvas: TCanvas; ScaleX, ScaleY, OffsetX, OffsetY: Extended); begin BeginDraw(Canvas, ScaleX, ScaleY, OffsetX, OffsetY); DrawBackground; DrawCheck(Rect(FX, FY, FX1, FY1)); DrawFrame; end; procedure TfrxCheckBoxView.GetData; begin inherited; if IsDataField then FChecked := DataSet.Value[DataField] else if FExpression <> '' then FChecked := Report.Calc(FExpression); end;
如果您對 FastReport 感興趣,歡迎加入 FastReport QQ 交流群:702295239
還想要更多嗎?您可以點(diǎn)擊閱讀【FastReport報(bào)表2021最新資源盤點(diǎn)】,查找需要的教程資源。上是FastReport .NET慧正在網(wǎng)火熱銷售中!>>查看價(jià)格詳情
本站文章除注明轉(zhuǎn)載外,均為本站原創(chuàng)或翻譯。歡迎任何形式的轉(zhuǎn)載,但請務(wù)必注明出處、不得修改原文相關(guān)鏈接,如果存在內(nèi)容上的異議請郵件反饋至chenjj@fc6vip.cn
文章轉(zhuǎn)載自: