195 lines
4.6 KiB
Plaintext
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.
|