LazStats: Beginning to layout of CompareDistUnit to move report and chart inside the form.

git-svn-id: https://svn.code.sf.net/p/lazarus-ccr/svn@7720 8e941d3f-bd1b-0410-a28a-d453659cc2b4
This commit is contained in:
wp_xxyyzz
2020-09-29 13:49:25 +00:00
parent feed93c12b
commit 98cf0d0621
3 changed files with 539 additions and 429 deletions

View File

@ -1,247 +1,164 @@
object CompareDistFrm: TCompareDistFrm inherited CompareDistFrm: TCompareDistFrm
Left = 462 Left = 671
Height = 375 Height = 413
Top = 227 Top = 327
Width = 516 Width = 924
HelpType = htKeyword HelpType = htKeyword
HelpKeyword = 'html/ComparisonsWithTheoreticalDistri.htm' HelpKeyword = 'html/ComparisonsWithTheoreticalDistri.htm'
AutoSize = True
Caption = 'Compare Cumulative Distributions' Caption = 'Compare Cumulative Distributions'
ClientHeight = 375 ClientHeight = 413
ClientWidth = 516 ClientWidth = 924
OnActivate = FormActivate OnActivate = FormActivate
OnCreate = FormCreate OnCreate = FormCreate
OnShow = FormShow
Position = poMainFormCenter Position = poMainFormCenter
LCLVersion = '2.0.10.0' object ParamsPanel: TPanel[0]
object CompareGroup: TRadioGroup
AnchorSideTop.Control = Owner
AnchorSideRight.Control = Owner
AnchorSideRight.Side = asrBottom
Left = 326
Height = 72
Top = 8
Width = 182
Anchors = [akTop, akRight]
AutoFill = True
AutoSize = True
BorderSpacing.Top = 8
BorderSpacing.Right = 8
Caption = 'Compare To:'
ChildSizing.LeftRightSpacing = 12
ChildSizing.TopBottomSpacing = 6
ChildSizing.VerticalSpacing = 2
ChildSizing.EnlargeHorizontal = crsHomogenousChildResize
ChildSizing.EnlargeVertical = crsHomogenousChildResize
ChildSizing.ShrinkHorizontal = crsScaleChilds
ChildSizing.ShrinkVertical = crsScaleChilds
ChildSizing.Layout = cclLeftToRightThenTopToBottom
ChildSizing.ControlsPerLine = 1
ClientHeight = 52
ClientWidth = 178
ItemIndex = 0
Items.Strings = (
'A Theoretical Distribution'
'Another Variable'
)
OnClick = CompareGroupClick
TabOrder = 2
end
object DistGroup: TRadioGroup
AnchorSideLeft.Control = CompareGroup
AnchorSideTop.Control = CompareGroup
AnchorSideTop.Side = asrBottom
AnchorSideRight.Control = Owner
AnchorSideRight.Side = asrBottom
Left = 326
Height = 135
Top = 96
Width = 182
Anchors = [akTop, akLeft, akRight]
AutoFill = True
AutoSize = True
BorderSpacing.Top = 16
BorderSpacing.Right = 8
Caption = 'Theoretical Distributions:'
ChildSizing.LeftRightSpacing = 12
ChildSizing.TopBottomSpacing = 6
ChildSizing.VerticalSpacing = 2
ChildSizing.EnlargeHorizontal = crsHomogenousChildResize
ChildSizing.EnlargeVertical = crsHomogenousChildResize
ChildSizing.ShrinkHorizontal = crsScaleChilds
ChildSizing.ShrinkVertical = crsScaleChilds
ChildSizing.Layout = cclLeftToRightThenTopToBottom
ChildSizing.ControlsPerLine = 1
ClientHeight = 115
ClientWidth = 178
Items.Strings = (
'Normal Distribution'
't-Distribution'
'Chi Square Distribution'
'F Distribution'
'Poisson Distribution'
)
OnClick = DistGroupClick
TabOrder = 3
end
object ResetBtn: TButton
AnchorSideRight.Control = ComputeBtn
AnchorSideBottom.Control = Owner
AnchorSideBottom.Side = asrBottom
Left = 299
Height = 25
Top = 342
Width = 54
Anchors = [akRight, akBottom]
AutoSize = True
BorderSpacing.Top = 8
BorderSpacing.Right = 12
BorderSpacing.Bottom = 8
Caption = 'Reset'
OnClick = ResetBtnClick
TabOrder = 5
end
object ComputeBtn: TButton
AnchorSideRight.Control = CloseBtn
AnchorSideBottom.Control = Owner
AnchorSideBottom.Side = asrBottom
Left = 365
Height = 25
Top = 342
Width = 76
Anchors = [akRight, akBottom]
AutoSize = True
BorderSpacing.Top = 8
BorderSpacing.Right = 12
BorderSpacing.Bottom = 8
Caption = 'Compute'
OnClick = ComputeBtnClick
TabOrder = 6
end
object CloseBtn: TButton
AnchorSideRight.Control = Owner
AnchorSideRight.Side = asrBottom
AnchorSideBottom.Control = Owner
AnchorSideBottom.Side = asrBottom
Left = 453
Height = 25
Top = 342
Width = 55
Anchors = [akRight, akBottom]
AutoSize = True
BorderSpacing.Top = 8
BorderSpacing.Right = 8
BorderSpacing.Bottom = 8
Caption = 'Close'
ModalResult = 11
OnClick = CloseBtnClick
TabOrder = 7
end
object PlotTypeGrp: TGroupBox
AnchorSideLeft.Control = CompareGroup
AnchorSideTop.Control = DistGroup
AnchorSideTop.Side = asrBottom
AnchorSideRight.Control = Owner
AnchorSideRight.Side = asrBottom
Left = 326
Height = 74
Top = 247
Width = 182
Anchors = [akTop, akLeft, akRight]
AutoSize = True
BorderSpacing.Top = 16
BorderSpacing.Right = 8
BorderSpacing.Bottom = 8
Caption = 'Plot Type:'
ChildSizing.LeftRightSpacing = 12
ChildSizing.TopBottomSpacing = 6
ChildSizing.VerticalSpacing = 2
ChildSizing.Layout = cclLeftToRightThenTopToBottom
ChildSizing.ControlsPerLine = 1
ClientHeight = 54
ClientWidth = 178
TabOrder = 4
object PointsChk: TRadioButton
Left = 12
Height = 19
Top = 6
Width = 67
BorderSpacing.Left = 12
Caption = '3DPoints'
Checked = True
TabOrder = 0
TabStop = True
end
object LinesChk: TRadioButton
Left = 12
Height = 19
Top = 27
Width = 67
BorderSpacing.Left = 12
BorderSpacing.Bottom = 8
Caption = '3DLines'
TabOrder = 1
end
end
object GroupBox1: TGroupBox
AnchorSideLeft.Control = Owner
AnchorSideBottom.Control = Bevel1
Left = 8 Left = 8
Height = 47 Height = 397
Top = 279
Width = 298
Anchors = [akLeft, akBottom]
AutoSize = True
BorderSpacing.Left = 8
Caption = 'Option:'
ClientHeight = 27
ClientWidth = 294
TabOrder = 1
object BothChk: TCheckBox
Left = 12
Height = 19
Top = 0
Width = 270
BorderSpacing.Left = 12
BorderSpacing.Right = 12
BorderSpacing.Bottom = 8
Caption = 'Plot both Frequency and cumulative Frequency'
TabOrder = 0
end
end
object Bevel1: TBevel
AnchorSideLeft.Control = Owner
AnchorSideRight.Control = Owner
AnchorSideRight.Side = asrBottom
AnchorSideBottom.Control = ResetBtn
Left = 0
Height = 8
Top = 326
Width = 516
Anchors = [akLeft, akRight, akBottom]
Shape = bsBottomLine
end
object Panel1: TPanel
AnchorSideLeft.Control = Owner
AnchorSideTop.Control = Owner
AnchorSideRight.Control = CompareGroup
AnchorSideBottom.Control = GroupBox1
Left = 8
Height = 263
Top = 8 Top = 8
Width = 310 Width = 288
Anchors = [akTop, akLeft, akRight, akBottom] Align = alLeft
BorderSpacing.Left = 8 BorderSpacing.Left = 8
BorderSpacing.Top = 8 BorderSpacing.Top = 8
BorderSpacing.Right = 8 BorderSpacing.Right = 4
BorderSpacing.Bottom = 8 BorderSpacing.Bottom = 8
BevelOuter = bvNone BevelOuter = bvNone
ClientHeight = 263 ClientHeight = 397
ClientWidth = 310 ClientWidth = 288
TabOrder = 0 TabOrder = 0
object ResetBtn: TButton
AnchorSideRight.Control = ComputeBtn
AnchorSideBottom.Control = ParamsPanel
AnchorSideBottom.Side = asrBottom
Left = 87
Height = 25
Top = 372
Width = 54
Anchors = [akRight, akBottom]
AutoSize = True
BorderSpacing.Top = 8
BorderSpacing.Right = 8
Caption = 'Reset'
OnClick = ResetBtnClick
TabOrder = 0
end
object ComputeBtn: TButton
AnchorSideRight.Control = CloseBtn
AnchorSideBottom.Control = ParamsPanel
AnchorSideBottom.Side = asrBottom
Left = 149
Height = 25
Top = 372
Width = 76
Anchors = [akRight, akBottom]
AutoSize = True
BorderSpacing.Left = 8
BorderSpacing.Top = 8
BorderSpacing.Right = 8
Caption = 'Compute'
OnClick = ComputeBtnClick
TabOrder = 1
end
object CloseBtn: TButton
AnchorSideRight.Control = ParamsPanel
AnchorSideRight.Side = asrBottom
AnchorSideBottom.Control = ParamsPanel
AnchorSideBottom.Side = asrBottom
Left = 233
Height = 25
Top = 372
Width = 55
Anchors = [akRight, akBottom]
AutoSize = True
BorderSpacing.Left = 8
BorderSpacing.Top = 8
Caption = 'Close'
ModalResult = 11
OnClick = CloseBtnClick
TabOrder = 2
end
object Bevel1: TBevel
AnchorSideLeft.Control = ParamsPanel
AnchorSideRight.Control = ParamsPanel
AnchorSideRight.Side = asrBottom
AnchorSideBottom.Control = ResetBtn
Left = 0
Height = 8
Top = 356
Width = 288
Anchors = [akLeft, akRight, akBottom]
Shape = bsBottomLine
end
object OptionsGroup: TGroupBox
AnchorSideLeft.Control = ParamsPanel
AnchorSideBottom.Control = Bevel1
Left = 0
Height = 83
Top = 273
Width = 302
Anchors = [akLeft, akBottom]
AutoSize = True
BorderSpacing.Top = 8
Caption = 'Option:'
ClientHeight = 63
ClientWidth = 298
TabOrder = 3
object BothChk: TCheckBox
AnchorSideLeft.Control = OptionsGroup
AnchorSideTop.Control = OptionsGroup
Left = 16
Height = 19
Top = 6
Width = 270
BorderSpacing.Left = 16
BorderSpacing.Top = 6
BorderSpacing.Right = 12
BorderSpacing.Bottom = 8
Caption = 'Plot both Frequency and cumulative Frequency'
TabOrder = 0
end
object VertBarBtn: TSpeedButton
AnchorSideLeft.Control = OptionsGroup
AnchorSideTop.Control = BothChk
AnchorSideTop.Side = asrBottom
Left = 16
Height = 22
Top = 33
Width = 23
BorderSpacing.Left = 16
BorderSpacing.Bottom = 8
Images = MainDataModule.ImageList
ImageIndex = 8
end
object LinePlotBtn: TSpeedButton
AnchorSideLeft.Control = VertBarBtn
AnchorSideLeft.Side = asrBottom
AnchorSideTop.Control = VertBarBtn
AnchorSideTop.Side = asrCenter
Left = 43
Height = 22
Top = 33
Width = 23
BorderSpacing.Left = 4
Images = MainDataModule.ImageList
ImageIndex = 10
end
object ThreeDChk: TCheckBox
AnchorSideLeft.Control = LinePlotBtn
AnchorSideLeft.Side = asrBottom
AnchorSideTop.Control = VertBarBtn
AnchorSideTop.Side = asrCenter
Left = 82
Height = 19
Top = 35
Width = 34
BorderSpacing.Left = 16
Caption = '3D'
TabOrder = 1
end
end
object Label1: TLabel object Label1: TLabel
AnchorSideLeft.Control = Panel1 AnchorSideLeft.Control = ParamsPanel
AnchorSideTop.Control = Panel1 AnchorSideTop.Control = ParamsPanel
Left = 0 Left = 0
Height = 15 Height = 15
Top = 0 Top = 0
@ -250,152 +167,258 @@ object CompareDistFrm: TCompareDistFrm
ParentColor = False ParentColor = False
end end
object VarList: TListBox object VarList: TListBox
AnchorSideLeft.Control = Panel1 AnchorSideLeft.Control = ParamsPanel
AnchorSideTop.Control = Label1 AnchorSideTop.Control = Label1
AnchorSideTop.Side = asrBottom AnchorSideTop.Side = asrBottom
AnchorSideRight.Control = VerticalCenterBevel AnchorSideRight.Control = Var1InBtn
AnchorSideBottom.Control = Panel1 AnchorSideBottom.Control = OptionsGroup
AnchorSideBottom.Side = asrBottom
Left = 0 Left = 0
Height = 246 Height = 248
Top = 17 Top = 17
Width = 150 Width = 99
Anchors = [akTop, akLeft, akRight, akBottom] Anchors = [akTop, akLeft, akRight, akBottom]
BorderSpacing.Top = 2 BorderSpacing.Top = 2
BorderSpacing.Right = 6
BorderSpacing.Bottom = 8
ItemHeight = 0 ItemHeight = 0
OnDblClick = VarListDblClick
OnSelectionChange = VarListSelectionChange OnSelectionChange = VarListSelectionChange
TabOrder = 0 TabOrder = 4
end end
object Var1InBtn: TBitBtn object Var1InBtn: TBitBtn
AnchorSideLeft.Control = VerticalCenterBevel AnchorSideLeft.Control = CompareGroup
AnchorSideLeft.Side = asrBottom AnchorSideTop.Control = VarList
AnchorSideBottom.Control = Var1OutBtn AnchorSideRight.Control = VarOneEdit
Left = 160 Left = 105
Height = 28 Height = 26
Top = 53 Top = 17
Width = 28 Width = 26
Anchors = [akLeft, akBottom] BorderSpacing.Right = 6
BorderSpacing.Bottom = 4 BorderSpacing.Bottom = 4
Images = MainDataModule.ImageList Images = MainDataModule.ImageList
ImageIndex = 1 ImageIndex = 1
OnClick = Var1InBtnClick OnClick = Var1InBtnClick
Spacing = 0 Spacing = 0
TabOrder = 1 TabOrder = 5
end end
object Var1OutBtn: TBitBtn object Var1OutBtn: TBitBtn
AnchorSideLeft.Control = Var1InBtn AnchorSideLeft.Control = Var1InBtn
AnchorSideBottom.Control = VerticalCenterBevel AnchorSideTop.Control = Var1InBtn
Left = 160 AnchorSideTop.Side = asrBottom
Height = 28 Left = 105
Top = 85 Height = 26
Width = 28 Top = 47
Anchors = [akLeft, akBottom] Width = 26
Images = MainDataModule.ImageList Images = MainDataModule.ImageList
ImageIndex = 0 ImageIndex = 0
OnClick = Var1OutBtnClick OnClick = Var1OutBtnClick
Spacing = 0 Spacing = 0
TabOrder = 2 TabOrder = 6
end
object Var2InBtn: TBitBtn
AnchorSideLeft.Control = VerticalCenterBevel
AnchorSideLeft.Side = asrBottom
AnchorSideTop.Control = VerticalCenterBevel
AnchorSideTop.Side = asrBottom
Left = 160
Height = 28
Top = 168
Width = 28
Images = MainDataModule.ImageList
ImageIndex = 1
OnClick = Var2InBtnClick
Spacing = 0
TabOrder = 3
end
object Var2OutBtn: TBitBtn
AnchorSideLeft.Control = Var2InBtn
AnchorSideTop.Control = Var2InBtn
AnchorSideTop.Side = asrBottom
Left = 160
Height = 28
Top = 200
Width = 28
BorderSpacing.Top = 4
Images = MainDataModule.ImageList
ImageIndex = 0
OnClick = Var2OutBtnClick
Spacing = 0
TabOrder = 4
end end
object Label2: TLabel object Label2: TLabel
AnchorSideLeft.Control = VarOneEdit AnchorSideLeft.Control = VarOneEdit
AnchorSideBottom.Control = VarOneEdit AnchorSideBottom.Control = VarOneEdit
Left = 196 Left = 139
Height = 15 Height = 15
Top = 61 Top = 21
Width = 66 Width = 66
Anchors = [akLeft, akBottom] Anchors = [akLeft, akBottom]
BorderSpacing.Bottom = 2 BorderSpacing.Bottom = 2
Caption = 'Variable One' Caption = 'Variable One'
ParentColor = False ParentColor = False
end end
object Label3: TLabel
AnchorSideLeft.Control = VarTwoEdit
AnchorSideBottom.Control = VarTwoEdit
Left = 196
Height = 15
Top = 176
Width = 65
Anchors = [akLeft, akBottom]
BorderSpacing.Bottom = 2
Caption = 'Variable Two'
ParentColor = False
end
object VarOneEdit: TEdit object VarOneEdit: TEdit
AnchorSideLeft.Control = Var1InBtn AnchorSideLeft.Control = Var1InBtn
AnchorSideLeft.Side = asrBottom AnchorSideLeft.Side = asrBottom
AnchorSideRight.Control = Panel1 AnchorSideRight.Control = ParamsPanel
AnchorSideRight.Side = asrBottom AnchorSideRight.Side = asrBottom
AnchorSideBottom.Control = Var1OutBtn AnchorSideBottom.Control = Var1OutBtn
AnchorSideBottom.Side = asrBottom AnchorSideBottom.Side = asrBottom
Left = 196 Left = 139
Height = 23 Height = 23
Top = 78 Top = 38
Width = 114 Width = 149
Anchors = [akLeft, akRight, akBottom] Anchors = [akLeft, akRight, akBottom]
BorderSpacing.Left = 8 BorderSpacing.Left = 8
BorderSpacing.Bottom = 12 BorderSpacing.Bottom = 12
ReadOnly = True ReadOnly = True
TabOrder = 5 TabOrder = 7
Text = 'VarOneEdit' Text = 'VarOneEdit'
end end
object VarTwoEdit: TEdit object CompareGroup: TRadioGroup
AnchorSideLeft.Control = Var2InBtn AnchorSideLeft.Control = Var1InBtn
AnchorSideLeft.Side = asrBottom AnchorSideTop.Control = Var1OutBtn
AnchorSideRight.Control = Panel1 AnchorSideTop.Side = asrBottom
AnchorSideRight.Control = ParamsPanel
AnchorSideRight.Side = asrBottom AnchorSideRight.Side = asrBottom
AnchorSideBottom.Control = Var2OutBtn Left = 105
AnchorSideBottom.Side = asrBottom Height = 76
Left = 196 Top = 81
Height = 23 Width = 183
Top = 193 Anchors = [akTop, akRight]
Width = 114 AutoFill = True
Anchors = [akLeft, akRight, akBottom] AutoSize = True
BorderSpacing.Left = 8 BorderSpacing.Top = 8
BorderSpacing.Bottom = 12 BorderSpacing.Bottom = 8
ReadOnly = True Caption = 'Compare To:'
TabOrder = 6 ChildSizing.LeftRightSpacing = 18
Text = 'Edit1' ChildSizing.TopBottomSpacing = 8
ChildSizing.VerticalSpacing = 2
ChildSizing.EnlargeHorizontal = crsHomogenousChildResize
ChildSizing.EnlargeVertical = crsHomogenousChildResize
ChildSizing.ShrinkHorizontal = crsScaleChilds
ChildSizing.ShrinkVertical = crsScaleChilds
ChildSizing.Layout = cclLeftToRightThenTopToBottom
ChildSizing.ControlsPerLine = 1
ClientHeight = 56
ClientWidth = 179
ItemIndex = 0
Items.Strings = (
'Theoretical Distribution'
'Another Variable'
)
OnClick = CompareGroupClick
TabOrder = 8
end end
object VerticalCenterBevel: TBevel object Notebook: TNotebook
AnchorSideLeft.Control = Panel1 AnchorSideLeft.Control = CompareGroup
AnchorSideLeft.Side = asrCenter AnchorSideTop.Control = CompareGroup
AnchorSideTop.Control = VarList AnchorSideTop.Side = asrBottom
AnchorSideTop.Side = asrCenter AnchorSideRight.Control = CompareGroup
Left = 150 AnchorSideRight.Side = asrBottom
Height = 55 Left = 105
Top = 113 Height = 60
Width = 10 Top = 165
Shape = bsSpacer Width = 183
PageIndex = 1
AutoSize = True
Anchors = [akTop, akLeft, akRight]
BorderSpacing.Bottom = 8
TabOrder = 9
object TheoreticalDistPage: TPage
object DistGroup: TRadioGroup
AnchorSideLeft.Control = TheoreticalDistPage
AnchorSideTop.Control = TheoreticalDistPage
AnchorSideRight.Control = TheoreticalDistPage
AnchorSideRight.Side = asrBottom
Left = 0
Height = 139
Top = 16
Width = 183
Anchors = [akTop, akLeft, akRight]
AutoFill = True
AutoSize = True
BorderSpacing.Top = 16
Caption = 'Theoretical Distributions:'
ChildSizing.LeftRightSpacing = 18
ChildSizing.TopBottomSpacing = 8
ChildSizing.VerticalSpacing = 2
ChildSizing.EnlargeHorizontal = crsHomogenousChildResize
ChildSizing.EnlargeVertical = crsHomogenousChildResize
ChildSizing.ShrinkHorizontal = crsScaleChilds
ChildSizing.ShrinkVertical = crsScaleChilds
ChildSizing.Layout = cclLeftToRightThenTopToBottom
ChildSizing.ControlsPerLine = 1
ClientHeight = 119
ClientWidth = 179
Items.Strings = (
'Normal Distribution'
't-Distribution'
'Chi-Sq Distribution'
'F Distribution'
'Poisson Distribution'
)
OnClick = DistGroupClick
TabOrder = 0
end
end
object VariablePage: TPage
object Var2InBtn: TBitBtn
AnchorSideLeft.Control = VariablePage
AnchorSideTop.Control = VariablePage
Left = 0
Height = 28
Top = 0
Width = 28
Images = MainDataModule.ImageList
ImageIndex = 1
OnClick = Var2InBtnClick
Spacing = 0
TabOrder = 0
end
object Var2OutBtn: TBitBtn
AnchorSideLeft.Control = VariablePage
AnchorSideTop.Control = Var2InBtn
AnchorSideTop.Side = asrBottom
Left = 0
Height = 28
Top = 32
Width = 28
BorderSpacing.Top = 4
Images = MainDataModule.ImageList
ImageIndex = 0
OnClick = Var2OutBtnClick
Spacing = 0
TabOrder = 1
end
object Label3: TLabel
AnchorSideLeft.Control = VarTwoEdit
AnchorSideBottom.Control = VarTwoEdit
Left = 36
Height = 15
Top = 8
Width = 65
Anchors = [akLeft, akBottom]
BorderSpacing.Bottom = 2
Caption = 'Variable Two'
ParentColor = False
end
object VarTwoEdit: TEdit
AnchorSideLeft.Control = Var2InBtn
AnchorSideLeft.Side = asrBottom
AnchorSideRight.Control = VariablePage
AnchorSideRight.Side = asrBottom
AnchorSideBottom.Control = Var2OutBtn
AnchorSideBottom.Side = asrBottom
Left = 36
Height = 23
Top = 25
Width = 147
Anchors = [akLeft, akRight, akBottom]
BorderSpacing.Left = 8
BorderSpacing.Bottom = 12
ReadOnly = True
TabOrder = 2
Text = 'Edit1'
end
end
end end
end end
object PageControl1: TPageControl[1]
Left = 309
Height = 397
Top = 8
Width = 607
ActivePage = ReportPage
Align = alClient
BorderSpacing.Left = 4
BorderSpacing.Top = 8
BorderSpacing.Right = 8
BorderSpacing.Bottom = 8
TabIndex = 0
TabOrder = 1
object ReportPage: TTabSheet
Caption = 'Report'
end
object ChartPage: TTabSheet
Caption = 'Chart'
end
end
object ParamsSplitter: TSplitter[2]
Left = 300
Height = 413
Top = 0
Width = 5
ResizeStyle = rsPattern
end
end end

