LazStats: Inherit SingleLinkUnit from BasicStatsReportAndChartFormUnit. Some refactoring.

git-svn-id: https://svn.code.sf.net/p/lazarus-ccr/svn@7893 8e941d3f-bd1b-0410-a28a-d453659cc2b4
This commit is contained in:
wp_xxyyzz
2020-11-20 22:33:31 +00:00
parent 972eb626d4
commit db8138802d
5 changed files with 605 additions and 719 deletions

View File

@ -1005,7 +1005,7 @@
<Unit112> <Unit112>
<Filename Value="forms\analysis\multivariate\singlelinkunit.pas"/> <Filename Value="forms\analysis\multivariate\singlelinkunit.pas"/>
<IsPartOfProject Value="True"/> <IsPartOfProject Value="True"/>
<ComponentName Value="SingleLinkFrm"/> <ComponentName Value="SingleLinkForm"/>
<HasResources Value="True"/> <HasResources Value="True"/>
<ResourceBaseClass Value="Form"/> <ResourceBaseClass Value="Form"/>
<UnitName Value="SingleLinkUnit"/> <UnitName Value="SingleLinkUnit"/>

View File

@ -6,6 +6,7 @@
unit ANCOVAUnit; unit ANCOVAUnit;
{$mode objfpc}{$H+} {$mode objfpc}{$H+}
{$WARN 6058 off : Call to subroutine "$1" marked as inline is not inlined}
{.$DEFINE ANCOVA_DEBUG} {.$DEFINE ANCOVA_DEBUG}
interface interface
@ -1044,7 +1045,7 @@ end;
procedure TAncovaForm.GenCovInteracts; procedure TAncovaForm.GenCovInteracts;
var var
i, j, l, m, vect1col, vect2col, col: integer; i, j, k, m, vect1col, vect2col, col: integer;
value: double; value: double;
labelstr, cell1, cell2: string; labelstr, cell1, cell2: string;
startcol, endcol, novectors, oldnovars: integer; startcol, endcol, novectors, oldnovars: integer;
@ -1064,9 +1065,9 @@ begin
vect1col := Block[i-1,2]; vect1col := Block[i-1,2];
for j := firstblock to lastblock do for j := firstblock to lastblock do
begin begin
for l := 1 to Block[j-1,4] do for k := 1 to Block[j-1,4] do
begin begin
vect2col := Block[j-1,2] + l - 1; // first vector col. of B vect2col := Block[j-1,2] + k - 1; // first vector col. of B
col := col + 1; col := col + 1;
novectors := novectors + 1; novectors := novectors + 1;
NoTestVecs := NoTestVecs + 1; NoTestVecs := NoTestVecs + 1;
@ -1350,7 +1351,7 @@ end;
procedure TAncovaForm.SelectPlot(Sender: TObject); procedure TAncovaForm.SelectPlot(Sender: TObject);
var var
fixedIdx, i: Integer; fixedIdx: Integer;
isAdjusted: Boolean; isAdjusted: Boolean;
ser: TChartSeries; ser: TChartSeries;
clr: TColor; clr: TColor;

View File

