FastReport_2022_VCL/Demos/MDI Designer/MAIN.PAS
2024-01-01 16:13:08 +01:00

195 lines
4.6 KiB
Plaintext

unit MAIN;
interface
uses Windows, SysUtils, Classes, Graphics, Forms, Controls, Menus,
StdCtrls, Dialogs, Buttons, Messages, ExtCtrls, ComCtrls, StdActns,
ActnList, ToolWin, ImgList, frxClass, frxDesgn;
type
TfrxReportList = class(TObject)
private
FReportList: TList;
function GetReport(Index: Integer): TfrxReport;
function GetCount: Integer;
public
constructor Create;
destructor Destroy; override;
procedure ClearList;
procedure Delete(Index: Integer);
function CreateNewReport: TfrxReport;
function IndexOf(Report: TfrxReport): Integer;
property Report [Index: Integer]: TfrxReport read GetReport;
property Count: Integer read GetCount;
end;
TMainForm = class(TForm)
StatusBar: TStatusBar;
ActionList1: TActionList;
FileNew1: TAction;
FileSave1: TAction;
FileExit1: TAction;
WindowCascade1: TWindowCascade;
WindowTileHorizontal1: TWindowTileHorizontal;
WindowArrangeAll1: TWindowArrange;
WindowMinimizeAll1: TWindowMinimizeAll;
WindowTileVertical1: TWindowTileVertical;
ToolBar2: TToolBar;
ToolButton2: TToolButton;
ToolButton3: TToolButton;
ToolButton9: TToolButton;
ToolButton8: TToolButton;
ToolButton10: TToolButton;
ToolButton11: TToolButton;
ImageList1: TImageList;
ToolButton1: TToolButton;
ToolButton5: TToolButton;
PreviewReport: TAction;
MainMenu1: TMainMenu;
procedure FileNew1Execute(Sender: TObject);
procedure FileExit1Execute(Sender: TObject);
procedure FormCreate(Sender: TObject);
procedure FormDestroy(Sender: TObject);
procedure DestroyDesigner(Sender: TObject);
procedure FormClose(Sender: TObject; var Action: TCloseAction);
procedure FileSave1Execute(Sender: TObject);
procedure PreviewReportExecute(Sender: TObject);
private
{ Private declarations }
FReportList: TfrxReportList;
public
{ Public declarations }
end;
var
MainForm: TMainForm;
implementation
{$R *.dfm}
{ TfrxReportList }
procedure TfrxReportList.ClearList;
begin
while FReportList.Count > 0 do
begin
TfrxReport(FReportList[0]).Free;
FReportList.Delete(0);
end;
end;
constructor TfrxReportList.Create;
begin
inherited;
FReportList := TList.Create;
end;
function TfrxReportList.CreateNewReport: TfrxReport;
begin
Result := TfrxReport.Create(nil);
Result.CreateUniqueName;
Result.PreviewOptions.MDIChild := True;
Result.PreviewOptions.Modal := False;
Result.EngineOptions.DestroyForms := False;
FReportList.Add(Result);
end;
procedure TfrxReportList.Delete(Index: Integer);
begin
if (Index < 0) or (Index >= FReportList.Count) then
exit;
TfrxReport(FReportList[Index]).Free;
FReportList.Delete(Index);
end;
destructor TfrxReportList.Destroy;
begin
ClearList;
FReportList.Free;
inherited;
end;
function TfrxReportList.GetCount: Integer;
begin
Result := FReportList.Count;
end;
function TfrxReportList.GetReport(Index: Integer): TfrxReport;
begin
if (Index < 0) or (Index >= FReportList.Count) then
Result := nil
else
Result := TfrxReport(FReportList[Index]);
end;
function TfrxReportList.IndexOf(Report: TfrxReport): Integer;
begin
Result := FReportList.IndexOf(Report);
end;
{Main Form}
procedure TMainForm.FileNew1Execute(Sender: TObject);
begin
with FReportList.CreateNewReport do
begin
DesignReport(False, True);
TfrxDesignerForm(Designer).OnDestroy := DestroyDesigner;
TfrxDesignerForm(Designer).Caption := 'Designer-' + IntToStr(FReportList.Count);
end;
end;
procedure TMainForm.FileExit1Execute(Sender: TObject);
begin
Close;
end;
procedure TMainForm.FormCreate(Sender: TObject);
begin
FReportList := TfrxReportList.Create;
end;
procedure TMainForm.FormDestroy(Sender: TObject);
begin
FReportList.Free;
end;
procedure TMainForm.DestroyDesigner(Sender: TObject);
var
idx: Integer;
begin
idx := FReportList.IndexOf(TfrxDesignerForm(Sender).Report);
if FReportList.Report[idx].PreviewForm <> nil then
FReportList.Report[idx].PreviewForm.Close;
FReportList.Delete(idx);
end;
procedure TMainForm.FormClose(Sender: TObject; var Action: TCloseAction);
var
idx: Integer;
begin
for idx := 0 to FReportList.Count - 1 do
TfrxDesignerForm(FReportList.Report[idx].Designer).Close;
Action := caFree;
end;
procedure TMainForm.FileSave1Execute(Sender: TObject);
var
idx: Integer;
begin
for idx := 0 to FReportList.Count - 1 do
TfrxDesignerForm(FReportList.Report[idx].Designer).SaveCmd.Execute;
end;
procedure TMainForm.PreviewReportExecute(Sender: TObject);
var
idx: Integer;
begin
for idx := 0 to FReportList.Count - 1 do
FReportList.Report[idx].ShowReport;
end;
end.