View File

@ -8,22 +8,29 @@ interface
uses uses
Classes, SysUtils, FileUtil, LResources, Forms, Controls, Graphics, Dialogs, Classes, SysUtils, FileUtil, LResources, Forms, Controls, Graphics, Dialogs,
StdCtrls, Buttons, ExtCtrls, StdCtrls, Buttons, ExtCtrls, ComCtrls,
OutputUnit, FunctionsLib, Globals, GraphLib, DataProcs, MainUnit; FunctionsLib, Globals, GraphLib, DataProcs, MainDM, MainUnit,
BasicStatsFormUnit, ReportFrameUnit, ChartFrameUnit;
type type
{ TCompareDistFrm } { TCompareDistFrm }
TCompareDistFrm = class(TForm) TCompareDistFrm = class(TBasicStatsForm)
Bevel1: TBevel; Bevel1: TBevel;
LinesChk: TRadioButton; PageControl1: TPageControl;
PointsChk: TRadioButton; ParamsSplitter: TSplitter;
VerticalCenterBevel: TBevel; ReportPage: TTabSheet;
ChartPage: TTabSheet;
ThreeDChk: TCheckBox;
Notebook: TNotebook;
VertBarBtn: TSpeedButton;
LinePlotBtn: TSpeedButton;
TheoreticalDistPage: TPage;
VariablePage: TPage;
ParamsPanel: TPanel;
BothChk: TCheckBox; BothChk: TCheckBox;
GroupBox1: TGroupBox; OptionsGroup: TGroupBox;
Panel1: TPanel;
PlotTypeGrp: TGroupBox;
ResetBtn: TButton; ResetBtn: TButton;
ComputeBtn: TButton; ComputeBtn: TButton;
CloseBtn: TButton; CloseBtn: TButton;
@ -45,88 +52,69 @@ type
procedure DistGroupClick(Sender: TObject); procedure DistGroupClick(Sender: TObject);
procedure FormActivate(Sender: TObject); procedure FormActivate(Sender: TObject);
procedure FormCreate(Sender: TObject); procedure FormCreate(Sender: TObject);
procedure FormShow(Sender: TObject);
procedure ResetBtnClick(Sender: TObject); procedure ResetBtnClick(Sender: TObject);
procedure Var1InBtnClick(Sender: TObject); procedure Var1InBtnClick(Sender: TObject);
procedure Var1OutBtnClick(Sender: TObject); procedure Var1OutBtnClick(Sender: TObject);
procedure Var2InBtnClick(Sender: TObject); procedure Var2InBtnClick(Sender: TObject);
procedure Var2OutBtnClick(Sender: TObject); procedure Var2OutBtnClick(Sender: TObject);
procedure VarListSelectionChange(Sender: TObject; User: boolean); procedure VarListDblClick(Sender: TObject);
procedure VarListSelectionChange(Sender: TObject; {%H-}User: boolean);
private private
{ private declarations } FReportFrame: TReportFrame;
compareto: integer; FChartFrame: TChartFrame;
disttype: integer;
FAutoSized: Boolean; FAutoSized: Boolean;
CompareTo: integer;
DistType: integer;
procedure UpdateBtnStates; procedure UpdateBtnStates;
public public
{ public declarations } procedure Reset; override;
end; end;
var var
CompareDistFrm: TCompareDistFrm; CompareDistFrm: TCompareDistFrm;
implementation implementation
{$R *.lfm}
uses uses
Math, Math,
Utils, MathUnit; Utils, MathUnit;
{ TCompareDistFrm } { TCompareDistFrm }
procedure TCompareDistFrm.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;
Panel1.Constraints.MinWidth := Groupbox1.Width;
Panel1.Constraints.MinHeight := PlotTypeGrp.Top + PlotTypeGrp.Height - GroupBox1.Height - Panel1.BorderSpacing.Bottom - Panel1.Top;
Constraints.MinWidth := Width;
Constraints.MinHeight := Height;
FAutoSized := true;
end;
procedure TCompareDistFrm.FormCreate(Sender: TObject);
begin
Assert(OS3MainFrm <> nil);
if GraphFrm = nil then Application.CreateForm(TGraphFrm, GraphFrm);
end;
procedure TCompareDistFrm.FormShow(Sender: TObject);
begin
ResetBtnClick(nil);
end;
procedure TCompareDistFrm.CompareGroupClick(Sender: TObject);
begin
compareTo := CompareGroup.ItemIndex;
Label3.Enabled := (compareTo = 1);
VarTwoEdit.Enabled := (compareTo = 1);
Var2InBtn.Enabled := (compareTo = 1);
Var2OutBtn.Enabled := (compareTo = 1);
end;
procedure TCompareDistFrm.CloseBtnClick(Sender: TObject); procedure TCompareDistFrm.CloseBtnClick(Sender: TObject);
begin begin
Close; Close;
end; end;
procedure TCompareDistFrm.CompareGroupClick(Sender: TObject);
begin
compareTo := CompareGroup.ItemIndex;
Notebook.PageIndex := CompareGroup.ItemIndex;
{
Label3.Enabled := (compareTo = 1);
VarTwoEdit.Enabled := (compareTo = 1);
Var2InBtn.Enabled := (compareTo = 1);
Var2OutBtn.Enabled := (compareTo = 1);
}
end;
procedure TCompareDistFrm.ComputeBtnClick(Sender: TObject); procedure TCompareDistFrm.ComputeBtnClick(Sender: TObject);
var var
Var1Freq : IntDyneVec; Var1Freq : IntDyneVec = nil;
Var2Freq : IntDyneVec; Var2Freq : IntDyneVec = nil;
XValue1 : DblDyneVec; XValue1 : DblDyneVec = nil;
XValue2 : DblDyneVec; XValue2 : DblDyneVec = nil;
Cumfreq1 : DblDyneVec; Cumfreq1 : DblDyneVec = nil;
Cumfreq2 : DblDyneVec; Cumfreq2 : DblDyneVec = nil;
i, j, k, col1, col2, Ncases, noints : integer; i, j, k, col1, col2, Ncases, noints : integer;
min1, max1, min2, max2, range1, range2, value : double; min1, max1, min2, max2, range1, range2, value : double;
incrsize1, incrsize2, prob1,prob2, {%H-}KS, mean, DegFree : double; incrsize1, incrsize2, prob1,prob2, {%H-}KS, mean, DegFree : double;
@ -415,7 +403,7 @@ begin
KS := KolmogorovTest(noints, Cumfreq1,noints, Cumfreq2, cellval, lReport); KS := KolmogorovTest(noints, Cumfreq1,noints, Cumfreq2, cellval, lReport);
// lReport.Add('Kolmogorov-Smirnov statistic := %5.3f', [KS]); // lReport.Add('Kolmogorov-Smirnov statistic := %5.3f', [KS]);
DisplayReport(lReport); FReportFrame.DisplayReport(lReport);
finally finally
lReport.Free; lReport.Free;
end; end;
@ -423,11 +411,12 @@ begin
// plot the cdfs // plot the cdfs
xtitle := 'Red = ' + VarOneEdit.Text + ' Blue = ' + name2; xtitle := 'Red = ' + VarOneEdit.Text + ' Blue = ' + name2;
cellval := 'Plot of Cumulative Distributions'; cellval := 'Plot of Cumulative Distributions';
{
if LinesChk.Checked then if LinesChk.Checked then
GraphFrm.barwideprop := 1.0 GraphFrm.barwideprop := 1.0
else else
GraphFrm.barwideprop := 0.5; GraphFrm.barwideprop := 0.5;
}
GraphFrm.nosets := 2; GraphFrm.nosets := 2;
GraphFrm.nbars := noints+1; GraphFrm.nbars := noints+1;
GraphFrm.Heading := cellval; GraphFrm.Heading := cellval;
@ -442,10 +431,12 @@ begin
GraphFrm.Xpoints[0,k-1] := k; GraphFrm.Xpoints[0,k-1] := k;
end; end;
GraphFrm.AutoScaled := true; GraphFrm.AutoScaled := true;
{
if LinesChk.Checked then if LinesChk.Checked then
GraphFrm.GraphType := 6 // 3d lines GraphFrm.GraphType := 6 // 3d lines
else else
GraphFrm.GraphType := 8; // 3D points GraphFrm.GraphType := 8; // 3D points
}
GraphFrm.BackColor := clYellow; GraphFrm.BackColor := clYellow;
GraphFrm.WallColor := clBlue; GraphFrm.WallColor := clBlue;
GraphFrm.FloorColor := clGray; GraphFrm.FloorColor := clGray;
@ -461,10 +452,12 @@ begin
begin begin
xtitle := 'Red = ' + VarOneEdit.Text + ' Blue = ' + name2; xtitle := 'Red = ' + VarOneEdit.Text + ' Blue = ' + name2;
cellval := 'Plot of Cumulative Distributions'; cellval := 'Plot of Cumulative Distributions';
{
if LinesChk.Checked then if LinesChk.Checked then
GraphFrm.BarWideProp := 1.0 GraphFrm.BarWideProp := 1.0
else else
GraphFrm.BarWideProp := 0.5; GraphFrm.BarWideProp := 0.5;
}
GraphFrm.nosets := 2; GraphFrm.nosets := 2;
GraphFrm.nbars := noints+1; GraphFrm.nbars := noints+1;
GraphFrm.Heading := cellval; GraphFrm.Heading := cellval;
@ -479,10 +472,12 @@ begin
GraphFrm.Xpoints[0,k-1] := k; GraphFrm.Xpoints[0,k-1] := k;
end; end;
GraphFrm.AutoScaled := true; GraphFrm.AutoScaled := true;
{
if LinesChk.Checked then if LinesChk.Checked then
GraphFrm.GraphType := 6 // 3d lines GraphFrm.GraphType := 6 // 3d lines
else else
GraphFrm.GraphType := 8; // 3D points GraphFrm.GraphType := 8; // 3D points
}
GraphFrm.BackColor := clYellow; GraphFrm.BackColor := clYellow;
GraphFrm.WallColor := clBlue; GraphFrm.WallColor := clBlue;
GraphFrm.FloorColor := clGray; GraphFrm.FloorColor := clGray;
@ -504,12 +499,69 @@ begin
Var1Freq := nil; Var1Freq := nil;
end; end;
procedure TCompareDistFrm.DistGroupClick(Sender: TObject); procedure TCompareDistFrm.DistGroupClick(Sender: TObject);
begin begin
disttype := DistGroup.ItemIndex; DistType := DistGroup.ItemIndex;
end; end;
procedure TCompareDistFrm.ResetBtnClick(Sender: TObject);
procedure TCompareDistFrm.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;
Notebook.AutoSize := true;
ParamsPanel.Constraints.MinWidth := Max(
3*w + 2*CloseBtn.BorderSpacing.Left,
Min(
CompareGroup.Width * 2 - Var1InBtn.Width + VarList.BorderSpacing.Right,
OptionsGroup.Width)
);
ParamsPanel.Constraints.MinHeight := Notebook.Top + Notebook.Height +
OptionsGroup.BorderSpacing.Top + OptionsGroup.Height + Bevel1.Height +
CloseBtn.Height + CloseBtn.BorderSpacing.Top;
Constraints.MinWidth := ParamsPanel.Constraints.MinWidth + 300;
Constraints.MinHeight := ParamsPanel.Constraints.MinHeight + ParamsPanel.BorderSpacing.Top * 2;
if Width < Constraints.MinWidth then Width := 1;
if Height < Constraints.MinHeight then Height := 1;
Notebook.AutoSize := false;
Position := poDesigned;
FAutoSized := true;
end;
procedure TCompareDistFrm.FormCreate(Sender: TObject);
begin
Assert(OS3MainFrm <> nil);
if GraphFrm = nil then Application.CreateForm(TGraphFrm, GraphFrm);
InitForm(self);
FReportFrame := TReportFrame.Create(self);
FReportFrame.Parent := ReportPage;
FReportFrame.Align := alClient;
FChartFrame := TChartFrame.Create(self);
FChartFrame.Parent := ChartPage;
FChartFrame.Align := alClient;
FChartFrame.Chart.BottomAxis.Intervals.MaxLength := 80;
FChartFrame.Chart.BottomAxis.Intervals.MinLength := 30;
Reset;
end;
procedure TCompareDistFrm.Reset;
var var
i: integer; i: integer;
begin begin
@ -518,13 +570,33 @@ begin
VarTwoEdit.Text := ''; VarTwoEdit.Text := '';
for i := 1 to NoVariables do for i := 1 to NoVariables do
VarList.Items.Add(OS3MainFrm.DataGrid.Cells[i,0]); VarList.Items.Add(OS3MainFrm.DataGrid.Cells[i,0]);
Label3.Enabled := false;
CompareGroup.ItemIndex := 0; CompareGroup.ItemIndex := 0;
CompareGroupClick(nil);
DistGroup.ItemIndex := 0; DistGroup.ItemIndex := 0;
LinesChk.Checked := false;
PointsChk.Checked := true; FReportFrame.Clear;
FChartFrame.Clear;
end; end;
procedure TCompareDistFrm.ResetBtnClick(Sender: TObject);
begin
Reset;
end;
procedure TCompareDistFrm.UpdateBtnStates;
begin
Var1InBtn.Enabled := (VarList.ItemIndex > -1) and (VarOneEdit.Text = '');
Var2InBtn.Enabled := (VarList.ItemIndex > -1) and (VarTwoEdit.Text = '');
Var1OutBtn.Enabled := VarOneEdit.Text <> '';
Var2OutBtn.Enabled := VarTwoEdit.Text <> '';
FReportFrame.UpdateBtnStates;
FChartFrame.UpdateBtnStates;
end;
procedure TCompareDistFrm.Var1InBtnClick(Sender: TObject); procedure TCompareDistFrm.Var1InBtnClick(Sender: TObject);
var var
i: integer; i: integer;
@ -543,6 +615,7 @@ begin
UpdateBtnStates; UpdateBtnStates;
end; end;
procedure TCompareDistFrm.Var1OutBtnClick(Sender: TObject); procedure TCompareDistFrm.Var1OutBtnClick(Sender: TObject);
begin begin
if VarOneEdit.Text <> '' then if VarOneEdit.Text <> '' then
@ -553,6 +626,7 @@ begin
UpdateBtnStates; UpdateBtnStates;
end; end;
procedure TCompareDistFrm.Var2InBtnClick(Sender: TObject); procedure TCompareDistFrm.Var2InBtnClick(Sender: TObject);
var var
i: integer; i: integer;
@ -571,6 +645,7 @@ begin
UpdateBtnStates; UpdateBtnStates;
end; end;
procedure TCompareDistFrm.Var2OutBtnClick(Sender: TObject); procedure TCompareDistFrm.Var2OutBtnClick(Sender: TObject);
begin begin
if VarTwoEdit.Text <> '' then if VarTwoEdit.Text <> '' then
@ -581,21 +656,34 @@ begin
UpdateBtnStates; UpdateBtnStates;
end; end;
procedure TCompareDistFrm.VarListDblClick(Sender: TObject);
var
index: Integer;
begin
index := VarList.ItemIndex;
if (index > -1) then
begin
if VarOneEdit.Text = '' then
begin
VarOneEdit.Text := VarList.Items[index];
VarList.Items.Delete(index);
end;
if CompareGroup.ItemIndex = 1 then // Compare to another variable
begin
VarTwoEdit.Text := VarList.Items[index];
VarList.Items.Delete(index);
end;
UpdateBtnStates;
end;
end;
procedure TCompareDistFrm.VarListSelectionChange(Sender: TObject; User: boolean); procedure TCompareDistFrm.VarListSelectionChange(Sender: TObject; User: boolean);
begin begin
UpdateBtnStates; UpdateBtnStates;
end; end;
procedure TCompareDistFrm.UpdateBtnStates;
begin
Var1InBtn.Enabled := (VarList.ItemIndex > -1) and (VarOneEdit.Text = '');
Var2InBtn.Enabled := (VarList.ItemIndex > -1) and (VarTwoEdit.Text = '');
Var1OutBtn.Enabled := VarOneEdit.Text <> '';
Var2OutBtn.Enabled := VarTwoEdit.Text <> '';
end;
initialization
{$I comparedistunit.lrs}
end. end.

