From 67a0005f1a73b7c1e943fbb5c28a7a4a62d56b26 Mon Sep 17 00:00:00 2001 From: wp_xxyyzz Date: Sun, 1 Nov 2020 00:18:38 +0000 Subject: [PATCH] LazStats: Inherit SensUnit from TBasicStatsReportAndChartForm. Change layout to be similar that of to the other forms. git-svn-id: https://svn.code.sf.net/p/lazarus-ccr/svn@7833 8e941d3f-bd1b-0410-a28a-d453659cc2b4 --- applications/lazstats/LazStats.hlp | 1 + .../forms/analysis/nonparametric/sensunit.lfm | 633 ++++++++---------- .../forms/analysis/nonparametric/sensunit.pas | 154 +++-- .../lazstats/source/forms/mainunit.pas | 6 +- 4 files changed, 382 insertions(+), 412 deletions(-) diff --git a/applications/lazstats/LazStats.hlp b/applications/lazstats/LazStats.hlp index 02698b3b8..40a32004f 100644 --- a/applications/lazstats/LazStats.hlp +++ b/applications/lazstats/LazStats.hlp @@ -67,3 +67,4 @@ correlation, means, standard deviations and confidence interval for each correla 163=The Resistant Line procedure creates three equal groups by sorting on the X variable and obtaining the median value of each group.\n\nThe median values for these three groups on both the X and Y variables are then plotted. The line from the low group median to the middle group median is plotted as well as the line from the middle group to the top group median. A comparison of the slope of these two lines gives an indication of the degree to which the data fit a straight line. Enter the X and Y variables to be analyzed and click the compute button. 164=This procedure smooths data by averaging every three data points starting with the first three to the last three. The data smoothing can be repeated multiple times. The first and last data points are unchanged. 165=This is a test for the randomness of a series of values in a variable. Select the variable to analyze and click the Compute button. +166=Sens method for the detection and estimation of trents is used to analyze one or more variable observations collected at equally spaced intervals of time.\nFirst, select one or more series variables to analyze.\nNext, if you have entered more than one variable, indicate how the measures are to be combined (mean or median) and if the values are to be standardized (z scores with mean of 0 and standard deviation of 1.)\nFinally, select the options desired and click the compute button to complete the analysis. \ No newline at end of file diff --git a/applications/lazstats/source/forms/analysis/nonparametric/sensunit.lfm b/applications/lazstats/source/forms/analysis/nonparametric/sensunit.lfm index 1475edb78..2a0c15e5b 100644 --- a/applications/lazstats/source/forms/analysis/nonparametric/sensunit.lfm +++ b/applications/lazstats/source/forms/analysis/nonparametric/sensunit.lfm @@ -1,351 +1,300 @@ -object SensForm: TSensForm - Left = 288 - Height = 579 - Top = 161 - Width = 478 +inherited SensForm: TSensForm + Left = 414 + Height = 416 + Top = 163 + Width = 936 HelpType = htKeyword HelpKeyword = 'html/SensSlopeAnalysis.htm' - AutoSize = True Caption = 'Sens Trend Analysis' - ClientHeight = 579 - ClientWidth = 478 - OnActivate = FormActivate - OnCreate = FormCreate - OnShow = ResetBtnClick - Position = poMainFormCenter - LCLVersion = '2.1.0.0' - object GroupBox1: TGroupBox - AnchorSideTop.Control = Memo1 - AnchorSideTop.Side = asrBottom - AnchorSideRight.Control = InBtn - Left = 43 - Height = 72 - Top = 129 - Width = 182 - Anchors = [akTop, akRight] - AutoSize = True - BorderSpacing.Top = 16 - Caption = 'If more than one variable:' - ChildSizing.LeftRightSpacing = 12 - ChildSizing.TopBottomSpacing = 6 - ChildSizing.VerticalSpacing = 2 - ChildSizing.Layout = cclLeftToRightThenTopToBottom - ClientHeight = 52 - ClientWidth = 178 - TabOrder = 0 - object StandardizeChk: TCheckBox - Left = 12 - Height = 19 - Top = 6 - Width = 154 - Caption = 'Standardize the measures' - TabOrder = 0 + ClientHeight = 416 + ClientWidth = 936 + inherited ParamsPanel: TPanel + Height = 400 + Width = 344 + ClientHeight = 400 + ClientWidth = 344 + inherited CloseBtn: TButton + Left = 289 + Top = 375 end - object AvgSlopeChk: TCheckBox - Left = 12 - Height = 19 - Top = 27 - Width = 154 - Caption = 'Calculate Average Slope' - TabOrder = 1 + inherited ComputeBtn: TButton + Left = 205 + Top = 375 + end + inherited ResetBtn: TButton + Left = 143 + Top = 375 + end + inherited HelpBtn: TButton + Tag = 166 + Left = 84 + Top = 375 + end + inherited ButtonBevel: TBevel + Top = 359 + Width = 344 + end + object Label2: TLabel[5] + AnchorSideLeft.Control = ParamsPanel + AnchorSideTop.Control = ParamsPanel + Left = 0 + Height = 15 + Top = 0 + Width = 100 + Caption = 'Available Variables:' + ParentColor = False + end + object VarList: TListBox[6] + AnchorSideLeft.Control = ParamsPanel + AnchorSideTop.Control = Label2 + AnchorSideTop.Side = asrBottom + AnchorSideRight.Control = AllBtn + AnchorSideBottom.Control = GroupBox1 + Left = 0 + Height = 162 + Top = 17 + Width = 146 + Anchors = [akTop, akLeft, akRight, akBottom] + BorderSpacing.Top = 2 + BorderSpacing.Right = 6 + BorderSpacing.Bottom = 12 + ItemHeight = 0 + MultiSelect = True + OnDblClick = VarListDblClick + OnSelectionChange = VarListSelectionChange + TabOrder = 4 + end + object InBtn: TBitBtn[7] + AnchorSideLeft.Control = ParamsPanel + AnchorSideLeft.Side = asrCenter + AnchorSideTop.Control = VarList + Left = 159 + Height = 26 + Top = 17 + Width = 26 + Images = MainDataModule.ImageList + ImageIndex = 1 + OnClick = InBtnClick + Spacing = 0 + TabOrder = 5 + end + object OutBtn: TBitBtn[8] + AnchorSideLeft.Control = ParamsPanel + AnchorSideLeft.Side = asrCenter + AnchorSideTop.Control = InBtn + AnchorSideTop.Side = asrBottom + Left = 159 + Height = 26 + Top = 47 + Width = 26 + BorderSpacing.Top = 4 + Images = MainDataModule.ImageList + ImageIndex = 0 + OnClick = OutBtnClick + Spacing = 0 + TabOrder = 6 + end + object AllBtn: TBitBtn[9] + AnchorSideLeft.Control = ParamsPanel + AnchorSideLeft.Side = asrCenter + AnchorSideTop.Control = OutBtn + AnchorSideTop.Side = asrBottom + Left = 152 + Height = 25 + Top = 89 + Width = 40 + AutoSize = True + BorderSpacing.Top = 16 + Caption = 'All' + OnClick = AllBtnClick + Spacing = 0 + TabOrder = 7 + end + object GroupBox3: TGroupBox[10] + AnchorSideTop.Control = GroupBox1 + AnchorSideTop.Side = asrBottom + AnchorSideRight.Control = InBtn + AnchorSideBottom.Control = ButtonBevel + Left = 35 + Height = 101 + Top = 254 + Width = 124 + Anchors = [akRight, akBottom] + AutoSize = True + BorderSpacing.Top = 12 + BorderSpacing.Bottom = 4 + Caption = 'Report' + ChildSizing.LeftRightSpacing = 12 + ChildSizing.TopBottomSpacing = 8 + ChildSizing.VerticalSpacing = 4 + ChildSizing.Layout = cclLeftToRightThenTopToBottom + ClientHeight = 81 + ClientWidth = 120 + TabOrder = 8 + object PrtDataChk: TCheckBox + Left = 12 + Height = 19 + Top = 8 + Width = 96 + Caption = 'Data' + TabOrder = 0 + end + object PrtSlopesChk: TCheckBox + Left = 12 + Height = 19 + Top = 31 + Width = 96 + Caption = 'Slopes Matrix' + TabOrder = 1 + end + object PrtRanksChk: TCheckBox + Left = 12 + Height = 19 + Top = 54 + Width = 96 + Caption = 'Ranked Slopes' + TabOrder = 2 + end + end + object GroupBox2: TGroupBox[11] + AnchorSideLeft.Control = InBtn + AnchorSideLeft.Side = asrBottom + AnchorSideTop.Control = GroupBox3 + Left = 185 + Height = 72 + Top = 254 + Width = 124 + AutoSize = True + Caption = 'Plot' + ChildSizing.LeftRightSpacing = 12 + ChildSizing.TopBottomSpacing = 6 + ChildSizing.VerticalSpacing = 2 + ChildSizing.Layout = cclLeftToRightThenTopToBottom + ClientHeight = 52 + ClientWidth = 120 + TabOrder = 9 + object PlotChk: TCheckBox + Left = 12 + Height = 19 + Top = 6 + Width = 96 + Caption = 'Each Variable' + TabOrder = 0 + end + object SlopesChk: TCheckBox + Left = 12 + Height = 19 + Top = 27 + Width = 96 + Caption = 'Ranked Slopes' + TabOrder = 1 + end + end + object GroupBox1: TGroupBox[12] + AnchorSideLeft.Control = ParamsPanel + AnchorSideTop.Side = asrBottom + AnchorSideRight.Control = InBtn + AnchorSideBottom.Control = GroupBox2 + Left = 0 + Height = 51 + Top = 191 + Width = 341 + Anchors = [akLeft, akBottom] + AutoSize = True + BorderSpacing.Bottom = 12 + Caption = 'If more than one variable:' + ChildSizing.LeftRightSpacing = 12 + ChildSizing.TopBottomSpacing = 6 + ChildSizing.HorizontalSpacing = 12 + ChildSizing.VerticalSpacing = 2 + ChildSizing.Layout = cclLeftToRightThenTopToBottom + ChildSizing.ControlsPerLine = 2 + ClientHeight = 31 + ClientWidth = 337 + TabOrder = 10 + object StandardizeChk: TRadioButton + Left = 12 + Height = 19 + Top = 6 + Width = 154 + Caption = 'Standardize the measures' + TabOrder = 0 + end + object AvgSlopeChk: TRadioButton + Left = 178 + Height = 19 + Top = 6 + Width = 147 + Caption = 'Calculate Average Slope' + TabOrder = 1 + end + end + object Label1: TLabel[13] + AnchorSideLeft.Control = GroupBox2 + AnchorSideTop.Control = AlphaEdit + AnchorSideTop.Side = asrCenter + Left = 185 + Height = 15 + Top = 338 + Width = 64 + Caption = 'Alpha Level:' + ParentColor = False + end + object AlphaEdit: TEdit[14] + AnchorSideLeft.Control = Label1 + AnchorSideLeft.Side = asrBottom + AnchorSideTop.Control = GroupBox2 + AnchorSideTop.Side = asrBottom + Left = 257 + Height = 23 + Top = 334 + Width = 47 + Alignment = taRightJustify + BorderSpacing.Left = 8 + BorderSpacing.Top = 8 + TabOrder = 11 + Text = '0.05' + end + object Label3: TLabel[15] + AnchorSideLeft.Control = SelectedList + AnchorSideTop.Control = Label2 + Left = 198 + Height = 15 + Top = 0 + Width = 107 + Caption = 'Variables to Analyze:' + ParentColor = False + end + object SelectedList: TListBox[16] + AnchorSideLeft.Control = AllBtn + AnchorSideLeft.Side = asrBottom + AnchorSideTop.Control = Label3 + AnchorSideTop.Side = asrBottom + AnchorSideRight.Control = ParamsPanel + AnchorSideRight.Side = asrBottom + AnchorSideBottom.Control = VarList + AnchorSideBottom.Side = asrBottom + Left = 198 + Height = 162 + Top = 17 + Width = 146 + Anchors = [akTop, akLeft, akRight, akBottom] + BorderSpacing.Left = 6 + BorderSpacing.Top = 2 + ItemHeight = 0 + MultiSelect = True + OnDblClick = SelectedListDblClick + OnSelectionChange = VarListSelectionChange + TabOrder = 12 end end - object GroupBox2: TGroupBox - AnchorSideLeft.Control = InBtn - AnchorSideLeft.Side = asrBottom - AnchorSideTop.Control = GroupBox1 - Left = 253 - Height = 72 - Top = 129 - Width = 124 - AutoSize = True - Caption = 'Plot' - ChildSizing.LeftRightSpacing = 12 - ChildSizing.TopBottomSpacing = 6 - ChildSizing.VerticalSpacing = 2 - ChildSizing.Layout = cclLeftToRightThenTopToBottom - ClientHeight = 52 - ClientWidth = 120 - TabOrder = 1 - object PlotChk: TCheckBox - Left = 12 - Height = 19 - Top = 6 - Width = 96 - Caption = 'Each Variable' - TabOrder = 0 - end - object SlopesChk: TCheckBox - Left = 12 - Height = 19 - Top = 27 - Width = 96 - Caption = 'Ranked Slopes' - TabOrder = 1 - end + inherited ParamsSplitter: TSplitter + Left = 356 + Height = 416 end - object GroupBox3: TGroupBox - AnchorSideLeft.Control = GroupBox1 - AnchorSideTop.Control = GroupBox1 - AnchorSideTop.Side = asrBottom - AnchorSideRight.Control = InBtn - Left = 43 - Height = 93 - Top = 217 - Width = 182 - Anchors = [akTop, akLeft, akRight] - AutoSize = True - BorderSpacing.Top = 16 - Caption = 'Print' - ChildSizing.LeftRightSpacing = 12 - ChildSizing.TopBottomSpacing = 6 - ChildSizing.VerticalSpacing = 2 - ChildSizing.Layout = cclLeftToRightThenTopToBottom - ClientHeight = 73 - ClientWidth = 178 - TabOrder = 2 - object PrtDataChk: TCheckBox - Left = 12 - Height = 19 - Top = 6 - Width = 96 - Caption = 'Data' - TabOrder = 0 - end - object PrtSlopesChk: TCheckBox - Left = 12 - Height = 19 - Top = 27 - Width = 96 - Caption = 'Slopes Matrix' - TabOrder = 1 - end - object PrtRanksChk: TCheckBox - Left = 12 - Height = 19 - Top = 48 - Width = 96 - Caption = 'Ranked Slopes' - TabOrder = 2 - end - end - object Label1: TLabel - AnchorSideLeft.Control = InBtn - AnchorSideLeft.Side = asrBottom - AnchorSideTop.Control = AlphaEdit - AnchorSideTop.Side = asrCenter - Left = 253 - Height = 15 - Top = 221 - Width = 64 - Caption = 'Alpha Level:' - ParentColor = False - end - object AlphaEdit: TEdit - AnchorSideLeft.Control = Label1 - AnchorSideLeft.Side = asrBottom - AnchorSideTop.Control = GroupBox3 - Left = 325 - Height = 23 - Top = 217 - Width = 47 - Alignment = taRightJustify - BorderSpacing.Left = 8 - TabOrder = 3 - Text = '0.05' - end - object Label2: TLabel - AnchorSideLeft.Control = Owner - AnchorSideTop.Control = GroupBox3 - AnchorSideTop.Side = asrBottom - Left = 8 - Height = 15 - Top = 318 - Width = 100 - BorderSpacing.Left = 8 - BorderSpacing.Top = 8 - Caption = 'Available Variables:' - ParentColor = False - end - object VarList: TListBox - AnchorSideLeft.Control = Owner - AnchorSideTop.Control = Label2 - AnchorSideTop.Side = asrBottom - AnchorSideRight.Control = AllBtn - AnchorSideBottom.Control = Bevel1 - Left = 8 - Height = 200 - Top = 335 - Width = 200 - Anchors = [akTop, akLeft, akRight, akBottom] - BorderSpacing.Left = 8 - BorderSpacing.Top = 2 - BorderSpacing.Right = 8 - Constraints.MinHeight = 200 - ItemHeight = 0 - MultiSelect = True - OnSelectionChange = VarListSelectionChange - TabOrder = 4 - end - object InBtn: TBitBtn - AnchorSideLeft.Control = Owner - AnchorSideLeft.Side = asrCenter - AnchorSideTop.Control = VarList - Left = 225 - Height = 28 - Top = 335 - Width = 28 - Images = MainDataModule.ImageList - ImageIndex = 1 - OnClick = InBtnClick - Spacing = 0 - TabOrder = 5 - end - object OutBtn: TBitBtn - AnchorSideLeft.Control = Owner - AnchorSideLeft.Side = asrCenter - AnchorSideTop.Control = InBtn - AnchorSideTop.Side = asrBottom - Left = 225 - Height = 28 - Top = 367 - Width = 28 - BorderSpacing.Top = 4 - Images = MainDataModule.ImageList - ImageIndex = 0 - OnClick = OutBtnClick - Spacing = 0 - TabOrder = 6 - end - object AllBtn: TBitBtn - AnchorSideLeft.Control = Owner - AnchorSideLeft.Side = asrCenter - AnchorSideTop.Control = OutBtn - AnchorSideTop.Side = asrBottom - Left = 216 - Height = 25 - Top = 411 - Width = 46 - AutoSize = True - BorderSpacing.Top = 16 - Caption = 'ALL' - OnClick = AllBtnClick - Spacing = 0 - TabOrder = 7 - end - object Label3: TLabel - AnchorSideLeft.Control = SelectedList - AnchorSideTop.Control = Label2 - Left = 270 - Height = 15 - Top = 318 - Width = 107 - Caption = 'Variables to Analyze:' - ParentColor = False - end - object SelectedList: TListBox - AnchorSideLeft.Control = AllBtn - AnchorSideLeft.Side = asrBottom - AnchorSideTop.Control = Label3 - AnchorSideTop.Side = asrBottom - AnchorSideRight.Control = Owner - AnchorSideRight.Side = asrBottom - AnchorSideBottom.Control = Bevel1 - Left = 270 - Height = 195 - Top = 335 - Width = 200 - Anchors = [akTop, akLeft, akRight, akBottom] - BorderSpacing.Left = 8 - BorderSpacing.Top = 2 - BorderSpacing.Right = 8 - ItemHeight = 0 - MultiSelect = True - OnSelectionChange = VarListSelectionChange - TabOrder = 8 - end - object ResetBtn: TButton - AnchorSideRight.Control = ComputeBtn - AnchorSideBottom.Control = Owner - AnchorSideBottom.Side = asrBottom - Left = 269 - Height = 25 - Top = 546 - Width = 54 - Anchors = [akRight, akBottom] - AutoSize = True - BorderSpacing.Left = 8 - BorderSpacing.Top = 8 - BorderSpacing.Right = 8 - BorderSpacing.Bottom = 8 - Caption = 'Reset' - OnClick = ResetBtnClick - TabOrder = 9 - end - object ComputeBtn: TButton - AnchorSideRight.Control = CloseBtn - AnchorSideBottom.Control = Owner - AnchorSideBottom.Side = asrBottom - Left = 331 - Height = 25 - Top = 546 - Width = 76 - Anchors = [akRight, akBottom] - AutoSize = True - BorderSpacing.Left = 8 - BorderSpacing.Top = 8 - BorderSpacing.Right = 8 - BorderSpacing.Bottom = 8 - Caption = 'Compute' - OnClick = ComputeBtnClick - TabOrder = 10 - end - object CloseBtn: TButton - AnchorSideRight.Control = Owner - AnchorSideRight.Side = asrBottom - AnchorSideBottom.Control = Owner - AnchorSideBottom.Side = asrBottom - Left = 415 - Height = 25 - Top = 546 - Width = 55 - Anchors = [akRight, akBottom] - AutoSize = True - BorderSpacing.Left = 8 - BorderSpacing.Top = 8 - BorderSpacing.Right = 8 - BorderSpacing.Bottom = 8 - Caption = 'Close' - ModalResult = 11 - TabOrder = 11 - end - object Memo1: TLabel - AnchorSideLeft.Control = Owner - AnchorSideTop.Control = Owner - AnchorSideRight.Control = Owner - AnchorSideRight.Side = asrBottom - Left = 8 - Height = 105 - Top = 8 - Width = 462 - Anchors = [akTop, akLeft, akRight] - BorderSpacing.Left = 8 - BorderSpacing.Top = 8 - BorderSpacing.Right = 8 - Caption = 'Sens method for the detection and estimation of trents is used to analyze one or more variable observations collected at equally spaced intervals of time. First, select one or more series variables to analyze. Next, if you have entered more than one variable, indicate how the measures are to be combined (mean or median) and if the values are to be standardized '#13#10'(z scores with mean of 0 and standard deviation of 1.) Finally, select the options desired and click the compute button to complete the analysis.' - ParentColor = False - WordWrap = True - end - object Bevel1: TBevel - AnchorSideLeft.Control = Owner - AnchorSideRight.Control = Owner - AnchorSideRight.Side = asrBottom - AnchorSideBottom.Control = CloseBtn - Left = 0 - Height = 8 - Top = 530 - Width = 478 - Anchors = [akLeft, akRight, akBottom] - Shape = bsBottomLine + inherited PageControl: TPageControl + Left = 365 + Height = 400 + Width = 563 end end diff --git a/applications/lazstats/source/forms/analysis/nonparametric/sensunit.pas b/applications/lazstats/source/forms/analysis/nonparametric/sensunit.pas index d7044001e..9275728b5 100644 --- a/applications/lazstats/source/forms/analysis/nonparametric/sensunit.pas +++ b/applications/lazstats/source/forms/analysis/nonparametric/sensunit.pas @@ -9,29 +9,26 @@ unit SensUnit; interface uses - Classes, SysUtils, FileUtil, LResources, Forms, Controls, Graphics, Dialogs, - StdCtrls, Buttons, ExtCtrls, - MainUnit, Globals, FunctionsLib, OutputUnit, - ContextHelpUnit, MatrixLib, GraphLib; + Classes, SysUtils, FileUtil, Forms, Controls, Graphics, Dialogs, + StdCtrls, Buttons, ExtCtrls, ComCtrls, + MainUnit, Globals, FunctionsLib, + ContextHelpUnit, MatrixLib, GraphLib, BasicStatsReportAndChartFormUnit; type { TSensForm } - TSensForm = class(TForm) + TSensForm = class(TBasicStatsReportAndChartForm) AllBtn: TBitBtn; AlphaEdit: TEdit; - Bevel1: TBevel; - Memo1: TLabel; - ResetBtn: TButton; - ComputeBtn: TButton; - CloseBtn: TButton; + AvgSlopeChk: TRadioButton; InBtn: TBitBtn; Label1: TLabel; Label2: TLabel; Label3: TLabel; SelectedList: TListBox; OutBtn: TBitBtn; + StandardizeChk: TRadioButton; VarList: TListBox; PrtRanksChk: TCheckBox; PrtSlopesChk: TCheckBox; @@ -40,23 +37,23 @@ type SlopesChk: TCheckBox; PlotChk: TCheckBox; GroupBox2: TGroupBox; - StandardizeChk: TCheckBox; - AvgSlopeChk: TCheckBox; GroupBox1: TGroupBox; procedure AllBtnClick(Sender: TObject); - procedure ComputeBtnClick(Sender: TObject); - procedure FormActivate(Sender: TObject); - procedure FormCreate(Sender: TObject); procedure InBtnClick(Sender: TObject); procedure OutBtnClick(Sender: TObject); - procedure ResetBtnClick(Sender: TObject); + procedure SelectedListDblClick(Sender: TObject); + procedure VarListDblClick(Sender: TObject); procedure VarListSelectionChange(Sender: TObject; {%H-}User: boolean); private - { private declarations } - FAutoSized: Boolean; - procedure UpdateBtnStates; + + protected + procedure AdjustConstraints; override; + procedure Compute; override; + procedure UpdateBtnStates; override; + public - { public declarations } + constructor Create(AOwner: TComponent); override; + procedure Reset; override; end; var @@ -65,16 +62,52 @@ var implementation +{$R *.lfm} + uses Math, Utils, MatrixUnit; { TSensForm } -procedure TSensForm.ResetBtnClick(Sender: TObject); +constructor TSensForm.Create(AOwner: TComponent); +begin + inherited; + if GraphFrm = nil then + Application.CreateForm(TGraphFrm, GraphFrm); +end; + + +procedure TSensForm.AdjustConstraints; +begin + inherited; + ParamsPanel.Constraints.MinWidth := Max( + 4*CloseBtn.Width + 3*CloseBtn.BorderSpacing.Left, + GroupBox1.Width + ); + ParamsPanel.Constraints.MinHeight := AllBtn.Top + AllBtn.Height + + VarList.BorderSpacing.Bottom + GroupBox1.Height + GroupBox1.BorderSpacing.Bottom + + GroupBox3.Height + GroupBox3.BorderSpacing.Bottom + + ButtonBevel.Height + CloseBtn.BorderSpacing.Top + CloseBtn.Height; +end; + + +procedure TSensForm.AllBtnClick(Sender: TObject); var i: integer; begin + for i := 0 to VarList.Items.Count-1 do + SelectedList.Items.Add(VarList.Items[i]); + VarList.Clear; + UpdateBtnStates; +end; + + +procedure TSensForm.Reset; +var + i: integer; +begin + inherited; AlphaEdit.Text := FormatFloat('0.00', DEFAULT_ALPHA_LEVEL); StandardizeChk.Checked := false; PlotChk.Checked := false; @@ -87,6 +120,7 @@ begin UpdateBtnStates; end; + procedure TSensForm.InBtnClick(Sender: TObject); var i: integer; @@ -105,17 +139,8 @@ begin UpdateBtnStates; end; -procedure TSensForm.AllBtnClick(Sender: TObject); -var - i: integer; -begin - for i := 0 to VarList.Items.Count-1 do - SelectedList.Items.Add(VarList.Items[i]); - VarList.Clear; - UpdateBtnStates; -end; -procedure TSensForm.ComputeBtnClick(Sender: TObject); +procedure TSensForm.Compute; var //NoVars, noselected, count, half, q, tp, low, hi, col: integer; @@ -538,45 +563,13 @@ begin lReport.Add('Corresponding lower and upper slopes: (%8.3f, %8.3f)', [RankedQ[low],RankedQ[hi]]); end; // end if average slope - DisplayReport(lReport); + FReportFrame.DisplayReport(lReport); finally lReport.Free; - AvgSlopes := nil; - Sorted := nil; - RankedQ := nil; - Slopes := nil; - Values := nil; - selected := nil; - ColLabels := nil; - RowLabels := nil; end; end; -procedure TSensForm.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; - - Constraints.MinWidth := Width; - Constraints.MinHeight := Height; - - FAutoSized := true; -end; - -procedure TSensForm.FormCreate(Sender: TObject); -begin - Assert(OS3MainFrm <> nil); - if GraphFrm = nil then - Application.CreateForm(TGraphFrm, GraphFrm); -end; procedure TSensForm.OutBtnClick(Sender: TObject); var @@ -596,20 +589,47 @@ begin UpdateBtnStates; end; +procedure TSensForm.SelectedListDblClick(Sender: TObject); +var + index: Integer; +begin + index := SelectedList.ItemIndex; + if index > -1 then + begin + VarList.Items.Add(SelectedList.Items[index]); + SelectedList.Items.Delete(index); + UpdateBtnStates; + end; +end; + + procedure TSensForm.UpdateBtnStates; begin + inherited; InBtn.Enabled := AnySelected(VarList); OutBtn.Enabled := AnySelected(SelectedList); AllBtn.Enabled := Varlist.Items.Count > 0; end; + +procedure TSensForm.VarListDblClick(Sender: TObject); +var + index: Integer; +begin + index := VarList.ItemIndex; + if index > -1 then + begin + SelectedList.Items.Add(VarList.Items[index]); + VarList.Items.Delete(index); + UpdateBtnStates; + end; +end; + + procedure TSensForm.VarListSelectionChange(Sender: TObject; User: boolean); begin UpdateBtnStates; end; -initialization - {$I sensunit.lrs} - end. diff --git a/applications/lazstats/source/forms/mainunit.pas b/applications/lazstats/source/forms/mainunit.pas index 30771366a..0de7547b2 100644 --- a/applications/lazstats/source/forms/mainunit.pas +++ b/applications/lazstats/source/forms/mainunit.pas @@ -1844,7 +1844,7 @@ procedure TOS3MainFrm.mnuAnalysisNonPar_SignTestClick(Sender: TObject); begin if SignTestFrm = nil then Application.CreateForm(TSignTestFrm, SignTestFrm); - SignTestFrm.ShowModal; + SignTestFrm.Show; end; // Menu "Analysis" > "Nonparametric" > "Friedman Two-Way mnuAnalysisComp_Anova" @@ -1852,7 +1852,7 @@ procedure TOS3MainFrm.mnuAnalysisNonPar_FriedmanClick(Sender: TObject); begin if FriedmanFrm = nil then Application.CreateForm(TFriedmanFrm, FriedmanFrm); - FriedmanFrm.ShowModal; + FriedmanFrm.Show; end; // Menu "Analysis" > "Nonparametric" > "Probability of a Binomial Event" @@ -1900,7 +1900,7 @@ procedure TOS3MainFrm.mnuAnalysisNonPar_SensClick(Sender: TObject); begin if SensForm = nil then Application.CreateForm(TSensForm, SensForm); - SensForm.ShowModal; + SensForm.Show; end; // Menu "Analysis" > "Nonparametric" > "Simple Chi Square for Categories"