LazStats: Prepare more generalized layout by adding form ancestors TBasicStatsParamsForm and TBasicStatsChartForm

git-svn-id: https://svn.code.sf.net/p/lazarus-ccr/svn@7725 8e941d3f-bd1b-0410-a28a-d453659cc2b4
This commit is contained in:
wp_xxyyzz
2020-10-01 14:05:43 +00:00
parent 8092e5e9fa
commit 8df06eb3c3
6 changed files with 436 additions and 92 deletions

View File

@ -121,7 +121,7 @@
<PackageName Value="LCL"/>
</Item7>
</RequiredPackages>
<Units Count="176">
<Units Count="178">
<Unit0>
<Filename Value="LazStats.lpr"/>
<IsPartOfProject Value="True"/>
@ -1176,331 +1176,347 @@
<UnitName Value="DataSmoothUnit"/>
</Unit133>
<Unit134>
<Filename Value="forms\analysis\descriptive\groupfrequnit.pas"/>
<IsPartOfProject Value="True"/>
<ComponentName Value="GroupFreqForm"/>
<HasResources Value="True"/>
<ResourceBaseClass Value="Form"/>
<UnitName Value="GroupFreqUnit"/>
</Unit134>
<Unit135>
<Filename Value="forms\analysis\nonparametric\runstestunit.pas"/>
<IsPartOfProject Value="True"/>
<ComponentName Value="runstestform"/>
<HasResources Value="True"/>
<ResourceBaseClass Value="Form"/>
<UnitName Value="RunsTestUnit"/>
</Unit135>
<Unit136>
</Unit134>
<Unit135>
<Filename Value="forms\analysis\descriptive\xvsmultyunit.pas"/>
<IsPartOfProject Value="True"/>
<ComponentName Value="XvsMultYForm"/>
<HasResources Value="True"/>
<ResourceBaseClass Value="Form"/>
<UnitName Value="XvsMultYUnit"/>
</Unit136>
<Unit137>
</Unit135>
<Unit136>
<Filename Value="forms\analysis\nonparametric\sensunit.pas"/>
<IsPartOfProject Value="True"/>
<ComponentName Value="SensForm"/>
<HasResources Value="True"/>
<ResourceBaseClass Value="Form"/>
<UnitName Value="SensUnit"/>
</Unit137>
<Unit138>
</Unit136>
<Unit137>
<Filename Value="forms\analysis\multivariate\correspondenceunit.pas"/>
<IsPartOfProject Value="True"/>
<ComponentName Value="CorrespondenceForm"/>
<HasResources Value="True"/>
<ResourceBaseClass Value="Form"/>
<UnitName Value="CorrespondenceUnit"/>
</Unit138>
<Unit139>
</Unit137>
<Unit138>
<Filename Value="forms\analysis\descriptive\comparedistunit.pas"/>
<IsPartOfProject Value="True"/>
<ComponentName Value="CompareDistFrm"/>
<HasResources Value="True"/>
<ResourceBaseClass Value="Form"/>
<UnitName Value="CompareDistUnit"/>
</Unit139>
<Unit140>
</Unit138>
<Unit139>
<Filename Value="forms\variables\equationunit.pas"/>
<IsPartOfProject Value="True"/>
<ComponentName Value="EquationForm"/>
<HasResources Value="True"/>
<ResourceBaseClass Value="Form"/>
<UnitName Value="EquationUnit"/>
</Unit140>
<Unit141>
</Unit139>
<Unit140>
<Filename Value="forms\misc\contexthelpunit.pas"/>
<IsPartOfProject Value="True"/>
<ComponentName Value="ContextHelpForm"/>
<HasResources Value="True"/>
<ResourceBaseClass Value="Form"/>
<UnitName Value="ContextHelpUnit"/>
</Unit141>
<Unit142>
</Unit140>
<Unit141>
<Filename Value="forms\tools\calculatorunit.pas"/>
<IsPartOfProject Value="True"/>
<ComponentName Value="CalculatorForm"/>
<HasResources Value="True"/>
<ResourceBaseClass Value="Form"/>
<UnitName Value="CalculatorUnit"/>
</Unit142>
<Unit143>
</Unit141>
<Unit142>
<Filename Value="forms\tools\jpegunit.pas"/>
<IsPartOfProject Value="True"/>
<ComponentName Value="JPEGform"/>
<HasResources Value="True"/>
<ResourceBaseClass Value="Form"/>
<UnitName Value="JpegUnit"/>
</Unit143>
<Unit144>
</Unit142>
<Unit143>
<Filename Value="forms\analysis\descriptive\resistancelineunit.pas"/>
<IsPartOfProject Value="True"/>
<ComponentName Value="ResistanceLineForm"/>
<HasResources Value="True"/>
<ResourceBaseClass Value="Form"/>
<UnitName Value="ResistanceLineUnit"/>
</Unit144>
<Unit145>
</Unit143>
<Unit144>
<Filename Value="forms\analysis\multivariate\medianpolishunit.pas"/>
<IsPartOfProject Value="True"/>
<ComponentName Value="MedianPolishForm"/>
<HasResources Value="True"/>
<ResourceBaseClass Value="Form"/>
<UnitName Value="MedianPolishUnit"/>
</Unit145>
<Unit146>
</Unit144>
<Unit145>
<Filename Value="forms\analysis\comparisons\onecaseanovaunit.pas"/>
<IsPartOfProject Value="True"/>
<ComponentName Value="OneCaseAnovaForm"/>
<HasResources Value="True"/>
<ResourceBaseClass Value="Form"/>
<UnitName Value="OneCaseANOVAUnit"/>
</Unit146>
<Unit147>
</Unit145>
<Unit146>
<Filename Value="forms\analysis\descriptive\smoothdataunit.pas"/>
<IsPartOfProject Value="True"/>
<ComponentName Value="DataSmoothingForm"/>
<HasResources Value="True"/>
<ResourceBaseClass Value="Form"/>
<UnitName Value="SmoothDataUnit"/>
</Unit147>
<Unit148>
</Unit146>
<Unit147>
<Filename Value="forms\analysis\nonparametric\srhtestunit.pas"/>
<IsPartOfProject Value="True"/>
<ComponentName Value="SRHTest"/>
<HasResources Value="True"/>
<ResourceBaseClass Value="Form"/>
<UnitName Value="SRHTestUnit"/>
</Unit148>
<Unit149>
</Unit147>
<Unit148>
<Filename Value="forms\help\aboutunit.pas"/>
<IsPartOfProject Value="True"/>
<ComponentName Value="AboutBox"/>
<HasResources Value="True"/>
<ResourceBaseClass Value="Form"/>
<UnitName Value="AboutUnit"/>
</Unit149>
<Unit150>
</Unit148>
<Unit149>
<Filename Value="forms\analysis\measurement_programs\item_banking\itembankingunit.pas"/>
<IsPartOfProject Value="True"/>
<ComponentName Value="ItemBankFrm"/>
<HasResources Value="True"/>
<ResourceBaseClass Value="Form"/>
<UnitName Value="ItemBankingUnit"/>
</Unit150>
<Unit151>
</Unit149>
<Unit150>
<Filename Value="forms\analysis\measurement_programs\item_banking\itemcodesunit.pas"/>
<IsPartOfProject Value="True"/>
<ComponentName Value="CodesForm"/>
<HasResources Value="True"/>
<ResourceBaseClass Value="Form"/>
<UnitName Value="ItemCodesUnit"/>
</Unit151>
<Unit152>
</Unit150>
<Unit151>
<Filename Value="forms\analysis\measurement_programs\item_banking\tfitemunit.pas"/>
<IsPartOfProject Value="True"/>
<ComponentName Value="TFItemForm"/>
<HasResources Value="True"/>
<ResourceBaseClass Value="Form"/>
<UnitName Value="TFItemUnit"/>
</Unit152>
<Unit153>
</Unit151>
<Unit152>
<Filename Value="forms\analysis\measurement_programs\item_banking\essayitemunit.pas"/>
<IsPartOfProject Value="True"/>
<ComponentName Value="EssayItemForm"/>
<HasResources Value="True"/>
<ResourceBaseClass Value="Form"/>
<UnitName Value="EssayItemUnit"/>
</Unit153>
<Unit154>
</Unit152>
<Unit153>
<Filename Value="forms\analysis\measurement_programs\item_banking\mcitemunit.pas"/>
<IsPartOfProject Value="True"/>
<ComponentName Value="MCItemForm"/>
<HasResources Value="True"/>
<ResourceBaseClass Value="Form"/>
<UnitName Value="MCItemUnit"/>
</Unit154>
<Unit155>
</Unit153>
<Unit154>
<Filename Value="forms\analysis\measurement_programs\item_banking\matchitemunit.pas"/>
<IsPartOfProject Value="True"/>
<ComponentName Value="MatchItemForm"/>
<HasResources Value="True"/>
<ResourceBaseClass Value="Form"/>
<UnitName Value="MatchItemUnit"/>
</Unit155>
<Unit156>
</Unit154>
<Unit155>
<Filename Value="forms\analysis\measurement_programs\item_banking\testspecsunit.pas"/>
<IsPartOfProject Value="True"/>
<ComponentName Value="TestSpecsForm"/>
<HasResources Value="True"/>
<ResourceBaseClass Value="Form"/>
<UnitName Value="TestSpecsUnit"/>
</Unit156>
<Unit157>
</Unit155>
<Unit156>
<Filename Value="forms\analysis\nonparametric\simplechisqrunit.pas"/>
<IsPartOfProject Value="True"/>
<ComponentName Value="SimpleChiSqrForm"/>
<HasResources Value="True"/>
<ResourceBaseClass Value="Form"/>
<UnitName Value="SimpleChiSqrUnit"/>
</Unit157>
<Unit158>
</Unit156>
<Unit157>
<Filename Value="forms\analysis\nonparametric\lifetableunit.pas"/>
<IsPartOfProject Value="True"/>
<ComponentName Value="LifeTableForm"/>
<HasResources Value="True"/>
<ResourceBaseClass Value="Form"/>
<UnitName Value="LifeTableUnit"/>
</Unit158>
<Unit159>
</Unit157>
<Unit158>
<Filename Value="forms\analysis\multiple_regression\lsmrunit.pas"/>
<IsPartOfProject Value="True"/>
<ComponentName Value="LSMregForm"/>
<HasResources Value="True"/>
<ResourceBaseClass Value="Form"/>
<UnitName Value="LSMRUnit"/>
</Unit159>
<Unit160>
</Unit158>
<Unit159>
<Filename Value="forms\maindm.pas"/>
<IsPartOfProject Value="True"/>
<ComponentName Value="MainDataModule"/>
<HasResources Value="True"/>
<ResourceBaseClass Value="DataModule"/>
<UnitName Value="MainDM"/>
</Unit160>
<Unit161>
</Unit159>
<Unit160>
<Filename Value="units\utils.pas"/>
<IsPartOfProject Value="True"/>
<UnitName Value="Utils"/>
</Unit161>
<Unit162>
</Unit160>
<Unit161>
<Filename Value="LazStats.inc"/>
<IsPartOfProject Value="True"/>
</Unit162>
<Unit163>
</Unit161>
<Unit162>
<Filename Value="forms\misc\chartunit.pas"/>
<IsPartOfProject Value="True"/>
<ComponentName Value="ChartForm"/>
<HasResources Value="True"/>
<ResourceBaseClass Value="Form"/>
<UnitName Value="ChartUnit"/>
</Unit163>
<Unit164>
</Unit162>
<Unit163>
<Filename Value="units\mathunit.pas"/>
<IsPartOfProject Value="True"/>
<UnitName Value="MathUnit"/>
</Unit164>
<Unit165>
</Unit163>
<Unit164>
<Filename Value="frames\chartframeunit.pas"/>
<IsPartOfProject Value="True"/>
<ComponentName Value="ChartFrame"/>
<HasResources Value="True"/>
<ResourceBaseClass Value="Frame"/>
<UnitName Value="ChartFrameUnit"/>
</Unit165>
<Unit166>
</Unit164>
<Unit165>
<Filename Value="forms\analysis\statistical_process_control\basicspcunit.pas"/>
<IsPartOfProject Value="True"/>
<ComponentName Value="BasicSPCForm"/>
<HasResources Value="True"/>
<ResourceBaseClass Value="Form"/>
<UnitName Value="BasicSPCUnit"/>
</Unit166>
<Unit167>
</Unit165>
<Unit166>
<Filename Value="forms\analysis\statistical_process_control\schartunit.pas"/>
<IsPartOfProject Value="True"/>
<ComponentName Value="SChartForm"/>
<HasResources Value="True"/>
<ResourceBaseClass Value="Form"/>
<UnitName Value="SChartUnit"/>
</Unit167>
<Unit168>
</Unit166>
<Unit167>
<Filename Value="forms\analysis\statistical_process_control\rchartunit.pas"/>
<IsPartOfProject Value="True"/>
<ComponentName Value="RChartForm"/>
<HasResources Value="True"/>
<ResourceBaseClass Value="Form"/>
<UnitName Value="RChartUnit"/>
</Unit168>
<Unit169>
</Unit167>
<Unit168>
<Filename Value="forms\analysis\statistical_process_control\xbarchartunit.pas"/>
<IsPartOfProject Value="True"/>
<ComponentName Value="XBarChartForm"/>
<HasResources Value="True"/>
<ResourceBaseClass Value="Form"/>
<UnitName Value="XBarChartUnit"/>
</Unit169>
<Unit170>
</Unit168>
<Unit169>
<Filename Value="forms\analysis\statistical_process_control\cchartunit.pas"/>
<IsPartOfProject Value="True"/>
<ComponentName Value="CChartForm"/>
<HasResources Value="True"/>
<ResourceBaseClass Value="Form"/>
<UnitName Value="CChartUnit"/>
</Unit170>
<Unit171>
</Unit169>
<Unit170>
<Filename Value="forms\analysis\statistical_process_control\pchartunit.pas"/>
<IsPartOfProject Value="True"/>
<ComponentName Value="PChartForm"/>
<HasResources Value="True"/>
<ResourceBaseClass Value="Form"/>
<UnitName Value="PChartUnit"/>
</Unit171>
<Unit172>
</Unit170>
<Unit171>
<Filename Value="forms\analysis\statistical_process_control\uchartunit.pas"/>
<IsPartOfProject Value="True"/>
<ComponentName Value="UChartForm"/>
<HasResources Value="True"/>
<ResourceBaseClass Value="Form"/>
<UnitName Value="UChartUnit"/>
</Unit172>
<Unit173>
</Unit171>
<Unit172>
<Filename Value="forms\analysis\statistical_process_control\cusumunit.pas"/>
<IsPartOfProject Value="True"/>
<ComponentName Value="CUSUMChartForm"/>
<HasResources Value="True"/>
<ResourceBaseClass Value="Form"/>
<UnitName Value="CUSUMUnit"/>
</Unit173>
<Unit174>
</Unit172>
<Unit173>
<Filename Value="frames\reportframeunit.pas"/>
<IsPartOfProject Value="True"/>
<ComponentName Value="ReportFrame"/>
<HasResources Value="True"/>
<ResourceBaseClass Value="Frame"/>
<UnitName Value="ReportFrameUnit"/>
</Unit174>
<Unit175>
</Unit173>
<Unit174>
<Filename Value="forms\misc\basicstatsformunit.pas"/>
<IsPartOfProject Value="True"/>
<ComponentName Value="BasicStatsForm"/>
<HasResources Value="True"/>
<ResourceBaseClass Value="Form"/>
<UnitName Value="BasicStatsFormUnit"/>
</Unit174>
<Unit175>
<Filename Value="forms\misc\basicstatsparamsformunit.pas"/>
<IsPartOfProject Value="True"/>
<ComponentName Value="BasicStatsParamsForm"/>
<HasResources Value="True"/>
<ResourceBaseClass Value="Form"/>
<UnitName Value="BasicStatsParamsFormUnit"/>
</Unit175>
<Unit176>
<Filename Value="forms\misc\basicstatschartformunit.pas"/>
<IsPartOfProject Value="True"/>
<ComponentName Value="BasicStatsChartForm"/>
<HasResources Value="True"/>
<ResourceBaseClass Value="Form"/>
<UnitName Value="BasicStatsChartFormUnit"/>
</Unit176>
<Unit177>
<Filename Value="forms\analysis\descriptive\groupfrequnit.pas"/>
<IsPartOfProject Value="True"/>
<ComponentName Value="GroupFreqForm"/>
<HasResources Value="True"/>
<ResourceBaseClass Value="Form"/>
<UnitName Value="GroupFreqUnit"/>
</Unit177>
</Units>
</ProjectOptions>
<CompilerOptions>

