FastReport VCL开发人员手册:自定义报表组件编写
FastReport VCL是用于 Delphi、C++ Builder、RAD Studio 和 Lazarus 的報告和文檔創(chuàng)建 VCL 庫。它提供了可視化模板設計器,可以訪問 30 多種格式,并可以部署到云、網站、電子郵件和打印中。
立即點擊下載FastReport VCL v6.9最新版
FastReport 有大量的組件,可以放在報表設計頁面上。它們是:文本、圖片、線條、幾何圖形、OLE、Rich、條碼、圖表等。您也可以編寫自己的自定義組件,然后將其附加到FastReport。
在 FastReport 中定義了幾個類,從中繼承了組件。有關更多詳細信息,請參閱“ FastReport 類層次結構”一章。這個TfrxView類是我們最感興趣的,因為大多數報表組件都是從它繼承而來的。
至少應該有基本類中Draw定義的方法TfrxReportComponent。
procedure Draw(Canvas: TCanvas; ScaleX, ScaleY, OffsetX, OffsetY: Extended); virtual;
在設計器中、預覽窗口中和輸出打印期間繪制組件時調用此方法。TfrxView覆蓋此方法以繪制對象框架和背景。此方法應該在“Canvas”繪圖表面上繪制組件內容。對象坐標和大小都存儲在AbsLeft,AbsTop,Width和Height相應屬性。
ScaleX 和 ScaleY 參數分別定義 X 軸和 Y 軸上的對象縮放。這些參數在 100% 縮放時等于 1,如果用戶在設計器或預覽窗口中修改縮放,則這些參數可能會有所不同。OffsetX 和 OffsetY 參數通過 X 軸和 Y 軸進行點位移。因此,當考慮這些參數時,左上角坐標如下:
X := Round(AbsLeft * ScaleX + OffsetX);
為了簡化坐標操作,在類中定義了BeginDraw方法(其參數類似于Draw方法)TfrxView
procedure BeginDraw(Canvas: TCanvas; ScaleX, ScaleY, OffsetX, OffsetY: Extended); virtual;
它應該在Draw方法的第一行中調用。此方法將坐標轉換為FX, , FY, FX1, FY1, FDX, FDY,FFrameWidth整數值,以后可以在 TCanvas 方法中使用。此方法還將 Canvas、ScaleX 和 ScaleY 值復制到FCanvas、FScaleX、FScaleY變量中,可以從任何類方法中引用這些變量。
還有兩種為TfrxView類中的對象繪制背景和框架的方法。
BeginDraw 方法應該在調用這些方法之前被調用。
讓我們檢查創(chuàng)建一個將顯示箭頭的組件。
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)建其顯示從一個DB之一的任何數據傳輸應的組件DataSet,DataField屬性分為“發(fā)布”部分,然后重寫GetData方法。讓我們以TfrxCheckBoxView標準組件為例對其進行檢查。
該組件可以通過基本類中聲明的DataSet和DataField屬性連接到 DB 字段TfrxView。此外,該組件具有Expression可放置表達式的屬性。一旦計算出來,結果將被放入Checked屬性中。如果Checked屬性等于“True” ,則此組件顯示一個叉號。您可以在下方看到組件的初始聲明文本(最重要的部分)。
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
總結
以上是生活随笔為你收集整理的FastReport VCL开发人员手册:自定义报表组件编写的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 2022鹏城杯web
- 下一篇: VCL界面组件DevExpress VC