@ -1,106 +1,41 @@
object SingleLinkFrm: TSingleLinkFrm inherited SingleLinkForm: TSingleLinkForm
Left = 579 Left = 579
Height = 284 Height = 364
Top = 362 Top = 362
Width = 409 Width = 715
HelpType = htKeyword HelpType = htKeyword
HelpKeyword = 'html/SingleLinkClustering.htm' HelpKeyword = 'html/SingleLinkClustering.htm'
AutoSize = True
Caption = 'Single Linkage Cluster Analysis' Caption = 'Single Linkage Cluster Analysis'
ClientHeight = 284 ClientHeight = 364
ClientWidth = 409 ClientWidth = 715
OnActivate = FormActivate inherited ParamsPanel: TPanel
OnCreate = FormCreate Height = 348
OnShow = FormShow Width = 315
Position = poMainFormCenter ClientHeight = 348
LCLVersion = '2.1.0.0' ClientWidth = 315
object ResetBtn: TButton inherited CloseBtn: TButton
AnchorSideRight.Control = ComputeBtn Left = 260
AnchorSideBottom.Control = Owner Top = 323
AnchorSideBottom.Side = asrBottom
Left = 200
Height = 25
Top = 251
Width = 54
Anchors = [akRight, akBottom]
AutoSize = True
BorderSpacing.Left = 8
BorderSpacing.Top = 8
BorderSpacing.Right = 8
BorderSpacing.Bottom = 8
Caption = 'Reset'
OnClick = ResetBtnClick
TabOrder = 1
end end
object ComputeBtn: TButton inherited ComputeBtn: TButton
AnchorSideRight.Control = CloseBtn Left = 176
AnchorSideBottom.Control = Owner Top = 323
AnchorSideBottom.Side = asrBottom
Left = 262
Height = 25
Top = 251
Width = 76
Anchors = [akRight, akBottom]
AutoSize = True
BorderSpacing.Left = 8
BorderSpacing.Top = 8
BorderSpacing.Right = 8
BorderSpacing.Bottom = 8
Caption = 'Compute'
OnClick = ComputeBtnClick
TabOrder = 2
end end
object CloseBtn: TButton inherited ResetBtn: TButton
AnchorSideRight.Control = Owner Left = 114
AnchorSideRight.Side = asrBottom Top = 323
AnchorSideBottom.Control = Owner
AnchorSideBottom.Side = asrBottom
Left = 346
Height = 25
Top = 251
Width = 55
Anchors = [akRight, akBottom]
AutoSize = True
BorderSpacing.Left = 8
BorderSpacing.Top = 8
BorderSpacing.Right = 8
BorderSpacing.Bottom = 8
Caption = 'Close'
ModalResult = 11
TabOrder = 3
end end
object Bevel1: TBevel inherited HelpBtn: TButton
AnchorSideLeft.Control = Owner Left = 55
AnchorSideRight.Control = Owner Top = 323
AnchorSideRight.Side = asrBottom
AnchorSideBottom.Control = CloseBtn
Left = 0
Height = 8
Top = 235
Width = 409
Anchors = [akLeft, akRight, akBottom]
Shape = bsBottomLine
end end
object Panel1: TPanel inherited ButtonBevel: TBevel
AnchorSideLeft.Control = Owner Top = 307
AnchorSideTop.Control = Owner Width = 315
AnchorSideRight.Control = Owner end
AnchorSideRight.Side = asrBottom object Label1: TLabel[5]
AnchorSideBottom.Control = Bevel1 AnchorSideLeft.Control = ParamsPanel
Left = 8 AnchorSideTop.Control = ParamsPanel
Height = 219
Top = 8
Width = 393
Anchors = [akTop, akLeft, akRight, akBottom]
AutoSize = True
BorderSpacing.Around = 8
BevelOuter = bvNone
ClientHeight = 219
ClientWidth = 393
TabOrder = 0
object Label1: TLabel
AnchorSideLeft.Control = Panel1
AnchorSideTop.Control = Panel1
Left = 0 Left = 0
Height = 15 Height = 15
Top = 0 Top = 0
@ -108,220 +43,175 @@ object SingleLinkFrm: TSingleLinkFrm
Caption = 'Available Variables' Caption = 'Available Variables'
ParentColor = False ParentColor = False
end end
object VarList: TListBox object VarList: TListBox[6]
AnchorSideLeft.Control = Panel1 AnchorSideLeft.Control = ParamsPanel
AnchorSideTop.Control = Label1 AnchorSideTop.Control = Label1
AnchorSideTop.Side = asrBottom AnchorSideTop.Side = asrBottom
AnchorSideRight.Control = VarInBtn AnchorSideRight.Control = VarInBtn
AnchorSideBottom.Control = Panel1 AnchorSideBottom.Control = OptionsGroup
AnchorSideBottom.Side = asrBottom
Left = 0 Left = 0
Height = 202 Height = 189
Top = 17 Top = 17
Width = 174 Width = 138
Anchors = [akTop, akLeft, akRight, akBottom] Anchors = [akTop, akLeft, akRight, akBottom]
BorderSpacing.Top = 2 BorderSpacing.Top = 2
BorderSpacing.Right = 8 BorderSpacing.Right = 6
BorderSpacing.Bottom = 8
ItemHeight = 0 ItemHeight = 0
OnDblClick = VarListDblClick
OnSelectionChange = VarListSelectionChange OnSelectionChange = VarListSelectionChange
TabOrder = 0 TabOrder = 4
end end
object Label2: TLabel object Label2: TLabel[7]
AnchorSideLeft.Control = VarSelEdit AnchorSideLeft.Control = VarSelEdit
AnchorSideTop.Control = VarInBtn
AnchorSideRight.Control = VarSelEdit AnchorSideRight.Control = VarSelEdit
AnchorSideRight.Side = asrBottom AnchorSideRight.Side = asrBottom
AnchorSideBottom.Control = VarSelEdit Left = 176
Left = 218 Height = 30
Height = 15 Top = 17
Top = 31 Width = 139
Width = 175 Anchors = [akTop, akLeft, akRight]
Anchors = [akLeft, akRight, akBottom]
BorderSpacing.Bottom = 2 BorderSpacing.Bottom = 2
Caption = 'Variable Selected for Analysis' Caption = 'Variable Selected for Analysis'
ParentColor = False ParentColor = False
WordWrap = True WordWrap = True
end end
object VarInBtn: TBitBtn object VarInBtn: TBitBtn[8]
AnchorSideLeft.Control = Panel1 AnchorSideLeft.Control = ParamsPanel
AnchorSideLeft.Side = asrCenter AnchorSideLeft.Side = asrCenter
AnchorSideTop.Control = VarList AnchorSideTop.Control = VarList
Left = 182 Left = 144
Height = 28 Height = 26
Top = 17 Top = 17
Width = 28 Width = 26
Glyph.Data = {
36040000424D3604000000000000360000002800000010000000100000000100
2000000000000004000064000000640000000000000000000000FFFFFF00FFFF
FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
FF00FFFFFF00216324B81D5E2006FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
FF002A702F38256929F7216324D9FFFFFF00FFFFFF00FFFFFF00FFFFFF0061BE
6DFF5DB868FF58B162FF53A95CFF4DA156FF47994FFF419149FF3B8842FF3580
3BFF3F8845FF59A15EFF448B49FF216324CFFFFFFF00FFFFFF00FFFFFF0065C3
71FFA0D7A9FF9CD5A5FF98D3A1FF94D09DFF90CE98FF8BCB93FF87C98EFF82C6
89FF7EC384FF7AC180FF76BE7CFF458C4AFF216324C4FFFFFF00FFFFFF0068C7
74FFA5DAAEFFA2D8ABFF9ED6A7FF9AD4A3FF96D29FFF93CF9AFF8ECC95FF89CA
90FF85C78BFF81C587FF7DC282FF4A9150FF256929C9FFFFFF00FFFFFF0068C7
74FF68C774FF65C371FF61BE6DFF5DB868FF58B162FF53A95CFF4DA156FF4799
4FFF419149FF5AA362FF559D5CFF2F7835D1FFFFFF00FFFFFF00FFFFFF00FFFF
FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
FF00FFFFFF00419149F73B8842DBFFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
FF00FFFFFF0047994FBB41914906FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00
}
Images = MainDataModule.ImageList Images = MainDataModule.ImageList
ImageIndex = 1 ImageIndex = 1
OnClick = VarInBtnClick OnClick = VarInBtnClick
Spacing = 0 Spacing = 0
TabOrder = 1 TabOrder = 5
end end
object VarOutBtn: TBitBtn object VarOutBtn: TBitBtn[9]
AnchorSideLeft.Control = Panel1 AnchorSideLeft.Control = ParamsPanel
AnchorSideLeft.Side = asrCenter AnchorSideLeft.Side = asrCenter
AnchorSideTop.Control = VarInBtn AnchorSideTop.Control = VarInBtn
AnchorSideTop.Side = asrBottom AnchorSideTop.Side = asrBottom
Left = 182 Left = 144
Height = 28 Height = 26
Top = 49 Top = 47
Width = 28 Width = 26
BorderSpacing.Top = 4 BorderSpacing.Top = 4
Glyph.Data = {
36040000424D3604000000000000360000002800000010000000100000000100
2000000000000004000064000000640000000000000000000000FFFFFF00FFFF
FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
FF00FFFFFF004DA1560647994FB8FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
FF00FFFFFF0053A95CD94DA156F747994F38FFFFFF00FFFFFF00FFFFFF00FFFF
FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
FF005DB868CF71BE7BFF7AC183FF5BAA64FF47994FFF419149FF3B8842FF3580
3BFF2F7835FF2A702FFF256929FF216324FF1D5E20FFFFFFFF00FFFFFF0065C3
71C47BC886FF9CD5A5FF98D3A1FF94D09DFF90CE98FF8BCB93FF87C98EFF82C6
89FF7EC384FF7AC180FF76BE7CFF72BD78FF216324FFFFFFFF00FFFFFF0068C7
74C97FCC8AFFA2D8ABFF9ED6A7FF9AD4A3FF96D29FFF93CF9AFF8ECC95FF89CA
90FF85C78BFF81C587FF7DC282FF78C07EFF256929FFFFFFFF00FFFFFF00FFFF
FF0068C774D180CD8BFF7CC987FF5DB868FF58B162FF53A95CFF4DA156FF4799
4FFF419149FF3B8842FF35803BFF2F7835FF2A702FFFFFFFFF00FFFFFF00FFFF
FF00FFFFFF0068C774DB65C371F7FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
FF00FFFFFF0068C7740668C774BBFFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00
}
Images = MainDataModule.ImageList Images = MainDataModule.ImageList
ImageIndex = 0 ImageIndex = 0
OnClick = VarOutBtnClick OnClick = VarOutBtnClick
Spacing = 0 Spacing = 0
TabOrder = 2 TabOrder = 6
end end
object VarSelEdit: TEdit object VarSelEdit: TEdit[10]
AnchorSideLeft.Control = VarInBtn AnchorSideLeft.Control = VarInBtn
AnchorSideLeft.Side = asrBottom AnchorSideLeft.Side = asrBottom
AnchorSideTop.Control = Label2
AnchorSideTop.Side = asrBottom AnchorSideTop.Side = asrBottom
AnchorSideRight.Control = Panel1 AnchorSideRight.Control = ParamsPanel
AnchorSideRight.Side = asrBottom AnchorSideRight.Side = asrBottom
AnchorSideBottom.Control = VarOutBtn
AnchorSideBottom.Side = asrBottom AnchorSideBottom.Side = asrBottom
Left = 218 Left = 176
Height = 23 Height = 23
Top = 48 Top = 49
Width = 175 Width = 139
Anchors = [akLeft, akRight, akBottom] Anchors = [akTop, akLeft, akRight]
BorderSpacing.Left = 8 BorderSpacing.Left = 6
BorderSpacing.Top = 2 BorderSpacing.Top = 2
BorderSpacing.Bottom = 6 BorderSpacing.Bottom = 12
ReadOnly = True ReadOnly = True
TabOrder = 3 TabOrder = 7
Text = 'VarSelEdit' Text = 'VarSelEdit'
end end
object OptionsGroup: TGroupBox object OptionsGroup: TGroupBox[11]
AnchorSideLeft.Control = VarInBtn AnchorSideLeft.Control = ParamsPanel
AnchorSideTop.Control = VarOutBtn
AnchorSideTop.Side = asrBottom AnchorSideTop.Side = asrBottom
Left = 182 AnchorSideBottom.Control = ButtonBevel
Height = 135 Left = 0
Top = 93 Height = 93
Width = 178 Top = 214
Width = 305
Anchors = [akLeft, akBottom]
AutoSize = True AutoSize = True
BorderSpacing.Top = 16
Caption = 'Analysis Options:' Caption = 'Analysis Options:'
ChildSizing.LeftRightSpacing = 12 ChildSizing.LeftRightSpacing = 12
ChildSizing.TopBottomSpacing = 6 ChildSizing.TopBottomSpacing = 6
ChildSizing.VerticalSpacing = 2 ChildSizing.VerticalSpacing = 2
ChildSizing.Layout = cclLeftToRightThenTopToBottom ChildSizing.Layout = cclLeftToRightThenTopToBottom
ChildSizing.ControlsPerLine = 1 ChildSizing.ControlsPerLine = 2
ClientHeight = 115 ClientHeight = 73
ClientWidth = 174 ClientWidth = 301
TabOrder = 4 TabOrder = 8
object StdChkBox: TCheckBox object StandardizeChk: TCheckBox
Left = 12 Left = 12
Height = 19 Height = 19
Top = 6 Top = 6
Width = 150 Width = 150
Caption = 'Standardize Variable' Caption = 'Standardize Variable'
OnChange = StandardizeChkChange
TabOrder = 0 TabOrder = 0
end end
object RepChkBox: TCheckBox object ReplaceChk: TCheckBox
Left = 162
Height = 19
Top = 6
Width = 127
Caption = 'Replace Grid Values'
Enabled = False
TabOrder = 1
end
object CombinationsChk: TCheckBox
Left = 12 Left = 12
Height = 19 Height = 19
Top = 27 Top = 27
Width = 150 Width = 150
Caption = 'Replace Grid Values'
TabOrder = 1
end
object DescChkBox: TCheckBox
Left = 12
Height = 19
Top = 48
Width = 150
Caption = 'Show Each Combination' Caption = 'Show Each Combination'
TabOrder = 2 TabOrder = 2
end end
object PlotChkBox: TCheckBox object PlotChk: TCheckBox
Left = 12 Left = 162
Height = 19 Height = 19
Top = 69 Top = 27
Width = 150 Width = 127
Caption = 'Groups Vs Error Plot' Caption = 'Groups vs. Error Plot'
TabOrder = 3 TabOrder = 3
end end
object DendoChk: TCheckBox object DendogramChk: TCheckBox
Left = 12 Left = 12
Height = 19 Height = 19
Top = 90 Top = 48
Width = 150 Width = 150
Caption = 'Dendogram Plot' Caption = 'Dendogram Plot'
TabOrder = 4 TabOrder = 4
end end
end end
end end
inherited ParamsSplitter: TSplitter
Left = 327
Height = 364
end
inherited PageControl: TPageControl
Left = 336
Height = 348
Width = 371
TabOrder = 1
inherited ReportPage: TTabSheet
Caption = 'Results'
end
inherited ChartPage: TTabSheet
Caption = 'Groups vs Error Plot'
end
object CombinationsPage: TTabSheet[2]
Caption = 'Combinations'
TabVisible = False
end
object DendogramPage: TTabSheet[3]
Caption = 'Dendogram'
TabVisible = False
end
end
end end

View File

@ -2168,9 +2168,9 @@ end;
// Menu "Analysis" > "Multivariate" > "Single Link Clustering" // Menu "Analysis" > "Multivariate" > "Single Link Clustering"
procedure TOS3MainFrm.mnuAnalysisMulti_SingleLinkClick(Sender: TObject); procedure TOS3MainFrm.mnuAnalysisMulti_SingleLinkClick(Sender: TObject);
begin begin
if SingleLinkFrm = nil then if SingleLinkForm = nil then
Application.CreateForm(TSingleLinkFrm, SingleLinkFrm); Application.CreateForm(TSingleLinkForm, SingleLinkForm);
SingleLinkFrm.ShowModal; SingleLinkForm.Show;
end; end;
// Menu "Analysis" > "Multivariate" > "MANOVA / Discriminant Function" // Menu "Analysis" > "Multivariate" > "MANOVA / Discriminant Function"