View File

@ -8,8 +8,7 @@ uses
{$ENDIF}{$ENDIF}
Interfaces, // this includes the LCL widgetset
Forms, tachartlazaruspkg, tachartprint, lhelpcontrolpkg,
Globals, LicenseUnit, OptionsUnit, MainDM, MainUnit, ReportFrameUnit,
BasicStatsFormUnit;
Globals, LicenseUnit, OptionsUnit, MainDM, MainUnit;
{$R LazStats.res}
@ -29,7 +28,6 @@ begin
end;
Application.CreateForm(TMainDataModule, MainDataModule);
Application.CreateForm(TOS3MainFrm, OS3MainFrm);
Application.CreateForm(TBasicStatsForm, BasicStatsForm);
Application.Run;
end.

View File

@ -0,0 +1,18 @@
inherited BasicStatsChartForm: TBasicStatsChartForm
OnActivate = nil
OnCreate = FormCreate
inherited ParamsPanel: TPanel
inherited CloseBtn: TButton
OnClick = CloseBtnClick
end
inherited ComputeBtn: TButton
OnClick = ComputeBtnClick
end
inherited ResetBtn: TButton
OnClick = ResetBtnClick
end
inherited HelpBtn: TButton
OnClick = HelpBtnClick
end
end
end

View File

