diff --git a/applications/lazstats/source/LazStats.lpi b/applications/lazstats/source/LazStats.lpi
index e8a531be6..91cd4eea2 100644
--- a/applications/lazstats/source/LazStats.lpi
+++ b/applications/lazstats/source/LazStats.lpi
@@ -49,7 +49,7 @@
-
+
@@ -1421,6 +1421,14 @@
+
+
+
+
+
+
+
+
diff --git a/applications/lazstats/source/LazStats.lpr b/applications/lazstats/source/LazStats.lpr
index f5503f6f3..a151c287b 100644
--- a/applications/lazstats/source/LazStats.lpr
+++ b/applications/lazstats/source/LazStats.lpr
@@ -8,7 +8,7 @@ uses
{$ENDIF}{$ENDIF}
Interfaces, // this includes the LCL widgetset
Forms, tachartlazaruspkg, tachartprint, lhelpcontrolpkg,
- Globals, LicenseUnit, OptionsUnit, MainDM, MainUnit;
+ Globals, LicenseUnit, OptionsUnit, MainDM, MainUnit, ReportFrameUnit;
{$R LazStats.res}
diff --git a/applications/lazstats/source/forms/analysis/statistical_process_control/basicspcunit.lfm b/applications/lazstats/source/forms/analysis/statistical_process_control/basicspcunit.lfm
index 14ec5a110..4a4c01a16 100644
--- a/applications/lazstats/source/forms/analysis/statistical_process_control/basicspcunit.lfm
+++ b/applications/lazstats/source/forms/analysis/statistical_process_control/basicspcunit.lfm
@@ -276,94 +276,19 @@ object BasicSPCForm: TBasicSPCForm
Height = 426
Top = 6
Width = 545
- ActivePage = ReportPage
+ ActivePage = ChartPage
Align = alClient
BorderSpacing.Left = 3
BorderSpacing.Top = 6
BorderSpacing.Right = 6
BorderSpacing.Bottom = 6
- TabIndex = 0
+ TabIndex = 1
TabOrder = 2
object ReportPage: TTabSheet
Caption = 'Report'
- ClientHeight = 398
- ClientWidth = 537
- object Panel1: TPanel
- Left = 6
- Height = 358
- Top = 34
- Width = 525
- Align = alClient
- BorderSpacing.Around = 6
- BevelOuter = bvNone
- BorderStyle = bsSingle
- ClientHeight = 354
- ClientWidth = 521
- TabOrder = 0
- object ReportMemo: TMemo
- Left = 4
- Height = 346
- Top = 4
- Width = 513
- Align = alClient
- BorderSpacing.Around = 4
- BorderStyle = bsNone
- Font.Height = -11
- Font.Name = 'Courier New'
- ParentFont = False
- ScrollBars = ssAutoBoth
- TabOrder = 0
- end
- end
- object ReportToolBar: TToolBar
- Left = 0
- Height = 22
- Top = 6
- Width = 537
- AutoSize = True
- BorderSpacing.Top = 6
- BorderSpacing.Bottom = 6
- Caption = 'ReportToolBar'
- EdgeBorders = []
- Images = MainDataModule.ImageList
- TabOrder = 1
- Transparent = True
- object tbSaveReport: TToolButton
- Left = 1
- Hint = 'Save report to file'
- Top = 0
- Caption = 'Save'
- ImageIndex = 4
- OnClick = tbSaveReportClick
- end
- object tbPrintReport: TToolButton
- Left = 24
- Hint = 'Print report'
- Top = 0
- Caption = 'Print'
- ImageIndex = 5
- OnClick = tbPrintReportClick
- end
- object tbCopyReport: TToolButton
- Left = 47
- Hint = 'Copy report to clipboard'
- Top = 0
- Caption = 'Copy'
- ImageIndex = 7
- OnClick = tbCopyReportClick
- end
- end
end
object ChartPage: TTabSheet
Caption = 'Chart'
end
end
- object SaveDialog: TSaveDialog
- Left = 399
- Top = 88
- end
- object PrintDialog: TPrintDialog
- Left = 399
- Top = 146
- end
end
diff --git a/applications/lazstats/source/forms/analysis/statistical_process_control/basicspcunit.pas b/applications/lazstats/source/forms/analysis/statistical_process_control/basicspcunit.pas
index cf8078e7f..be9ea0e58 100644
--- a/applications/lazstats/source/forms/analysis/statistical_process_control/basicspcunit.pas
+++ b/applications/lazstats/source/forms/analysis/statistical_process_control/basicspcunit.pas
@@ -7,7 +7,7 @@ interface
uses
Classes, SysUtils, Forms, Controls, Graphics, Dialogs, ExtCtrls,
StdCtrls, ComCtrls, Buttons, PrintersDlgs,
- Globals, MainUnit, ContextHelpUnit, ChartFrameUnit;
+ Globals, MainUnit, ContextHelpUnit, ReportFrameUnit, ChartFrameUnit;
type
@@ -21,14 +21,10 @@ type
GroupLabel: TLabel;
MeasLabel: TLabel;
MeasEdit: TEdit;
- PrintDialog: TPrintDialog;
- ReportMemo: TMemo;
PageControl: TPageControl;
- Panel1: TPanel;
ResetBtn: TButton;
ComputeBtn: TButton;
CloseBtn: TButton;
- SaveDialog: TSaveDialog;
SpecsPanel: TPanel;
ButtonPanel: TPanel;
SpecsSplitter: TSplitter;
@@ -38,10 +34,6 @@ type
MeasOutBtn: TSpeedButton;
GroupInBtn: TSpeedButton;
GroupOutBtn: TSpeedButton;
- tbPrintReport: TToolButton;
- tbSaveReport: TToolButton;
- ReportToolBar: TToolBar;
- tbCopyReport: TToolButton;
VarList: TListBox;
VarListLabel: TLabel;
procedure CloseBtnClick(Sender: TObject);
@@ -55,15 +47,11 @@ type
procedure MeasInBtnClick(Sender: TObject);
procedure MeasOutBtnClick(Sender: TObject);
procedure ResetBtnClick(Sender: TObject);
- procedure tbCopyReportClick(Sender: TObject);
- procedure tbPrintReportClick(Sender: TObject);
- procedure tbSaveReportClick(Sender: TObject);
procedure VarListClick(Sender: TObject);
private
FNoGroupsAllowed: Boolean;
protected
- FPrintY: Integer;
GrpVar: Integer;
MeasVar: Integer;
procedure Compute; virtual;
@@ -72,12 +60,12 @@ type
procedure PlotMeans(ATitle, AXTitle, AYTitle, ADataTitle, AGrandMeanTitle: String;
const Groups: StrDyneVec; const Means: DblDyneVec;
UCL, LCL, GrandMean, TargetSpec, LowerSpec, UpperSpec: double); virtual;
- procedure PrintText; virtual;
procedure Reset; virtual;
procedure UpdateBtnStates; virtual;
function Validate(out AMsg: String; out AControl: TWinControl): Boolean; virtual;
public
+ FReportFrame: TReportFrame;
FChartFrame: TChartFrame;
property NoGroupsAllowed: Boolean read FNoGroupsAllowed write FNoGroupsAllowed;
@@ -93,16 +81,10 @@ implementation
uses
Math,
- Printers, OSPrinters,
TAChartUtils, TALegend, TAChartAxisUtils, TASources, TACustomSeries, TASeries,
Utils, DataProcs;
const
- LEFT_MARGIN = 200;
- RIGHT_MARGIN = 200;
- TOP_MARGIN = 150;
- BOTTOM_MARGIN = 200;
-
FORMAT_MASK = '0.000';
@@ -181,10 +163,14 @@ end;
procedure TBasicSPCForm.FormCreate(Sender: TObject);
begin
Assert(OS3MainFrm <> nil);
+
+ FReportFrame := TReportFrame.Create(self);
+ FReportFrame.Parent := ReportPage;
+ FReportFrame.Align := alClient;
+
FChartFrame := TChartFrame.Create(self);
FChartFrame.Parent := ChartPage;
FChartFrame.Align := alClient;
- FChartFrame.BorderSpacing.Top := Scale96ToFont(6);
FChartFrame.Chart.Legend.SymbolWidth := Scale96ToFont(30);
FChartFrame.Chart.Legend.Alignment := laBottomCenter;
FChartFrame.Chart.Legend.ColumnCount := 3;
@@ -372,54 +358,6 @@ begin
end;
-procedure TBasicSPCForm.PrintText;
-var
- i: Integer;
- x: Integer;
- xmax, ymax: Integer;
- pageNo: Integer;
- oldFontSize: Integer;
- h: Integer;
-begin
- with Printer do
- begin
- x := LEFT_MARGIN;
- FPrintY := TOP_MARGIN;
- xMax := PaperSize.Width - RIGHT_MARGIN;
- yMax := PaperSize.Height - BOTTOM_MARGIN;
- pageNo := 1;
- try
- Canvas.Brush.Style := bsClear; // no text background color
- Canvas.Font.Assign(ReportMemo.Font);
- if Canvas.Font.Size < 10 then
- Canvas.Font.Size := 10;
- oldFontSize := Canvas.Font.Size;
- for i:=0 to ReportMemo.Lines.Count-1 do begin
- // Print page number
- if FPrintY = TOP_MARGIN then begin
- Canvas.Font.Size := 10;
- h := Canvas.TextHeight('Page 9') + 4;
- Canvas.TextOut(x+1, FPrintY, 'Page ' + IntToStr(PageNo));
- Canvas.Pen.Width := 3;
- Canvas.Line(LEFT_MARGIN, FPrintY+h, xmax, FPrintY+h);
- inc(FPrintY, 2*h);
- Canvas.Font.Size := oldFontSize;
- end;
- Canvas.TextOut(x, FPrintY, ReportMemo.Lines[i]);
- inc(FPrintY, Canvas.TextHeight('Tg'));
- if FPrintY > yMax then begin
- NewPage;
- FPrintY := TOP_MARGIN;
- inc(PageNo);
- end;
- end;
- except
- on E: EPrinter do ShowMessage('Printer Error: ' + E.Message);
- on E: Exception do showMessage('Unexpected error when printing.');
- end;
- end;
-end;
-
procedure TBasicSPCForm.Reset;
var
i : integer;
@@ -429,6 +367,8 @@ begin
MeasEdit.Text := '';
for i := 1 to NoVariables do
VarList.Items.Add(OS3MainFrm.DataGrid.Cells[i,0]);
+
+ FReportFrame.Clear;
FChartFrame.Clear;
(FChartFrame.Chart.AxisList[2].Marks.Source as TListChartSource).Clear;
UpdateBtnStates;
@@ -441,41 +381,6 @@ begin
end;
-procedure TBasicSPCForm.tbCopyReportClick(Sender: TObject);
-begin
- with ReportMemo do
- begin
- SelectAll;
- CopyToClipboard;
- SelLength := 0;
- end;
-end;
-
-
-procedure TBasicSPCForm.tbPrintReportClick(Sender: TObject);
-begin
- if PrintDialog.Execute then
- begin
- Printer.BeginDoc;
- try
- PrintText;
- finally
- Printer.EndDoc;
- end;
- end;
-end;
-
-
-procedure TBasicSPCForm.tbSaveReportClick(Sender: TObject);
-begin
- SaveDialog.Filter := 'LazStats text files (*.txt)|*.txt;*.TXT|All files (*.*)|*.*';
- SaveDialog.FilterIndex := 1; {text file}
- SaveDialog.Title := 'Save to File';
- if SaveDialog.Execute then
- ReportMemo.Lines.SaveToFile(SaveDialog.FileName);
-end;
-
-
procedure TBasicSPCForm.UpdateBtnStates;
begin
MeasInBtn.Enabled := (VarList.ItemIndex <> -1) and (MeasEdit.Text = '');
@@ -483,11 +388,8 @@ begin
GroupInBtn.Enabled := (VarList.ItemIndex <> -1) and (GroupEdit.Text = '');
GroupOutBtn.Enabled := (GroupEdit.Text <> '');
- tbSaveReport.Enabled := ReportMemo.Lines.Count > 0;
- tbPrintReport.Enabled := ReportMemo.Lines.Count > 0;
- tbCopyReport.Enabled := ReportMemo.Lines.Count > 0;
-
- FChartFrame.UpdateButtons;
+ FReportFrame.UpdateBtnStates;
+ FChartFrame.UpdateBtnStates;
end;
@@ -512,21 +414,8 @@ end;
procedure TBasicSPCForm.VarListClick(Sender: TObject);
-//var
-// index: integer;
begin
UpdateBtnStates;
- {
- index := VarList.ItemIndex;
- if index > -1 then
- begin
- if GroupEdit.Visible and (GroupEdit.Text = '') then
- GroupEdit.Text := VarList.Items[index]
- else
- MeasEdit.Text := VarList.Items[index];
- VarList.Items.Delete(index);
- end;
- }
end;
end.
diff --git a/applications/lazstats/source/forms/analysis/statistical_process_control/cchartunit.lfm b/applications/lazstats/source/forms/analysis/statistical_process_control/cchartunit.lfm
index 20a88ba1a..e30a4735a 100644
--- a/applications/lazstats/source/forms/analysis/statistical_process_control/cchartunit.lfm
+++ b/applications/lazstats/source/forms/analysis/statistical_process_control/cchartunit.lfm
@@ -122,38 +122,4 @@ inherited CChartForm: TCChartForm
end
end
end
- inherited SpecsSplitter: TSplitter
- Left = 443
- Height = 420
- end
- inherited PageControl: TPageControl
- Left = 451
- Height = 408
- Width = 470
- inherited ReportPage: TTabSheet
- ClientHeight = 380
- ClientWidth = 462
- inherited Panel1: TPanel
- Height = 340
- Width = 450
- ClientHeight = 336
- ClientWidth = 446
- inherited ReportMemo: TMemo
- Height = 328
- Width = 438
- end
- end
- inherited ReportToolBar: TToolBar
- Width = 458
- end
- end
- end
- inherited SaveDialog: TSaveDialog
- Left = 536
- Top = 96
- end
- inherited PrintDialog: TPrintDialog
- Left = 536
- Top = 154
- end
end
diff --git a/applications/lazstats/source/forms/analysis/statistical_process_control/cchartunit.pas b/applications/lazstats/source/forms/analysis/statistical_process_control/cchartunit.pas
index bc356fb62..0335a36c8 100644
--- a/applications/lazstats/source/forms/analysis/statistical_process_control/cchartunit.pas
+++ b/applications/lazstats/source/forms/analysis/statistical_process_control/cchartunit.pas
@@ -92,7 +92,7 @@ begin
for i := 1 to NoCases do
lReport.Add('%6d %15.2f', [i, means[i]]);
- ReportMemo.Lines.Assign(lReport);
+ FReportFrame.DisplayReport(lReport);
finally
lReport.Free;
end;
diff --git a/applications/lazstats/source/forms/analysis/statistical_process_control/cusumunit.lfm b/applications/lazstats/source/forms/analysis/statistical_process_control/cusumunit.lfm
index 416d32ae1..e97acdcf9 100644
--- a/applications/lazstats/source/forms/analysis/statistical_process_control/cusumunit.lfm
+++ b/applications/lazstats/source/forms/analysis/statistical_process_control/cusumunit.lfm
@@ -433,38 +433,4 @@ inherited CUSUMChartForm: TCUSUMChartForm
end
end
end
- inherited SpecsSplitter: TSplitter
- Left = 443
- Height = 503
- end
- inherited PageControl: TPageControl
- Left = 451
- Height = 491
- Width = 543
- inherited ReportPage: TTabSheet
- ClientHeight = 463
- ClientWidth = 535
- inherited Panel1: TPanel
- Height = 423
- Width = 523
- ClientHeight = 419
- ClientWidth = 519
- inherited ReportMemo: TMemo
- Height = 411
- Width = 511
- end
- end
- inherited ReportToolBar: TToolBar
- Width = 531
- end
- end
- end
- inherited SaveDialog: TSaveDialog
- Left = 600
- Top = 112
- end
- inherited PrintDialog: TPrintDialog
- Left = 600
- Top = 200
- end
end
diff --git a/applications/lazstats/source/forms/analysis/statistical_process_control/cusumunit.pas b/applications/lazstats/source/forms/analysis/statistical_process_control/cusumunit.pas
index e06e35a09..aab4f7c41 100644
--- a/applications/lazstats/source/forms/analysis/statistical_process_control/cusumunit.pas
+++ b/applications/lazstats/source/forms/analysis/statistical_process_control/cusumunit.pas
@@ -306,7 +306,7 @@ begin
end;
end;
- ReportMemo.Lines.Assign(lReport);
+ FReportFrame.DisplayReport(lReport);
finally
lReport.Free;
end;
diff --git a/applications/lazstats/source/forms/analysis/statistical_process_control/pchartunit.lfm b/applications/lazstats/source/forms/analysis/statistical_process_control/pchartunit.lfm
index 9b0a9cfbe..7a96565c3 100644
--- a/applications/lazstats/source/forms/analysis/statistical_process_control/pchartunit.lfm
+++ b/applications/lazstats/source/forms/analysis/statistical_process_control/pchartunit.lfm
@@ -175,30 +175,4 @@ inherited PChartForm: TPChartForm
end
end
end
- inherited SpecsSplitter: TSplitter
- Left = 459
- end
- inherited PageControl: TPageControl
- Left = 467
- Width = 454
- inherited ReportPage: TTabSheet
- ClientWidth = 446
- inherited Panel1: TPanel
- Width = 434
- ClientWidth = 430
- inherited ReportMemo: TMemo
- Width = 422
- end
- end
- inherited ReportToolBar: TToolBar
- Width = 442
- end
- end
- end
- inherited SaveDialog: TSaveDialog
- Left = 544
- end
- inherited PrintDialog: TPrintDialog
- Left = 544
- end
end
diff --git a/applications/lazstats/source/forms/analysis/statistical_process_control/pchartunit.pas b/applications/lazstats/source/forms/analysis/statistical_process_control/pchartunit.pas
index 9492a9e93..2c7d9d874 100644
--- a/applications/lazstats/source/forms/analysis/statistical_process_control/pchartunit.pas
+++ b/applications/lazstats/source/forms/analysis/statistical_process_control/pchartunit.pas
@@ -105,7 +105,7 @@ begin
lReport.Add('Sample size for each observation: %8d', [N]);
lReport.Add('Average proportion observed %8.4f', [AVG]);
- ReportMemo.Lines.Assign(lReport);
+ FReportFrame.DisplayReport(lReport);
finally
lReport.Free;
end;
diff --git a/applications/lazstats/source/forms/analysis/statistical_process_control/rchartunit.pas b/applications/lazstats/source/forms/analysis/statistical_process_control/rchartunit.pas
index c2e503f40..fc0c7d820 100644
--- a/applications/lazstats/source/forms/analysis/statistical_process_control/rchartunit.pas
+++ b/applications/lazstats/source/forms/analysis/statistical_process_control/rchartunit.pas
@@ -158,7 +158,7 @@ begin
for i := 0 to numGrps-1 do
lReport.Add('%7d %4d %8.2f %8.2f %8.2f', [i+1, count[i], means[i], stddev[i], ranges[i]]);
- ReportMemo.Lines.Assign(lReport);
+ FReportFrame.DisplayReport(lReport);
finally
lReport.Free;
end;
diff --git a/applications/lazstats/source/forms/analysis/statistical_process_control/schartunit.pas b/applications/lazstats/source/forms/analysis/statistical_process_control/schartunit.pas
index 19039b703..c55979739 100644
--- a/applications/lazstats/source/forms/analysis/statistical_process_control/schartunit.pas
+++ b/applications/lazstats/source/forms/analysis/statistical_process_control/schartunit.pas
@@ -154,7 +154,7 @@ begin
for i := 0 to numGrps - 1 do
lReport.Add('%7d %4d %8.2f %8.2f', [i+1, count[i], means[i], stddev[i]]);
- ReportMemo.Lines.Assign(lReport);
+ FReportFrame.DisplayReport(lReport);
finally
lReport.Free;
end;
diff --git a/applications/lazstats/source/forms/analysis/statistical_process_control/uchartunit.lfm b/applications/lazstats/source/forms/analysis/statistical_process_control/uchartunit.lfm
index d2454b6a6..9597da85e 100644
--- a/applications/lazstats/source/forms/analysis/statistical_process_control/uchartunit.lfm
+++ b/applications/lazstats/source/forms/analysis/statistical_process_control/uchartunit.lfm
@@ -145,33 +145,4 @@ inherited UChartForm: TUChartForm
end
end
end
- inherited SpecsSplitter: TSplitter
- Left = 435
- end
- inherited PageControl: TPageControl
- Left = 443
- Width = 478
- inherited ReportPage: TTabSheet
- ClientWidth = 470
- inherited Panel1: TPanel
- Width = 458
- ClientWidth = 454
- inherited ReportMemo: TMemo
- Width = 446
- end
- end
- inherited ReportToolBar: TToolBar
- Width = 466
- end
- end
- inherited ChartPage: TTabSheet
- ClientWidth = 470
- end
- end
- inherited SaveDialog: TSaveDialog
- Left = 544
- end
- inherited PrintDialog: TPrintDialog
- Left = 544
- end
end
diff --git a/applications/lazstats/source/forms/analysis/statistical_process_control/uchartunit.pas b/applications/lazstats/source/forms/analysis/statistical_process_control/uchartunit.pas
index 12696a245..1a2b84b76 100644
--- a/applications/lazstats/source/forms/analysis/statistical_process_control/uchartunit.pas
+++ b/applications/lazstats/source/forms/analysis/statistical_process_control/uchartunit.pas
@@ -96,7 +96,7 @@ begin
for i := 0 to numSamples-1 do
lReport.Add('%6d %10.2f %16.2f', [i, means[i], defPerUnit[i]]);
- ReportMemo.Lines.Assign(lReport);
+ FReportFrame.DisplayReport(lReport);
finally
lReport.Free;
end;
diff --git a/applications/lazstats/source/forms/analysis/statistical_process_control/xbarchartunit.lfm b/applications/lazstats/source/forms/analysis/statistical_process_control/xbarchartunit.lfm
index 939777fb5..216a7a3a9 100644
--- a/applications/lazstats/source/forms/analysis/statistical_process_control/xbarchartunit.lfm
+++ b/applications/lazstats/source/forms/analysis/statistical_process_control/xbarchartunit.lfm
@@ -236,26 +236,4 @@ inherited XBarChartForm: TXBarChartForm
Left = 390
Height = 476
end
- inherited PageControl: TPageControl
- Left = 398
- Height = 464
- Width = 523
- inherited ReportPage: TTabSheet
- ClientHeight = 436
- ClientWidth = 515
- inherited Panel1: TPanel
- Height = 396
- Width = 503
- ClientHeight = 392
- ClientWidth = 499
- inherited ReportMemo: TMemo
- Height = 384
- Width = 491
- end
- end
- inherited ReportToolBar: TToolBar
- Width = 511
- end
- end
- end
end
diff --git a/applications/lazstats/source/forms/analysis/statistical_process_control/xbarchartunit.pas b/applications/lazstats/source/forms/analysis/statistical_process_control/xbarchartunit.pas
index fc017425a..eb6b6a05d 100644
--- a/applications/lazstats/source/forms/analysis/statistical_process_control/xbarchartunit.pas
+++ b/applications/lazstats/source/forms/analysis/statistical_process_control/xbarchartunit.pas
@@ -325,7 +325,7 @@ begin
for i := 0 to numGrps-1 do
lReport.Add('%7s %4d %8.2f %8.2f', [groups[i], count[i], means[i], stddev[i]]);
- ReportMemo.Lines.Assign(lReport);
+ FReportFrame.DisplayReport(lReport);
finally
lReport.Free;
end;
diff --git a/applications/lazstats/source/frames/chartframeunit.lfm b/applications/lazstats/source/frames/chartframeunit.lfm
index 13c3b2585..8e3f0e782 100644
--- a/applications/lazstats/source/frames/chartframeunit.lfm
+++ b/applications/lazstats/source/frames/chartframeunit.lfm
@@ -54,9 +54,8 @@ object ChartFrame: TChartFrame
Left = 0
Height = 24
Top = 0
- Width = 616
+ Width = 620
AutoSize = True
- BorderSpacing.Right = 4
BorderSpacing.Bottom = 6
ButtonHeight = 22
ButtonWidth = 25
diff --git a/applications/lazstats/source/frames/chartframeunit.pas b/applications/lazstats/source/frames/chartframeunit.pas
index a454df7c4..d1b46a4f5 100644
--- a/applications/lazstats/source/frames/chartframeunit.pas
+++ b/applications/lazstats/source/frames/chartframeunit.pas
@@ -7,7 +7,8 @@ interface
uses
Classes, SysUtils, LCLVersion, Forms, Controls, Graphics, ExtDlgs, ComCtrls,
PrintersDlgs, TAGraph, TATypes, TACustomSource, TACustomSeries, TASeries,
- TATools, Globals;
+ TATools,
+ Globals, MainDM;
type
TPlotType = (ptLines, ptSymbols, ptLinesAndSymbols, ptHorBars, ptVertBars,
@@ -50,7 +51,7 @@ type
procedure SetTitle(const ATitle: String; Alignment: TAlignment = taCenter);
procedure SetXTitle(const ATitle: String);
procedure SetYTitle(const ATitle: String);
- procedure UpdateButtons; virtual;
+ procedure UpdateBtnStates; virtual;
function VertLine(x: Double; AColor: TColor; ALineStyle: TPenStyle;
ALegendTitle: String): TConstantLine;
end;
@@ -71,7 +72,7 @@ begin
ZoomDragTool.LimitToExtent := [zdDown];
PanDragTool.LimitToExtent := [pdDown];
{$IFEND}
- UpdateButtons;
+ UpdateBtnStates;
end;
@@ -83,6 +84,7 @@ begin
Chart.BottomAxis.Title.Caption := '';
Chart.LeftAxis.Title.Caption := '';
Chart.Legend.Visible := false;
+ UpdateBtnStates;
end;
function TChartFrame.Constline(xy: Double; ADirection: TLineStyle;
@@ -96,7 +98,7 @@ begin
Result.Title := ALegendTitle;
Result.Legend.Visible := ALegendTitle <> '';
Chart.AddSeries(Result);
- UpdateButtons;
+ UpdateBtnStates;
end;
@@ -195,7 +197,7 @@ begin
Result.Title := LegendTitle;
Chart.AddSeries(Result);
Chart.Legend.Visible := Chart.SeriesCount > 0;
- UpdateButtons;
+ UpdateBtnStates;
end;
@@ -274,7 +276,7 @@ begin
end;
-procedure TChartFrame.UpdateButtons;
+procedure TChartFrame.UpdateBtnStates;
begin
tbSaveChart.Enabled := Chart.SeriesCount > 0;
tbPrintChart.Enabled := Chart.SeriesCount > 0;
diff --git a/applications/lazstats/source/frames/reportframeunit.lfm b/applications/lazstats/source/frames/reportframeunit.lfm
new file mode 100644
index 000000000..c1ab5a52b
--- /dev/null
+++ b/applications/lazstats/source/frames/reportframeunit.lfm
@@ -0,0 +1,86 @@
+object ReportFrame: TReportFrame
+ Left = 0
+ Height = 240
+ Top = 0
+ Width = 310
+ ClientHeight = 240
+ ClientWidth = 310
+ TabOrder = 0
+ DesignLeft = 998
+ DesignTop = 330
+ object ReportToolBar: TToolBar
+ Left = 0
+ Height = 24
+ Top = 0
+ Width = 306
+ AutoSize = True
+ BorderSpacing.Right = 4
+ BorderSpacing.Bottom = 6
+ ButtonHeight = 22
+ ButtonWidth = 25
+ Caption = 'ReportToolBar'
+ EdgeBorders = [ebBottom]
+ Images = MainDataModule.ImageList
+ TabOrder = 0
+ Transparent = True
+ object tbSaveReport: TToolButton
+ Left = 1
+ Hint = 'Save report to file'
+ Top = 0
+ Caption = 'Save'
+ ImageIndex = 4
+ OnClick = tbSaveReportClick
+ end
+ object tbPrintReport: TToolButton
+ Left = 26
+ Hint = 'Print report'
+ Top = 0
+ Caption = 'Print'
+ ImageIndex = 5
+ OnClick = tbPrintReportClick
+ end
+ object tbCopyReport: TToolButton
+ Left = 51
+ Hint = 'Copy report to clipboard'
+ Top = 0
+ Caption = 'Copy'
+ ImageIndex = 7
+ OnClick = tbCopyReportClick
+ end
+ end
+ object ReportPanel: TPanel
+ Left = 6
+ Height = 204
+ Top = 30
+ Width = 298
+ Align = alClient
+ BorderSpacing.Around = 6
+ BevelOuter = bvNone
+ BorderStyle = bsSingle
+ ClientHeight = 200
+ ClientWidth = 294
+ TabOrder = 1
+ object ReportMemo: TMemo
+ Left = 4
+ Height = 192
+ Top = 4
+ Width = 286
+ Align = alClient
+ BorderSpacing.Around = 4
+ BorderStyle = bsNone
+ Font.Height = -11
+ Font.Name = 'Courier New'
+ ParentFont = False
+ ScrollBars = ssAutoBoth
+ TabOrder = 0
+ end
+ end
+ object SaveDialog: TSaveDialog
+ Left = 48
+ Top = 56
+ end
+ object PrintDialog: TPrintDialog
+ Left = 48
+ Top = 114
+ end
+end
diff --git a/applications/lazstats/source/frames/reportframeunit.pas b/applications/lazstats/source/frames/reportframeunit.pas
new file mode 100644
index 000000000..836eb1e64
--- /dev/null
+++ b/applications/lazstats/source/frames/reportframeunit.pas
@@ -0,0 +1,170 @@
+unit ReportFrameUnit;
+
+{$mode objfpc}{$H+}
+
+interface
+
+uses
+ Classes, SysUtils, Forms, Controls, ComCtrls, ExtCtrls, StdCtrls, Dialogs,
+ PrintersDlgs, MainDM;
+
+type
+
+ { TReportFrame }
+
+ TReportFrame = class(TFrame)
+ PrintDialog: TPrintDialog;
+ ReportPanel: TPanel;
+ ReportMemo: TMemo;
+ ReportToolBar: TToolBar;
+ SaveDialog: TSaveDialog;
+ tbCopyReport: TToolButton;
+ tbPrintReport: TToolButton;
+ tbSaveReport: TToolButton;
+ procedure tbCopyReportClick(Sender: TObject);
+ procedure tbPrintReportClick(Sender: TObject);
+ procedure tbSaveReportClick(Sender: TObject);
+ private
+ FPrintY: Integer;
+
+ protected
+ procedure PrintText; virtual;
+
+ public
+ constructor Create(AOwner: TComponent); override;
+ procedure Clear; virtual;
+ procedure DisplayReport(AReport: TStrings); virtual;
+ procedure UpdateBtnStates; virtual;
+
+ end;
+
+implementation
+
+{$R *.lfm}
+
+uses
+ Graphics,
+ Printers, OSPrinters;
+
+const
+ LEFT_MARGIN = 200;
+ RIGHT_MARGIN = 200;
+ TOP_MARGIN = 150;
+ BOTTOM_MARGIN = 200;
+
+
+constructor TReportFrame.Create(AOwner: TComponent);
+begin
+ inherited;
+ UpdateBtnStates;
+end;
+
+
+procedure TReportFrame.Clear;
+begin
+ ReportMemo.Lines.Clear;
+ UpdateBtnStates;
+end;
+
+
+procedure TReportFrame.DisplayReport(AReport: TStrings);
+begin
+ ReportMemo.Lines.AddStrings(AReport);
+ UpdateBtnStates;
+end;
+
+
+procedure TReportFrame.PrintText;
+var
+ i: Integer;
+ x: Integer;
+ xmax, ymax: Integer;
+ pageNo: Integer;
+ oldFontSize: Integer;
+ h: Integer;
+begin
+ with Printer do
+ begin
+ x := LEFT_MARGIN;
+ FPrintY := TOP_MARGIN;
+ xMax := PaperSize.Width - RIGHT_MARGIN;
+ yMax := PaperSize.Height - BOTTOM_MARGIN;
+ pageNo := 1;
+ try
+ Canvas.Brush.Style := bsClear; // no text background color
+ Canvas.Font.Assign(ReportMemo.Font);
+ if Canvas.Font.Size < 10 then
+ Canvas.Font.Size := 10;
+ oldFontSize := Canvas.Font.Size;
+ for i:=0 to ReportMemo.Lines.Count-1 do begin
+ // Print page number
+ if FPrintY = TOP_MARGIN then begin
+ Canvas.Font.Size := 10;
+ h := Canvas.TextHeight('Page 9') + 4;
+ Canvas.TextOut(x+1, FPrintY, 'Page ' + IntToStr(PageNo));
+ Canvas.Pen.Width := 3;
+ Canvas.Line(LEFT_MARGIN, FPrintY+h, xmax, FPrintY+h);
+ inc(FPrintY, 2*h);
+ Canvas.Font.Size := oldFontSize;
+ end;
+ Canvas.TextOut(x, FPrintY, ReportMemo.Lines[i]);
+ inc(FPrintY, Canvas.TextHeight('Tg'));
+ if FPrintY > yMax then begin
+ NewPage;
+ FPrintY := TOP_MARGIN;
+ inc(PageNo);
+ end;
+ end;
+ except
+ on E: EPrinter do ShowMessage('Printer Error: ' + E.Message);
+ on E: Exception do ShowMessage('Unexpected error when printing.');
+ end;
+ end;
+end;
+
+
+procedure TReportFrame.UpdateBtnStates;
+begin
+ tbCopyReport.Enabled := ReportMemo.Lines.Count > 0;
+ tbPrintReport.Enabled := ReportMemo.Lines.Count > 0;
+ tbSaveReport.Enabled := ReportMemo.Lines.Count > 0;
+end;
+
+
+procedure TReportFrame.tbPrintReportClick(Sender: TObject);
+begin
+ if PrintDialog.Execute then
+ begin
+ Printer.BeginDoc;
+ try
+ PrintText;
+ finally
+ Printer.EndDoc;
+ end;
+ end;
+end;
+
+
+procedure TReportFrame.tbCopyReportClick(Sender: TObject);
+begin
+ with ReportMemo do
+ begin
+ SelectAll;
+ CopyToClipboard;
+ SelLength := 0;
+ end;
+end;
+
+
+procedure TReportFrame.tbSaveReportClick(Sender: TObject);
+begin
+ SaveDialog.Filter := 'LazStats text files (*.txt)|*.txt;*.TXT|All files (*.*)|*.*';
+ SaveDialog.FilterIndex := 1; {text file}
+ SaveDialog.Title := 'Save to File';
+ if SaveDialog.Execute then
+ ReportMemo.Lines.SaveToFile(SaveDialog.FileName);
+end;
+
+
+end.
+