FastReport_FMX_2.8.12/Source/FMX.ConverterFR3toFRFMX.pas

174 lines
5.3 KiB
ObjectPascal
Raw Permalink Normal View History

2024-01-10 21:50:38 +01:00
{******************************************}
{ }
{ FastReport v4.0 }
{ RB -> FR importer }
{ }
{ Copyright (c) 1998-2008 }
{ Fast Reports Inc. }
{ }
{******************************************}
unit FMX.ConverterFR3toFRFMX ;
interface
{$I frx.inc}
implementation
uses
System.SysUtils, System.Classes, FMX.Types, System.UITypes,
FMX.frxClass, FMX.frxVariables, FMX.frxDCtrl,
{$IFDEF LINUX}
{$I tee.inc}
{$IFDEF TeeChartPro}
FMX.frxChart,
{$ENDIF}
{$ELSE}
FMX.frxChart,
{$ENDIF}
FMX.frxCross, System.Variants, FMX.frxGradient;
type
TfrxCustomCrossViewHack = class(TfrxCustomCrossView);
TfrxConverterEventsNew = class(TObject)
private
procedure DoAfterLoad(Sender: TfrxReport);
function DoLoad(Sender: TfrxReport; Stream: TStream): Boolean;
end;
var
frxConverterEventsNew: TfrxConverterEventsNew;
function RGB(r, g, b: Byte): TAlphaColor; inline;
begin
Result := (r or (g shl 8) or (b shl 16));
end;
procedure ToRGB(Color: TAlphaColor; var r, g, b: Byte); inline;
begin
r := Color and $000000ff;
g := (Color shr 8) and $000000ff;
b := (Color shr 16) and $000000ff;
end;
function ColorToAlphaColor(Color: TAlphaColor): TAlphaColor; inline;
var
R, G, B : BYTE;
begin
ToRGB(Color, R, G, B);
Result := RGB(B, G, R) or $FF000000;
end;
procedure ConvertViewObj(View: TfrxView);
begin
if View.Color = $1FFFFFFF then View.Color := 0
else if(View.Color <> 0) then
begin
View.Color := ColorToAlphaColor(View.Color);
end;
View.Font.Color := ColorToAlphaColor(View.Font.Color);
View.Frame.Color := ColorToAlphaColor(View.Frame.Color);
View.Frame.LeftLine.Color := ColorToAlphaColor(View.Frame.LeftLine.Color);
View.Frame.RightLine.Color := ColorToAlphaColor(View.Frame.LeftLine.Color);
View.Frame.TopLine.Color := ColorToAlphaColor(View.Frame.LeftLine.Color);
View.Frame.BottomLine.Color := ColorToAlphaColor(View.Frame.LeftLine.Color);
end;
procedure ConvertMemoView(Memo: TfrxCustomMemoView);
begin
ConvertViewObj(Memo);
Memo.Highlight.Color := ColorToAlphaColor(Memo.Highlight.Color);
end;
procedure CorrectProperties(Report: TfrxReport);
var
i, j: Integer;
Obj: TObject;
ObjList: TList;
begin
for i := 0 to Report.AllObjects.Count - 1 do
begin
Obj := Report.AllObjects[i];
if Obj is TfrxView then
begin
ConvertViewObj(TfrxView(Obj));
end;
if Obj is TfrxCustomMemoView then
TfrxCustomMemoView(Obj).Highlight.Color := ColorToAlphaColor(TfrxCustomMemoView(Obj).Highlight.Color);
if Obj is TfrxGradientView then
begin
TfrxGradientView(Obj).BeginColor := ColorToAlphaColor(TfrxGradientView(Obj).BeginColor);
TfrxGradientView(Obj).EndColor := ColorToAlphaColor(TfrxGradientView(Obj).EndColor);
end;
if Obj is TfrxCustomCrossView then
begin
ObjList := TfrxCustomCrossViewHack(Obj).GetNestedObjects;
try
for j := 0 to ObjList.Count - 1 do
if TObject(ObjList[j]) is TfrxView then ConvertViewObj(TfrxView(ObjList[j]));
finally
ObjList.Free;
end;
ObjList := TfrxCustomCrossViewHack(Obj).FCellMemos;
for j := 0 to ObjList.Count - 1 do
if TObject(ObjList[j]) is TfrxCustomMemoView then ConvertMemoView(TfrxCustomMemoView(ObjList[j]));
ObjList := TfrxCustomCrossViewHack(Obj).FCellHeaderMemos;
for j := 0 to ObjList.Count - 1 do
if TObject(ObjList[j]) is TfrxCustomMemoView then ConvertMemoView(TfrxCustomMemoView(ObjList[j]));
ObjList := TfrxCustomCrossViewHack(Obj).FColumnMemos;
for j := 0 to ObjList.Count - 1 do
if TObject(ObjList[j]) is TfrxCustomMemoView then ConvertMemoView(TfrxCustomMemoView(ObjList[j]));
ObjList := TfrxCustomCrossViewHack(Obj).FColumnTotalMemos;
for j := 0 to ObjList.Count - 1 do
if TObject(ObjList[j]) is TfrxCustomMemoView then ConvertMemoView(TfrxCustomMemoView(ObjList[j]));
ObjList := TfrxCustomCrossViewHack(Obj).FCornerMemos;
for j := 0 to ObjList.Count - 1 do
if TObject(ObjList[j]) is TfrxCustomMemoView then ConvertMemoView(TfrxCustomMemoView(ObjList[j]));
ObjList := TfrxCustomCrossViewHack(Obj).FRowMemos;
for j := 0 to ObjList.Count - 1 do
if TObject(ObjList[j]) is TfrxCustomMemoView then ConvertMemoView(TfrxCustomMemoView(ObjList[j]));
ObjList := TfrxCustomCrossViewHack(Obj).FRowTotalMemos;
for j := 0 to ObjList.Count - 1 do
if TObject(ObjList[j]) is TfrxCustomMemoView then ConvertMemoView(TfrxCustomMemoView(ObjList[j]));
end;
end;
end;
procedure TfrxConverterEventsNew.DoAfterLoad(Sender: TfrxReport);
begin
if not Sender.ReportOptions.IsFMXReport then
CorrectProperties(Sender);
Sender.ReportOptions.IsFMXReport := True;
end;
function TfrxConverterEventsNew.DoLoad(Sender: TfrxReport;
Stream: TStream): Boolean;
begin
Sender.ReportOptions.IsFMXReport := False;
Result := False;
end;
initialization
frxConverterEventsNew := TfrxConverterEventsNew.Create;
frxConverter.OnAfterLoad := frxConverterEventsNew.DoAfterLoad;
frxConverter.OnLoad := frxConverterEventsNew.DoLoad;
frxConverter.Filter := '*.fr3';
finalization
frxConverterEventsNew.Free;
end.