@ -0,0 +1,62 @@
{ Template for LazStats forms containing the ParamsPanel and a ChartFrame }
unit BasicStatsChartFormUnit;
{$mode objfpc}{$H+}
interface
uses
Classes, SysUtils, Forms, Controls, Graphics, Dialogs,
ChartFrameUnit, BasicStatsParamsFormUnit;
type
{ TBasicStatsChartForm }
TBasicStatsChartForm = class(TBasicStatsParamsForm)
private
protected
FChartFrame: TChartFrame;
public
constructor Create(AOwner: TComponent); override;
end;
var
BasicStatsChartForm: TBasicStatsChartForm;
implementation
{$R *.lfm}
uses
Utils;
{ TBasicStatsChartForm }
constructor TBasicStatsChartForm.Create(AOwner: TComponent);
begin
inherited;
FChartFrame := TChartFrame.Create(self);
FChartFrame.Parent := Self;
FChartFrame.Align := alClient;
FChartFrame.Chart.BottomAxis.Intervals.MaxLength := 80;
FChartFrame.Chart.BottomAxis.Intervals.MinLength := 30;
FChartFrame.BorderSpacing.Left := 4;
FChartFrame.BorderSpacing.Top := 8;
FChartFrame.BorderSpacing.Bottom := 8;
FChartFrame.BorderSpacing.Right := 8;
InitToolbar(FChartFrame.ChartToolbar, tpRight);
Reset;
end;
end.