View File

@ -1,20 +1,19 @@
object FreqFrm: TFreqFrm inherited FreqFrm: TFreqFrm
Left = 490 Left = 490
Height = 376 Height = 385
Top = 228 Top = 228
Width = 835 Width = 835
HelpType = htKeyword HelpType = htKeyword
HelpKeyword = 'html/FrequencyAnalysis.htm' HelpKeyword = 'html/FrequencyAnalysis.htm'
Caption = 'Frequency Distribution' Caption = 'Frequency Distribution'
ClientHeight = 376 ClientHeight = 385
ClientWidth = 835 ClientWidth = 835
OnActivate = FormActivate OnActivate = FormActivate
OnCreate = FormCreate OnCreate = FormCreate
Position = poMainFormCenter Position = poMainFormCenter
LCLVersion = '2.1.0.0' object ParamsPanel: TPanel[0]
object ParamsPanel: TPanel
Left = 8 Left = 8
Height = 360 Height = 369
Top = 8 Top = 8
Width = 264 Width = 264
Align = alLeft Align = alLeft
@ -23,7 +22,7 @@ object FreqFrm: TFreqFrm
BorderSpacing.Right = 4 BorderSpacing.Right = 4
BorderSpacing.Bottom = 8 BorderSpacing.Bottom = 8
BevelOuter = bvNone BevelOuter = bvNone
ClientHeight = 360 ClientHeight = 369
ClientWidth = 264 ClientWidth = 264
TabOrder = 0 TabOrder = 0
object Panel1: TPanel object Panel1: TPanel
@ -33,12 +32,12 @@ object FreqFrm: TFreqFrm
AnchorSideRight.Side = asrBottom AnchorSideRight.Side = asrBottom
AnchorSideBottom.Control = NormPltChk AnchorSideBottom.Control = NormPltChk
Left = 0 Left = 0
Height = 163 Height = 172
Top = 0 Top = 0
Width = 264 Width = 264
Anchors = [akTop, akLeft, akRight, akBottom] Anchors = [akTop, akLeft, akRight, akBottom]
BevelOuter = bvNone BevelOuter = bvNone
ClientHeight = 163 ClientHeight = 172
ClientWidth = 264 ClientWidth = 264
TabOrder = 0 TabOrder = 0
object Label1: TLabel object Label1: TLabel
@ -69,7 +68,7 @@ object FreqFrm: TFreqFrm
AnchorSideBottom.Control = Panel1 AnchorSideBottom.Control = Panel1
AnchorSideBottom.Side = asrBottom AnchorSideBottom.Side = asrBottom
Left = 0 Left = 0
Height = 146 Height = 155
Top = 17 Top = 17
Width = 105 Width = 105
Anchors = [akTop, akLeft, akRight, akBottom] Anchors = [akTop, akLeft, akRight, akBottom]
@ -91,7 +90,7 @@ object FreqFrm: TFreqFrm
AnchorSideBottom.Control = Panel1 AnchorSideBottom.Control = Panel1
AnchorSideBottom.Side = asrBottom AnchorSideBottom.Side = asrBottom
Left = 159 Left = 159
Height = 146 Height = 155
Top = 17 Top = 17
Width = 105 Width = 105
Anchors = [akTop, akLeft, akRight, akBottom] Anchors = [akTop, akLeft, akRight, akBottom]
@ -151,7 +150,7 @@ object FreqFrm: TFreqFrm
AnchorSideBottom.Control = BinSelectionGroup AnchorSideBottom.Control = BinSelectionGroup
Left = 58 Left = 58
Height = 19 Height = 19
Top = 171 Top = 180
Width = 149 Width = 149
Anchors = [akLeft, akBottom] Anchors = [akLeft, akBottom]
BorderSpacing.Top = 8 BorderSpacing.Top = 8
@ -165,7 +164,7 @@ object FreqFrm: TFreqFrm
AnchorSideBottom.Control = CloseBtn AnchorSideBottom.Control = CloseBtn
Left = 0 Left = 0
Height = 8 Height = 8
Top = 319 Top = 328
Width = 264 Width = 264
Anchors = [akLeft, akRight, akBottom] Anchors = [akLeft, akRight, akBottom]
Shape = bsBottomLine Shape = bsBottomLine
@ -177,7 +176,7 @@ object FreqFrm: TFreqFrm
AnchorSideBottom.Side = asrBottom AnchorSideBottom.Side = asrBottom
Left = 63 Left = 63
Height = 25 Height = 25
Top = 335 Top = 344
Width = 54 Width = 54
Anchors = [akRight, akBottom] Anchors = [akRight, akBottom]
AutoSize = True AutoSize = True
@ -194,7 +193,7 @@ object FreqFrm: TFreqFrm
AnchorSideBottom.Side = asrBottom AnchorSideBottom.Side = asrBottom
Left = 209 Left = 209
Height = 25 Height = 25
Top = 335 Top = 344
Width = 55 Width = 55
Anchors = [akRight, akBottom] Anchors = [akRight, akBottom]
AutoSize = True AutoSize = True
@ -211,7 +210,7 @@ object FreqFrm: TFreqFrm
AnchorSideBottom.Side = asrBottom AnchorSideBottom.Side = asrBottom
Left = 125 Left = 125
Height = 25 Height = 25
Top = 335 Top = 344
Width = 76 Width = 76
Anchors = [akRight, akBottom] Anchors = [akRight, akBottom]
AutoSize = True AutoSize = True
@ -230,7 +229,7 @@ object FreqFrm: TFreqFrm
AnchorSideBottom.Control = Bevel1 AnchorSideBottom.Control = Bevel1
Left = 0 Left = 0
Height = 52 Height = 52
Top = 267 Top = 276
Width = 255 Width = 255
Anchors = [akLeft, akRight, akBottom] Anchors = [akLeft, akRight, akBottom]
AutoSize = True AutoSize = True
@ -318,7 +317,7 @@ object FreqFrm: TFreqFrm
AnchorSideBottom.Control = PlotOptionsGroup AnchorSideBottom.Control = PlotOptionsGroup
Left = 0 Left = 0
Height = 57 Height = 57
Top = 202 Top = 211
Width = 255 Width = 255
Anchors = [akLeft, akBottom] Anchors = [akLeft, akBottom]
AutoSize = True AutoSize = True
@ -373,16 +372,16 @@ object FreqFrm: TFreqFrm
end end
end end
end end
object ParamsSplitter: TSplitter object ParamsSplitter: TSplitter[1]
Left = 276 Left = 276
Height = 376 Height = 385
Top = 0 Top = 0
Width = 5 Width = 5
ResizeStyle = rsPattern ResizeStyle = rsPattern
end end
object PageControl: TPageControl object PageControl: TPageControl[2]
Left = 285 Left = 285
Height = 360 Height = 369
Top = 8 Top = 8
Width = 542 Width = 542
ActivePage = ReportPage ActivePage = ReportPage