git-svn-id: https://192.168.0.254/svn/Componentes.Terceros.FastReport@22 475b051d-3a53-6940-addd-820bf0cfe0d7
187 lines
4.7 KiB
ObjectPascal
187 lines
4.7 KiB
ObjectPascal
{******************************************}
|
|
{ }
|
|
{ FastReport 4 }
|
|
{ Converter from QuickReport }
|
|
{ }
|
|
{ Copyright (c) 2007-2008 }
|
|
{ by Serg Puhoff }
|
|
{ Fast Reports Inc. }
|
|
{ }
|
|
{ }
|
|
{******************************************}
|
|
|
|
//
|
|
// Using:
|
|
// conv := TConverterQr2Fr.Create;
|
|
// conv.Source := QuickRep1;
|
|
// conv.Target := FReport;
|
|
// conv.Convert;
|
|
// FReport.SaveToFile('converted_fromQR.fr3');
|
|
//
|
|
|
|
unit ConverterQR2FR;
|
|
|
|
interface
|
|
|
|
uses frxClass, QuickRpt;
|
|
|
|
type
|
|
TConverterQr2Fr = class
|
|
private
|
|
FTarget: TfrxReport;
|
|
FSource: TQuickRep;
|
|
protected
|
|
procedure CreateMainBands;
|
|
procedure CreateCustomBand(const ABand: TQRCustomband);
|
|
procedure AddObjects(const ABand: TQRCustomband; const Band: TfrxBand);
|
|
public
|
|
property Source: TQuickRep read FSource write FSource;
|
|
property Target: TfrxReport read FTarget write FTarget;
|
|
|
|
procedure Convert;
|
|
end;
|
|
|
|
implementation
|
|
|
|
uses SysUtils, Controls, QrPrntr, Classes, QRCtrls, frxRich;
|
|
|
|
|
|
{ TConverterQr2Fr }
|
|
|
|
procedure TConverterQr2Fr.AddObjects(const ABand: TQRCustomband;
|
|
const Band: TfrxBand);
|
|
var
|
|
i: integer;
|
|
|
|
Memo: TfrxMemoView;
|
|
Rich: TfrxRichView;
|
|
Shape: TfrxShapeView;
|
|
Image: TfrxPictureView;
|
|
|
|
Lbl: TQRCustomLabel;
|
|
Rt: TQRRichText;
|
|
Sh: TQRShape;
|
|
Img: TQRImage;
|
|
begin
|
|
for i:= 0 to ABand.ControlCount - 1 do
|
|
|
|
if ABand.Controls[i] is TQRCustomLabel then
|
|
begin
|
|
Lbl := ABand.Controls[i] as TQRCustomLabel;
|
|
Memo := TfrxMemoView.Create(Band);
|
|
Memo.CreateUniqueName;
|
|
if Lbl.Caption = '' then
|
|
Memo.Memo.Text := Lbl.Lines.Text
|
|
else
|
|
Memo.Memo.Text := Lbl.Caption;
|
|
Memo.Font.Assign(Lbl.Font);
|
|
Memo.SetBounds(Lbl.Left, Lbl.Top, Lbl.Width, Lbl.Height);
|
|
end
|
|
|
|
else
|
|
|
|
if ABand.Controls[i] is TQRRichText then
|
|
begin
|
|
Rt := ABand.Controls[i] as TQRRichText;
|
|
Rich := TfrxRichView.Create(Band);
|
|
Rich.RichEdit.Lines.Assign(Rt.Lines);
|
|
Rich.CreateUniqueName;
|
|
Rich.RichEdit.Font.Assign(Rt.Font);
|
|
Rich.Color := Rt.Color;
|
|
Rich.SetBounds(Rt.Left, Rt.Top, Rt.Width, Rt.Height);
|
|
end
|
|
|
|
else
|
|
|
|
if ABand.Controls[i] is TQRShape then
|
|
begin
|
|
Sh := ABand.Controls[i] as TQRShape;
|
|
Shape := TfrxShapeView.Create(Band);
|
|
Shape.CreateUniqueName;
|
|
case Sh.Shape of
|
|
qrsRectangle: Shape.Shape := skRectangle;
|
|
qrsCircle: Shape.Shape := skEllipse;
|
|
qrsRoundRect: Shape.Shape := skRoundRectangle;
|
|
end;
|
|
Shape.SetBounds(Sh.Left, Sh.Top, Sh.Width, Sh.Height);
|
|
end
|
|
|
|
else
|
|
|
|
if ABand.Controls[i] is TQRImage then
|
|
begin
|
|
Img := ABand.Controls[i] as TQRImage;
|
|
Image := TfrxPictureView.Create(Band);
|
|
Image.CreateUniqueName;
|
|
Image.Picture.Assign(Img.Picture);
|
|
Image.SetBounds(Img.Left, Img.Top, Img.Width, Img.Height);
|
|
end;
|
|
|
|
end;
|
|
|
|
procedure TConverterQr2Fr.Convert;
|
|
begin
|
|
if not Assigned(Source) then
|
|
raise Exception.Create('Source not assigned');
|
|
if not Assigned(Target) then
|
|
raise Exception.Create('Target not assigned');
|
|
|
|
Target.Clear;
|
|
CreateMainBands;
|
|
end;
|
|
|
|
procedure TConverterQr2Fr.CreateCustomBand(const ABand: TQRCustomBand);
|
|
var
|
|
Band: TfrxBand;
|
|
begin
|
|
if ABand.BandType = rbPageHeader then
|
|
Band := TfrxPageHeader.Create(Target.Pages[0])
|
|
else
|
|
if ABand.BandType = rbPageFooter then
|
|
Band := TfrxPageFooter.Create(Target.Pages[0])
|
|
else
|
|
if ABand.BandType = rbTitle then
|
|
Band := TfrxHeader.Create(Target.Pages[0])
|
|
else
|
|
if ABand.BandType = rbChild then
|
|
Band := TfrxChild.Create(Target.Pages[0])
|
|
else
|
|
if ABand.BandType = rbColumnHeader then
|
|
Band := TfrxColumnHeader.Create(Target.Pages[0])
|
|
else
|
|
if ABand.BandType = rbGroupHeader then
|
|
Band := TfrxGroupHeader.Create(Target.Pages[0])
|
|
else
|
|
if ABand.BandType = rbGroupFooter then
|
|
Band := TfrxGroupFooter.Create(Target.Pages[0])
|
|
else
|
|
if ABand.BandType = rbDetail then
|
|
Band := TfrxDetailData.Create(Target.Pages[0])
|
|
else
|
|
Exit;
|
|
|
|
Band.CreateUniqueName;
|
|
|
|
Band.Top := ABand.Top;
|
|
Band.Height := ABand.Height;
|
|
|
|
AddObjects(ABand, Band);
|
|
end;
|
|
|
|
procedure TConverterQr2Fr.CreateMainBands;
|
|
var
|
|
Page: TfrxReportPage;
|
|
i: integer;
|
|
begin
|
|
Page := TfrxReportPage.Create(Target);
|
|
Page.CreateUniqueName;
|
|
Page.SetDefaults;
|
|
|
|
for i := 0 to Source.BandList.Count - 1 do
|
|
CreateCustomBand(TQRCustomBand(Source.BandList[i]));
|
|
end;
|
|
end.
|
|
|
|
|
|
//
|