View File

@ -0,0 +1,96 @@
inherited BasicStatsParamsForm: TBasicStatsParamsForm
Caption = 'BasicStatsParamsForm'
OnActivate = FormActivate
OnCreate = FormCreate
Position = poMainFormCenter
object ParamsPanel: TPanel[0]
Left = 8
Height = 443
Top = 8
Width = 291
Align = alLeft
BorderSpacing.Left = 8
BorderSpacing.Top = 8
BorderSpacing.Right = 4
BorderSpacing.Bottom = 8
BevelOuter = bvNone
ClientHeight = 443
ClientWidth = 291
TabOrder = 0
object CloseBtn: TButton
AnchorSideRight.Control = ParamsPanel
AnchorSideRight.Side = asrBottom
AnchorSideBottom.Control = ParamsPanel
AnchorSideBottom.Side = asrBottom
Left = 236
Height = 25
Top = 418
Width = 55
Anchors = [akRight, akBottom]
AutoSize = True
BorderSpacing.Left = 8
BorderSpacing.Top = 8
Caption = 'Close'
TabOrder = 0
end
object ComputeBtn: TButton
AnchorSideTop.Control = CloseBtn
AnchorSideRight.Control = CloseBtn
Left = 153
Height = 25
Top = 418
Width = 75
Anchors = [akTop, akRight]
BorderSpacing.Left = 8
BorderSpacing.Right = 8
Caption = 'Compute'
TabOrder = 1
end
object ResetBtn: TButton
AnchorSideTop.Control = CloseBtn
AnchorSideRight.Control = ComputeBtn
Left = 91
Height = 25
Top = 418
Width = 54
Anchors = [akTop, akRight]
AutoSize = True
BorderSpacing.Left = 8
BorderSpacing.Right = 8
Caption = 'Reset'
TabOrder = 2
end
object HelpBtn: TButton
AnchorSideTop.Control = CloseBtn
AnchorSideRight.Control = ResetBtn
Left = 32
Height = 25
Top = 418
Width = 51
Anchors = [akTop, akRight]
AutoSize = True
BorderSpacing.Right = 8
Caption = 'Help'
TabOrder = 3
end
object ButtonBevel: TBevel
AnchorSideLeft.Control = ParamsPanel
AnchorSideRight.Control = ParamsPanel
AnchorSideRight.Side = asrBottom
AnchorSideBottom.Control = CloseBtn
Left = 0
Height = 8
Top = 402
Width = 291
Anchors = [akLeft, akRight, akBottom]
Shape = bsBottomLine
end
end
object ParamsSplitter: TSplitter[1]
Left = 303
Height = 459
Top = 0
Width = 5
ResizeStyle = rsPattern
end
end

View File

@ -0,0 +1,154 @@
unit BasicStatsParamsFormUnit;
{$mode objfpc}{$H+}
interface
uses
Classes, SysUtils, Forms, Controls, Graphics, Dialogs, StdCtrls, ExtCtrls,
ContextHelpUnit, BasicStatsFormUnit;
type
{ TBasicStatsParamsForm }
TBasicStatsParamsForm = class(TBasicStatsForm)
ButtonBevel: TBevel;
CloseBtn: TButton;
ComputeBtn: TButton;
ResetBtn: TButton;
HelpBtn: TButton;
ParamsPanel: TPanel;
ParamsSplitter: TSplitter;
procedure CloseBtnClick(Sender: TObject);
procedure ComputeBtnClick(Sender: TObject);
procedure FormActivate(Sender: TObject);
procedure FormCreate(Sender: TObject);
procedure HelpBtnClick(Sender: TObject);
procedure ResetBtnClick(Sender: TObject);
private
protected
FAutoSized: Boolean;
procedure AdjustConstraints; virtual;
procedure Compute; virtual;
function Validate(out AMsg: String; out AControl: TWinControl): Boolean; virtual;
public
constructor Create(AOwner: TComponent); override;
end;
var
BasicStatsParamsForm: TBasicStatsParamsForm;
implementation
{$R *.lfm}
uses
Math,
Utils;
{ TBasicStatsParamsForm }
constructor TBasicStatsParamsForm.Create(AOwner: TComponent);
begin
inherited;
CloseBtn.OnClick := @CloseBtnClick;
ComputeBtn.OnClick := @ComputeBtnClick;
ResetBtn.OnClick := @ResetBtnClick;
HelpBtn.OnClick := @HelpBtnClick;
end;
procedure TBasicStatsParamsForm.AdjustConstraints;
begin
// be be overridden
end;
procedure TBasicStatsParamsForm.CloseBtnClick(Sender: TObject);
begin
Close;
end;
procedure TBasicStatsParamsForm.Compute;
begin
// to be overridden
end;
procedure TBasicStatsParamsForm.ComputeBtnClick(Sender: TObject);
var
msg: String;
C: TWinControl;
begin
if not Validate(msg, C) then
begin
if Assigned(C) and C.CanFocus then
C.SetFocus;
ErrorMsg(msg);
exit;
end;
Compute;
end;
procedure TBasicStatsParamsForm.FormActivate(Sender: TObject);
var
w: Integer;
begin
if FAutoSized then
exit;
w := MaxValue([ResetBtn.Width, ComputeBtn.Width, CloseBtn.Width]);
ResetBtn.Constraints.MinWidth := w;
ComputeBtn.Constraints.MinWidth := w;
CloseBtn.Constraints.MinWidth := w;
AdjustConstraints;
if Width < Constraints.MinWidth then Width := 1; // enforce constraints
if Height < Constraints.MinHeight then Height := 1;
Position := poDesigned;
FAutoSized := true;
end;
procedure TBasicStatsParamsForm.FormCreate(Sender: TObject);
begin
InitForm(self);
Reset;
end;
procedure TBasicStatsParamsForm.HelpBtnClick(Sender: TObject);
begin
if ContextHelpForm = nil then
Application.CreateForm(TContextHelpForm, ContextHelpForm);
ContextHelpForm.HelpMessage((Sender as TButton).Tag);
end;
procedure TBasicStatsParamsForm.ResetBtnClick(Sender: TObject);
begin
Reset;
end;
function TBasicStatsParamsForm.Validate(out AMsg: String;
out AControl: TWinControl): Boolean;
begin
AMsg := '';
AControl := nil;
Result := true;
end;
end.