LazStats: Add original sources, part 5

git-svn-id: https://svn.code.sf.net/p/lazarus-ccr/svn@7876 8e941d3f-bd1b-0410-a28a-d453659cc2b4
This commit is contained in:
wp_xxyyzz
2020-11-16 10:25:30 +00:00
parent ec12bae971
commit 46d5d7c0fb
32 changed files with 7199 additions and 57 deletions

View File

@ -254,15 +254,16 @@ inherited HierarchForm: THierarchForm
Height = 421
Width = 397
ActivePage = StatsPage
TabIndex = 2
inherited ReportPage: TTabSheet
Caption = 'Results'
end
object StatsPage: TTabSheet[1]
Caption = 'Descriptive Stats'
inherited ChartPage: TTabSheet
Caption = 'Groups Count vs. Errors Plot'
TabVisible = False
end
inherited ChartPage: TTabSheet[2]
Caption = 'Groups Count vs. Errors Plot'
object StatsPage: TTabSheet[2]
Caption = 'Descriptive Stats'
TabVisible = False
end
end

View File

@ -7,14 +7,10 @@ unit HierarchUnit;
{$mode objfpc}{$H+}
{$DEFINE OLD_PLOT}
interface
uses
Classes, SysUtils, Forms, Controls, Graphics, Dialogs,
StdCtrls, Buttons, ExtCtrls, ComCtrls,
{$IFDEF OLD_PLOT} GraphLib, {$ENDIF}
Classes, SysUtils, Forms, Controls, Graphics, StdCtrls, Buttons, ExtCtrls, ComCtrls,
MainUnit, Globals, MatrixLib, ReportFrameUnit, BasicStatsReportAndChartFormUnit;
type
@ -74,7 +70,7 @@ implementation
uses
TAChartUtils, TACustomSeries,
Utils, DataProcs, ChartFrameUnit;
Utils, GridProcs, DataProcs, ChartFrameUnit;
{ THierarchForm }
@ -128,7 +124,6 @@ var
variances: DblDyneVec = nil;
stddevs: DblDyneVec = nil;
Distance : DblDyneMat = nil;
cellstring: string;
i, j, k, k1, k3, L, w3, n3, n4, n5, M, col, count: integer;
GrpCnt, Nrows, Ncols, NoSelected: integer;
X, Y, d1, x1, MaxError: double;
@ -156,6 +151,12 @@ begin
nCols := NoSelected;
nRows := NoCases;
for i := 0 to nCols-1 do // nCols = NoSelected!
begin
varLabels[i] := PredList.Items[i];
colSelected[i] := GetVariableIndex(OS3MainFrm.DataGrid, varLabels[i]);
end;
{
for i := 0 to nCols - 1 do
begin
cellstring := PredList.Items.Strings[i];
@ -168,7 +169,8 @@ begin
end;
end;
end;
for i := 0 to NoCases-1 do rowlabels[i] := IntToStr(i);
}
for i := 0 to NoCases-1 do rowLabels[i] := OS3MainFrm.DataGrid.Cells[0, i+1]; //IntToStr(i);
end else
begin
SetLength(w2,NoSelected);
@ -185,9 +187,15 @@ begin
SetLength(varlabels,NoCases);
SetLength(rowlabels,NoSelected);
SetLength(ColSelected,NoSelected);
Ncols := NoCases;
Nrows := NoSelected;
nCols := NoCases;
nRows := NoSelected;
//Get labels of selected variables
for i := 0 to nRows - 1 do // nRows = NoSelected!
begin
rowLabels[i] := PredList.Items[i];
colSelected[i] := GetVariableIndex(OS3MainFrm.DataGrid, rowLabels[i]);
end;
{
for i := 0 to nRows - 1 do
begin
cellstring := PredList.Items.Strings[i];
@ -200,8 +208,9 @@ begin
end;
end;
end;
}
for i := 0 to NoCases-1 do
varlabels[i] := IntToStr(i);
varlabels[i] := OS3MainFrm.DataGrid.Cells[0, i+1]; //IntToStr(i);
end;
if MaxGrpsChk.Checked then
@ -413,30 +422,33 @@ next1:
goto next1;
// Print group memberships of all objects, if optioned
lReport.Add('');
for i := 1 to nRows do
if MembersChk.Checked then
begin
if (k5[i-1] = i) then
lReport.Add('');
for i := 1 to nRows do
begin
L := 0;
for j := 1 to Nrows do
if (k5[i-1] = i) then
begin
if (k5[j-1] = i) then
L := 0;
for j := 1 to Nrows do
begin
L := L + 1;
L1[L-1] := k4[j-1];
if k3 = 1 then L1[L-1] := j;
if (k5[j-1] = i) then
begin
L := L + 1;
L1[L-1] := k4[j-1];
if k3 = 1 then L1[L-1] := j;
end;
end;
end;
if k3 = 1 then
begin
lReport.Add('Group %d (n = %d)', [i, L]);
for j := 1 to L do
lReport.Add(' Object: %s', [rowlabels[L1[j-1]-1]]);
if k3 = 1 then
begin
lReport.Add('Group %d (n = %d)', [i, L]);
for j := 1 to L do
lReport.Add(' Object: %s', [rowLabels[L1[j-1]-1]]);
end; // end if
end; // end if
end; // end if
end; // next i
lReport.Add('');
end; // next i
lReport.Add('');
end;
goto next1;
//until n3 = 2;
end; // end if
@ -447,29 +459,6 @@ next1:
begin
ChartPage.TabVisible := true;
Plot_GroupCount_Error(XAxis, YAxis, GrpCnt);
{$IFDEF OLD_PLOTS}
SetLength(GraphFrm.Ypoints,1,GrpCnt);
SetLength(GraphFrm.Xpoints,1,GrpCnt);
for i := 1 to GrpCnt do
begin
GraphFrm.Ypoints[0,i-1] := YAxis[i-1];
GraphFrm.Xpoints[0,i-1] := XAxis[i-1];
end;
GraphFrm.nosets := 1;
GraphFrm.nbars := GrpCnt;
GraphFrm.Heading := 'NO. GROUPS VERSUS GROUPING ERROR';
GraphFrm.XTitle := 'NO. GROUPS';
GraphFrm.YTitle := 'ERROR';
// GraphFrm.Ypoints[1] := YAxis;
// GraphFrm.Xpoints[1] := XAxis;
GraphFrm.AutoScaled := true;
GraphFrm.PtLabels := false;
GraphFrm.GraphType := 7; // 2d points
GraphFrm.BackColor := clCream;
GraphFrm.ShowBackWall := true;
GraphFrm.ShowModal;
{$ENDIF}
end else
ChartPage.TabVisible := false;
@ -653,7 +642,6 @@ end;
procedure THierarchForm.VarListDblClick(Sender: TObject);
var
index: Integer;
s: String;
begin
index := VarList.ItemIndex;
if index > -1 then

View File

@ -0,0 +1,151 @@
object ErrorCurvesFrm: TErrorCurvesFrm
Left = 172
Height = 276
Top = 104
Width = 383
Caption = 'Alpha and Beta Curves for z tests'
ClientHeight = 276
ClientWidth = 383
OnShow = FormShow
LCLVersion = '0.9.28.2'
object Label1: TLabel
Left = 7
Height = 14
Top = 87
Width = 135
Caption = 'Mean of the Null Hypothesis'
ParentColor = False
end
object Label2: TLabel
Left = 7
Height = 14
Top = 119
Width = 171
Caption = 'Mean of the Alternative Hypothesis'
ParentColor = False
end
object Label3: TLabel
Left = 7
Height = 14
Top = 151
Width = 182
Caption = 'Standard Deviation of the Distribution'
ParentColor = False
end
object Label4: TLabel
Left = 7
Height = 14
Top = 184
Width = 170
Caption = 'Probability of Making a Type I Error'
ParentColor = False
end
object Label5: TLabel
Left = 7
Height = 14
Top = 216
Width = 174
Caption = 'Probability of Making a Type II Error'
ParentColor = False
end
object NullMeanEdit: TEdit
Left = 198
Height = 21
Top = 80
Width = 60
TabOrder = 0
Text = 'NullMeanEdit'
end
object AltMeanEdit: TEdit
Left = 198
Height = 21
Top = 112
Width = 60
TabOrder = 1
Text = 'Edit1'
end
object SDEdit: TEdit
Left = 198
Height = 21
Top = 144
Width = 60
TabOrder = 2
Text = 'Edit1'
end
object TypeIEdit: TEdit
Left = 198
Height = 21
Top = 176
Width = 60
TabOrder = 3
Text = 'Edit1'
end
object TypeIIEdit: TEdit
Left = 198
Height = 21
Top = 208
Width = 60
TabOrder = 4
Text = 'Edit1'
end
object ResetBtn: TButton
Left = 288
Height = 29
Top = 72
Width = 70
Caption = 'Reset'
OnClick = ResetBtnClick
TabOrder = 5
end
object CancelBtn: TButton
Left = 288
Height = 29
Top = 9
Width = 70
Caption = 'Cancel'
ModalResult = 2
TabOrder = 6
end
object ComputeBtn: TButton
Left = 288
Height = 29
Top = 136
Width = 70
Caption = 'Compute'
OnClick = ComputeBtnClick
TabOrder = 7
end
object ReturnBtn: TButton
Left = 288
Height = 29
Top = 200
Width = 70
Caption = 'Return'
ModalResult = 1
TabOrder = 8
end
object NullType: TRadioGroup
Left = 8
Height = 67
Top = 0
Width = 252
AutoFill = True
Caption = 'Null Hypothesis Characteristic:'
ChildSizing.LeftRightSpacing = 6
ChildSizing.TopBottomSpacing = 6
ChildSizing.EnlargeHorizontal = crsHomogenousChildResize
ChildSizing.EnlargeVertical = crsHomogenousChildResize
ChildSizing.ShrinkHorizontal = crsScaleChilds
ChildSizing.ShrinkVertical = crsScaleChilds
ChildSizing.Layout = cclLeftToRightThenTopToBottom
ChildSizing.ControlsPerLine = 1
ClientHeight = 49
ClientWidth = 248
ItemIndex = 1
Items.Strings = (
'One-tailed (Directional alterntive)'
'Two-tailed (non-directional alterntive)'
)
TabOrder = 9
end
end

View File

@ -0,0 +1,42 @@
LazarusResources.Add('TErrorCurvesFrm','FORMDATA',[
'TPF0'#15'TErrorCurvesFrm'#14'ErrorCurvesFrm'#4'Left'#3#172#0#6'Height'#3#20#1
+#3'Top'#2'h'#5'Width'#3#127#1#7'Caption'#6'!Alpha and Beta Curves for z test'
+'s'#12'ClientHeight'#3#20#1#11'ClientWidth'#3#127#1#6'OnShow'#7#8'FormShow'
+#10'LCLVersion'#6#8'0.9.28.2'#0#6'TLabel'#6'Label1'#4'Left'#2#7#6'Height'#2
+#14#3'Top'#2'W'#5'Width'#3#135#0#7'Caption'#6#27'Mean of the Null Hypothesis'
+#11'ParentColor'#8#0#0#6'TLabel'#6'Label2'#4'Left'#2#7#6'Height'#2#14#3'Top'
+#2'w'#5'Width'#3#171#0#7'Caption'#6'"Mean of the Alternative Hypothesis'#11
+'ParentColor'#8#0#0#6'TLabel'#6'Label3'#4'Left'#2#7#6'Height'#2#14#3'Top'#3
+#151#0#5'Width'#3#182#0#7'Caption'#6'&Standard Deviation of the Distribution'
+#11'ParentColor'#8#0#0#6'TLabel'#6'Label4'#4'Left'#2#7#6'Height'#2#14#3'Top'
+#3#184#0#5'Width'#3#170#0#7'Caption'#6'$Probability of Making a Type I Error'
+#11'ParentColor'#8#0#0#6'TLabel'#6'Label5'#4'Left'#2#7#6'Height'#2#14#3'Top'
+#3#216#0#5'Width'#3#174#0#7'Caption'#6'%Probability of Making a Type II Erro'
+'r'#11'ParentColor'#8#0#0#5'TEdit'#12'NullMeanEdit'#4'Left'#3#198#0#6'Height'
+#2#21#3'Top'#2'P'#5'Width'#2'<'#8'TabOrder'#2#0#4'Text'#6#12'NullMeanEdit'#0
+#0#5'TEdit'#11'AltMeanEdit'#4'Left'#3#198#0#6'Height'#2#21#3'Top'#2'p'#5'Wid'
+'th'#2'<'#8'TabOrder'#2#1#4'Text'#6#5'Edit1'#0#0#5'TEdit'#6'SDEdit'#4'Left'#3
+#198#0#6'Height'#2#21#3'Top'#3#144#0#5'Width'#2'<'#8'TabOrder'#2#2#4'Text'#6
+#5'Edit1'#0#0#5'TEdit'#9'TypeIEdit'#4'Left'#3#198#0#6'Height'#2#21#3'Top'#3
+#176#0#5'Width'#2'<'#8'TabOrder'#2#3#4'Text'#6#5'Edit1'#0#0#5'TEdit'#10'Type'
+'IIEdit'#4'Left'#3#198#0#6'Height'#2#21#3'Top'#3#208#0#5'Width'#2'<'#8'TabOr'
+'der'#2#4#4'Text'#6#5'Edit1'#0#0#7'TButton'#8'ResetBtn'#4'Left'#3' '#1#6'Hei'
+'ght'#2#29#3'Top'#2'H'#5'Width'#2'F'#7'Caption'#6#5'Reset'#7'OnClick'#7#13'R'
+'esetBtnClick'#8'TabOrder'#2#5#0#0#7'TButton'#9'CancelBtn'#4'Left'#3' '#1#6
+'Height'#2#29#3'Top'#2#9#5'Width'#2'F'#7'Caption'#6#6'Cancel'#11'ModalResult'
+#2#2#8'TabOrder'#2#6#0#0#7'TButton'#10'ComputeBtn'#4'Left'#3' '#1#6'Height'#2
+#29#3'Top'#3#136#0#5'Width'#2'F'#7'Caption'#6#7'Compute'#7'OnClick'#7#15'Com'
+'puteBtnClick'#8'TabOrder'#2#7#0#0#7'TButton'#9'ReturnBtn'#4'Left'#3' '#1#6
+'Height'#2#29#3'Top'#3#200#0#5'Width'#2'F'#7'Caption'#6#6'Return'#11'ModalRe'
+'sult'#2#1#8'TabOrder'#2#8#0#0#11'TRadioGroup'#8'NullType'#4'Left'#2#8#6'Hei'
+'ght'#2'C'#3'Top'#2#0#5'Width'#3#252#0#8'AutoFill'#9#7'Caption'#6#31'Null Hy'
+'pothesis Characteristic:'#28'ChildSizing.LeftRightSpacing'#2#6#28'ChildSizi'
+'ng.TopBottomSpacing'#2#6#29'ChildSizing.EnlargeHorizontal'#7#24'crsHomogeno'
+'usChildResize'#27'ChildSizing.EnlargeVertical'#7#24'crsHomogenousChildResiz'
+'e'#28'ChildSizing.ShrinkHorizontal'#7#14'crsScaleChilds'#26'ChildSizing.Shr'
+'inkVertical'#7#14'crsScaleChilds'#18'ChildSizing.Layout'#7#29'cclLeftToRigh'
+'tThenTopToBottom'#27'ChildSizing.ControlsPerLine'#2#1#12'ClientHeight'#2'1'
+#11'ClientWidth'#3#248#0#9'ItemIndex'#2#1#13'Items.Strings'#1#6'#One-tailed '
+'(Directional alterntive)'#6'''Two-tailed (non-directional alterntive)'#0#8
+'TabOrder'#2#9#0#0#0
]);

View File

@ -0,0 +1,420 @@
unit EssayUnit;
{$MODE Delphi}
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
StdCtrls, ExtCtrls, ItemBankGlobals, ExtDlgs, FunctionsUnit;
type
TEssayFrm = class(TForm)
Label2: TLabel;
ItemNoEdit: TEdit;
ItemNoScroll: TScrollBar;
Label1: TLabel;
CodeCombo: TComboBox;
Label14: TLabel;
BMPFileEdit: TEdit;
Label15: TLabel;
BrowseBtn: TButton;
ClearBtn: TButton;
Label16: TLabel;
BMPImage: TImage;
Label18: TLabel;
ItemWeightEdit: TEdit;
Panel1: TPanel;
Label9: TLabel;
Label10: TLabel;
Label11: TLabel;
Label12: TLabel;
Label13: TLabel;
PcntEdit: TEdit;
IRT1Edit: TEdit;
IRT2Edit: TEdit;
IRT3Edit: TEdit;
NoSelEdit: TEdit;
Label3: TLabel;
StemMemo: TMemo;
NewBtn: TButton;
SaveBtn: TButton;
DeleteBtn: TButton;
ReturnBtn: TButton;
AnswerMemo: TMemo;
Label4: TLabel;
OpenPictureDialog1: TOpenPictureDialog;
Label5: TLabel;
SymbolBox: TListBox;
Label6: TLabel;
OpenDialog1: TOpenDialog;
procedure FormShow(Sender: TObject);
procedure ShowEssayItem(Sender: TObject; itemno : integer);
procedure ReturnBtnClick(Sender: TObject);
procedure NewBtnClick(Sender: TObject);
procedure SaveBtnClick(Sender: TObject);
procedure LoadRecord(VAR NewRcd : EssayItemRcd; Sender : TObject);
procedure DeleteBtnClick(Sender: TObject);
procedure BrowseBtnClick(Sender: TObject);
procedure ItemNoScrollScroll(Sender: TObject; ScrollCode: TScrollCode;
var ScrollPos: Integer);
procedure ClearBtnClick(Sender: TObject);
procedure SymbolBoxClick(Sender: TObject);
procedure StemMemoEnter(Sender: TObject);
procedure AnswerMemoEnter(Sender: TObject);
private
{ Private declarations }
maxitems : integer;
ARcd : EssayItemRcd;
symbol : char;
EditBox : integer;
public
{ Public declarations }
end;
var
EssayFrm: TEssayFrm;
implementation
{$R *.lfm}
procedure TEssayFrm.FormShow(Sender: TObject);
var
F : TextFile;
S : string;
TF : File of EssayItemRcd;
i : integer;
begin
StemMemo.Clear;
AnswerMemo.Clear;
ItemNoScroll.Min := 1;
ItemNoScroll.Max := 1;
ItemNoEdit.Text := '1';
ItemNoScroll.Position := 1;
CodeCombo.Text := '';
BMPFileEdit.Text := '';
PcntEdit.Text := '0';
IRT1Edit.Text := '0';
IRT2Edit.Text := '0';
IRT3Edit.Text := '0';
NoSelEdit.Text := '0';
ItemWeightEdit.Text := '0';
maxitems := 0;
OpenDialog1.DefaultExt := '.COD';
OpenDialog1.Filter := 'Code files (*.cod)|*.COD|Text files (*.txt)|*.TXT|All files (*.*)|*.*';
OpenDialog1.FilterIndex := 1;
OpenDialog1.FileName := BankPath + ExtractFileName(BankName) + '.COD';
OpenDialog1.Title := 'Name of Item Code File:';
if OpenDialog1.Execute then
begin
AssignFile(F,OpenDialog1.filename);
ReSet(F);
while not EOF(F) do
begin
readln(F,S);
CodeCombo.Items.Add(S);
end;
end
else begin
ShowMessage('You must first open a file of item codes.');
exit;
end;
CloseFile(F);
S := BankPath + 'EssayFile' + ExtractFileName(BankName);
EssayFName := S;
if FileExists(S) { *Converted from FileExists* } then
begin
AssignFile(TF,S);
Reset(TF);
while not EOF(TF) do
begin
read(TF,EssayItem);
maxitems := maxitems + 1;
end;
CloseFile(TF);
if maxitems > ItemNoScroll.Max then
ItemNoScroll.Max := maxitems;
ItemNoScroll.Min := 1;
end
else begin // create empty file
AssignFile(TF,S);
rewrite(TF);
CloseFile(TF);
end;
for i := 1 to 20 do ARcd.BestAns[i] := '';
if maxitems > 0 then
begin
ItemNoScroll.Position := 1;
ShowEssayItem(self,1);
end;
SymbolBox.Clear;
for i := 127 to 255 do SymbolBox.Items.Add(chr(ord(i)));
end;
//-------------------------------------------------------------------
procedure TEssayFrm.ShowEssayItem(Sender: TObject; itemno : integer);
var
S : string;
F : File of EssayItemRcd;
where : longint;
Frecd : EssayItemRcd;
i : integer;
begin
ItemNoEdit.Text := IntToStr(ItemNoScroll.Position);
S := BankPath + 'EssayFile' + ExtractFileName(BankName);
AssignFile(F,S);
Reset(F);
where := itemno-1;
Seek(F,where);
read(F,FRecd);
CloseFile(F);
CodeCombo.Text := Frecd.Code;
BMPFileEdit.Text := Frecd.Picture;
PcntEdit.Text := FloatToStr(Frecd.PcntPass);
if BMPFileEdit.Text <> '' then
begin
if FileExists(Frecd.Picture) { *Converted from FileExists* } then
begin
BMPImage.Picture.LoadFromFile(Frecd.Picture);
BMPImage.Visible := true;
end
else begin
// ShowMessage('Image ' + Frecd.Picture + ' not found.');
BMPFileEdit.Text := '';
Frecd.Picture := '';
end;
end
else BMPImage.Visible := false;
ItemWeightEdit.Text := IntToStr(Frecd.ItemWeight);
IRT1Edit.Text := FloatToStr(Frecd.IRT[1]);
IRT2Edit.Text := FloatToStr(Frecd.IRT[2]);
IRT3Edit.Text := FLoatToStr(Frecd.IRT[3]);
StemMemo.Clear;
for i := 1 to 20 do
begin
S := Frecd.ItemStem[i];
if length(S) > 0 then StemMemo.Lines.Add(S);
end;
AnswerMemo.Clear;
for i := 1 to 20 do
begin
S := Frecd.BestAns[i];
if length(S) > 0 then AnswerMemo.Lines.Add(S);
end;
end;
//-------------------------------------------------------------------
procedure TEssayFrm.ReturnBtnClick(Sender: TObject);
begin
EssayFrm.Hide;
end;
//-------------------------------------------------------------------
procedure TEssayFrm.NewBtnClick(Sender: TObject);
begin
StemMemo.Clear;
AnswerMemo.Clear;
ItemNoScroll.Max := maxitems + 1;
ItemNoScroll.Position := ItemNoScroll.Max;
ItemNoEdit.Text := IntToStr(ItemNoScroll.Position);
CodeCombo.Text := '';
BMPFileEdit.Text := '';
BMPImage.Visible := false;
PcntEdit.Text := '0';
IRT1Edit.Text := '0';
IRT2Edit.Text := '0';
IRT3Edit.Text := '0';
NoSelEdit.Text := '0';
ItemWeightEdit.Text := '0';
BMPImage.Visible := false;
end;
//-------------------------------------------------------------------
procedure TEssayFrm.SaveBtnClick(Sender: TObject);
var
NewRcd : EssayItemRcd;
itemno : integer;
begin
itemno := ItemNoScroll.Position;
LoadRecord(NewRcd,self);
WriteESItem(itemno,NewRcd);
if itemno > maxitems then
begin
maxitems := itemno;
ItemNoScroll.Max := maxitems+1;
end;
end;
//-------------------------------------------------------------------
procedure TEssayFrm.LoadRecord(VAR NewRcd : EssayItemRcd; Sender : TObject);
var
i : integer;
S : string;
begin
NewRcd.ItemNo := ItemNoScroll.Position;
NewRcd.Code := CodeCombo.Text;
for i := 0 to StemMemo.Lines.Count-1 do
begin
S := Trim(StemMemo.Lines[i]);
NewRcd.ItemStem[i+1] := S;
end;
if StemMemo.Lines.Count < 20 then
for i := StemMemo.Lines.Count+1 to 20 do NewRcd.ItemStem[i] := '';
for i := 0 to AnswerMemo.Lines.Count-1 do
begin
S := Trim(AnswerMemo.Lines[i]);
NewRcd.BestAns[i+1] := S;
end;
if AnswerMemo.Lines.Count < 20 then
for i := AnswerMemo.Lines.Count+1 to 20 do NewRcd.BestAns[i] := '';
NewRcd.ItemWeight := StrToInt(ItemWeightEdit.Text);
NewRcd.Picture := BMPFileEdit.Text;
NewRcd.PcntPass := StrToFloat(PcntEdit.Text);
NewRcd.IRT[1] := StrToFloat(IRT1Edit.Text);
NewRcd.IRT[2] := StrToFloat(IRT2Edit.Text);
NewRcd.IRT[3] := StrToFloat(IRT3Edit.Text);
NewRcd.FreqElect := StrToInt(NoSelEdit.Text);
end;
//-------------------------------------------------------------------
procedure TEssayFrm.DeleteBtnClick(Sender: TObject);
var
FOld : File of EssayItemRcd;
FNew : File of EssayItemRcd;
itemno : integer;
i : integer;
SOld : string;
SNew : string;
begin
itemno := ItemNoScroll.Position;
SOld := BankPath + 'EssayFile' + ExtractFileName(BankName);
AssignFile(FOld,SOld);
ReSet(FOld);
SNew := BankPath + 'TempEssayFile';
AssignFile(FNew,SNew);
Rewrite(FNew);
// copy up to itemno from old file to new file
for i := 1 to itemno-1 do
begin
if not EOF(FOld) then
begin
read(FOld,ARcd);
write(FNew,ARcd);
end;
end;
// read past itemno to delete
if not EOF(FOld) then read(FOld,ARcd);
// write remaining records, if any, from old to new
if not EOF(FOld) then
begin
while not EOF(FOld) do
begin
read(FOld,ARcd);
write(FNew,ARcd);
end;
end;
CloseFile(FOld);
CloseFile(FNew);
// delete old file and rename temp file to old file name
DeleteFile(SOld); { *Converted from DeleteFile* }
RenameFile(SNew, Sold); { *Converted from RenameFile* }
maxitems := maxitems - 1;
if maxitems > 0 then ItemNoScroll.Max := maxitems else
ItemNoScroll.Max := 1;
end;
//-------------------------------------------------------------------
procedure TEssayFrm.BrowseBtnClick(Sender: TObject);
begin
if OpenPictureDialog1.Execute then
begin
BMPFileEdit.Text := OpenPictureDialog1.FileName;
BMPImage.Picture.LoadFromFile(BMPFileEdit.Text);
BMPImage.Visible := true;
end;
end;
//-------------------------------------------------------------------
procedure TEssayFrm.ItemNoScrollScroll(Sender: TObject;
ScrollCode: TScrollCode; var ScrollPos: Integer);
var
itemno : integer;
begin
itemno := ScrollPos;
if (itemno > maxitems) or (itemno < 1) then exit;
ItemNoEdit.Text := IntToStr(itemno);
ShowEssayItem(self,itemno);
end;
//-------------------------------------------------------------------
procedure TEssayFrm.ClearBtnClick(Sender: TObject);
begin
BMPFileEdit.Text := '';
BMPImage.Visible := false;
end;
//-------------------------------------------------------------------
procedure TEssayFrm.SymbolBoxClick(Sender: TObject);
var
index : integer;
S : string;
begin
if EditBox = 1 then
begin
index := SymbolBox.ItemIndex;
S := SymbolBox.Items.Strings[index];
symbol := S[1];
index := StemMemo.Lines.Count;
if index > 0 then
begin
S := StemMemo.Lines.Strings[index-1];
StemMemo.Lines.Delete(index-1);
S := S + symbol;
StemMemo.Lines.Insert(index-1,S);
end
else begin
S := StemMemo.Lines.Strings[0];
StemMemo.Lines.Delete(0);
S := S + symbol;
StemMemo.Lines.Add(S);
end;
end
else begin
index := SymbolBox.ItemIndex;
S := SymbolBox.Items.Strings[index];
symbol := S[1];
index := AnswerMemo.Lines.Count;
if index > 0 then
begin
S := AnswerMemo.Lines.Strings[index-1];
AnswerMemo.Lines.Delete(index-1);
S := S + symbol;
AnswerMemo.Lines.Insert(index-1,S);
end
else begin
S := AnswerMemo.Lines.Strings[0];
AnswerMemo.Lines.Delete(0);
S := S + symbol;
AnswerMemo.Lines.Add(S);
end;
end;
end;
//-------------------------------------------------------------------
procedure TEssayFrm.StemMemoEnter(Sender: TObject);
begin
EditBox := 1;
end;
//-------------------------------------------------------------------
procedure TEssayFrm.AnswerMemoEnter(Sender: TObject);
begin
EditBox := 2;
end;
//-------------------------------------------------------------------
end.

View File

@ -0,0 +1,329 @@
object EssayFrm: TEssayFrm
Left = 23
Top = 10
HelpContext = 1855
BorderStyle = bsDialog
Caption = 'Essay Item Specification'
ClientHeight = 479
ClientWidth = 658
Color = clBtnFace
Font.Charset = DEFAULT_CHARSET
Font.Color = clWindowText
Font.Height = -11
Font.Name = 'MS Sans Serif'
Font.Style = []
HelpFile = 'ITEMBANKHELP.HLP'
OnShow = FormShow
PixelsPerInch = 96
object Label2: TLabel
Left = 16
Top = 8
Width = 63
Height = 13
Caption = 'Item Number:'
end
object Label1: TLabel
Left = 160
Top = 8
Width = 281
Height = 13
Caption = 'Click on the Item Classification Code listed in the box below.'
end
object Label14: TLabel
Left = 16
Top = 64
Width = 89
Height = 13
Caption = 'Bit Map File Name:'
end
object Label15: TLabel
Left = 16
Top = 88
Width = 72
Height = 13
Caption = 'Image (if used):'
end
object Label16: TLabel
Left = 120
Top = 80
Width = 97
Height = 13
Caption = '(Thumb Nail Sketch)'
end
object BMPImage: TImage
Left = 112
Top = 96
Width = 121
Height = 97
Center = True
Stretch = True
end
object Label18: TLabel
Left = 248
Top = 96
Width = 60
Height = 13
Caption = 'Item Weight:'
end
object Label3: TLabel
Left = 16
Top = 208
Width = 47
Height = 13
Caption = 'Item Stem'
end
object Label4: TLabel
Left = 16
Top = 328
Width = 92
Height = 13
Caption = 'Suggested Answer:'
end
object Label5: TLabel
Left = 600
Top = 8
Width = 39
Height = 13
Caption = 'Symbols'
end
object Label6: TLabel
Left = 584
Top = 24
Width = 68
Height = 13
Caption = 'Click to Select'
end
object ItemNoEdit: TEdit
Left = 104
Top = 0
Width = 41
Height = 21
TabOrder = 0
end
object ItemNoScroll: TScrollBar
Left = 16
Top = 28
Width = 129
Height = 16
Max = 1000
PageSize = 0
TabOrder = 1
OnScroll = ItemNoScrollScroll
end
object CodeCombo: TComboBox
Left = 160
Top = 24
Width = 417
Height = 21
ItemHeight = 13
TabOrder = 2
Text = 'Classification Code'
end
object BMPFileEdit: TEdit
Left = 112
Top = 56
Width = 465
Height = 21
TabOrder = 3
Text = 'BMPFileEdit'
end
object BrowseBtn: TButton
Left = 24
Top = 112
Width = 57
Height = 25
Caption = 'Browse'
TabOrder = 4
OnClick = BrowseBtnClick
end
object ClearBtn: TButton
Left = 24
Top = 144
Width = 57
Height = 25
Caption = 'Clear'
TabOrder = 5
OnClick = ClearBtnClick
end
object ItemWeightEdit: TEdit
Left = 312
Top = 96
Width = 33
Height = 21
TabOrder = 6
Text = 'ItemWeightEdit'
end
object Panel1: TPanel
Left = 408
Top = 80
Width = 169
Height = 137
TabOrder = 7
object Label9: TLabel
Left = 6
Top = 14
Width = 78
Height = 13
Caption = 'Percent Passed:'
end
object Label10: TLabel
Left = 6
Top = 38
Width = 97
Height = 13
Caption = 'Log Difficulty (IRT1):'
end
object Label11: TLabel
Left = 6
Top = 62
Width = 86
Height = 13
Caption = 'Item Slope (IRT2):'
end
object Label12: TLabel
Left = 6
Top = 86
Width = 96
Height = 13
Caption = 'Item Chance (IRT3):'
end
object Label13: TLabel
Left = 6
Top = 110
Width = 76
Height = 13
Caption = 'Times Selected:'
end
object PcntEdit: TEdit
Left = 110
Top = 6
Width = 41
Height = 21
TabOrder = 0
end
object IRT1Edit: TEdit
Left = 110
Top = 30
Width = 41
Height = 21
TabOrder = 1
end
object IRT2Edit: TEdit
Left = 110
Top = 54
Width = 41
Height = 21
TabOrder = 2
end
object IRT3Edit: TEdit
Left = 110
Top = 78
Width = 41
Height = 21
TabOrder = 3
end
object NoSelEdit: TEdit
Left = 110
Top = 102
Width = 41
Height = 21
TabOrder = 4
end
end
object StemMemo: TMemo
Left = 16
Top = 224
Width = 561
Height = 97
Font.Charset = GREEK_CHARSET
Font.Color = clWindowText
Font.Height = -16
Font.Name = 'Times New Roman'
Font.Style = []
MaxLength = 1000
ParentFont = False
ScrollBars = ssVertical
TabOrder = 8
WantTabs = True
WordWrap = False
OnEnter = StemMemoEnter
end
object NewBtn: TButton
Left = 16
Top = 443
Width = 73
Height = 25
Caption = 'New Item'
TabOrder = 9
OnClick = NewBtnClick
end
object SaveBtn: TButton
Left = 104
Top = 443
Width = 73
Height = 25
Caption = 'Save Item'
TabOrder = 10
OnClick = SaveBtnClick
end
object DeleteBtn: TButton
Left = 192
Top = 443
Width = 73
Height = 25
Caption = 'Delete'
TabOrder = 11
OnClick = DeleteBtnClick
end
object ReturnBtn: TButton
Left = 496
Top = 443
Width = 73
Height = 25
Caption = 'Return'
ModalResult = 1
TabOrder = 12
OnClick = ReturnBtnClick
end
object AnswerMemo: TMemo
Left = 16
Top = 344
Width = 553
Height = 89
Font.Charset = GREEK_CHARSET
Font.Color = clWindowText
Font.Height = -16
Font.Name = 'Times New Roman'
Font.Style = []
Lines.Strings = (
'')
MaxLength = 1000
ParentFont = False
TabOrder = 13
WantTabs = True
OnEnter = AnswerMemoEnter
end
object SymbolBox: TListBox
Left = 592
Top = 40
Width = 49
Height = 425
Font.Charset = GREEK_CHARSET
Font.Color = clWindowText
Font.Height = -16
Font.Name = 'Times New Roman'
Font.Style = []
ItemHeight = 19
ParentFont = False
TabOrder = 14
OnClick = SymbolBoxClick
end
object OpenPictureDialog1: TOpenPictureDialog
Left = 304
Top = 440
end
object OpenDialog1: TOpenDialog
Left = 344
Top = 440
end
end

View File

@ -0,0 +1,456 @@
unit ExactUnit;
{$mode objfpc}{$H+}
interface
uses
Classes, SysUtils, FileUtil, LResources, Forms, Controls, Graphics, Dialogs,
ExtCtrls, StdCtrls, Buttons, MainUnit, OutPutUnit, FunctionsLib,
Globals, DataProcs, Math;
type
{ TFisherFrm }
TFisherFrm = class(TForm)
ResetBtn: TButton;
CancelBtn: TButton;
ComputeBtn: TButton;
ReturnBtn: TButton;
RC11Edit: TEdit;
RC12Edit: TEdit;
RC21Edit: TEdit;
RC22Edit: TEdit;
Label6: TLabel;
Label7: TLabel;
Label8: TLabel;
Label9: TLabel;
NCasesEdit: TEdit;
NCasesLabel: TLabel;
Panel2: TPanel;
RowIn: TBitBtn;
RowOut: TBitBtn;
ColIn: TBitBtn;
ColOut: TBitBtn;
DepIn: TBitBtn;
DepOut: TBitBtn;
ColEdit: TEdit;
DepEdit: TEdit;
RowEdit: TEdit;
InputGrp: TRadioGroup;
Label1: TLabel;
Label2: TLabel;
Label3: TLabel;
Label4: TLabel;
VarList: TListBox;
Panel1: TPanel;
procedure ColInClick(Sender: TObject);
procedure ColOutClick(Sender: TObject);
procedure ComputeBtnClick(Sender: TObject);
procedure DepInClick(Sender: TObject);
procedure DepOutClick(Sender: TObject);
procedure FormShow(Sender: TObject);
procedure InputGrpClick(Sender: TObject);
procedure RC11EditKeyPress(Sender: TObject; var Key: char);
procedure RC12EditKeyPress(Sender: TObject; var Key: char);
procedure RC21EditKeyPress(Sender: TObject; var Key: char);
procedure RC22EditKeyPress(Sender: TObject; var Key: char);
procedure ResetBtnClick(Sender: TObject);
procedure RowInClick(Sender: TObject);
procedure RowOutClick(Sender: TObject);
private
{ private declarations }
procedure FisherTable(A, b, C, d : integer; p, SumP : double);
public
{ public declarations }
end;
var
FisherFrm: TFisherFrm;
implementation
{ TFisherFrm }
procedure TFisherFrm.ResetBtnClick(Sender: TObject);
VAR i : integer;
begin
VarList.Clear;
RowEdit.Text := '';
ColEdit.Text := '';
DepEdit.Text := '';
DepEdit.Visible := false;
RowIn.Visible := true;
RowOut.Visible := false;
ColIn.Visible := false;
ColOut.Visible := false;
DepIn.Visible := false;
DepOut.Visible := false;
NCasesLabel.Visible := false;
Label4.Visible := false;
NCasesEdit.Text := '';
NCasesEdit.Visible := false;
for i := 1 to NoVariables do
VarList.Items.Add(OS3MainFrm.DataGrid.Cells[i,0]);
Panel1.Visible := false;
Panel2.Visible := false;
RC11Edit.Text := '';
RC12Edit.Text := '';
RC21Edit.Text := '';
RC22Edit.Text := '';
end;
procedure TFisherFrm.RowInClick(Sender: TObject);
VAR index : integer;
begin
index := VarList.ItemIndex;
RowEdit.Text := VarList.Items.Strings[index];
VarList.Items.Delete(index);
RowIn.Visible := false;
RowOut.Visible := true;
end;
procedure TFisherFrm.RowOutClick(Sender: TObject);
begin
VarList.Items.Add(RowEdit.Text);
RowEdit.Text := '';
RowIn.Visible := true;
RowOut.Visible := false;
end;
procedure TFisherFrm.FormShow(Sender: TObject);
begin
ResetBtnClick(self);
end;
procedure TFisherFrm.ColInClick(Sender: TObject);
VAR index : integer;
begin
index := VarList.ItemIndex;
ColEdit.Text := VarList.Items.Strings[index];
VarList.Items.Delete(index);
ColIn.Visible := false;
ColOut.Visible := true;
end;
procedure TFisherFrm.ColOutClick(Sender: TObject);
begin
VarList.Items.Add(ColEdit.Text);
ColEdit.Text := '';
ColIn.Visible := true;
ColOut.Visible := false;
end;
procedure TFisherFrm.ComputeBtnClick(Sender: TObject);
var
i, j, row, col, caserow, casecol, A, b, C, d, Largest : integer;
N, APlusB, APlusC, BPlusD, CPlusD, NoSelected, dep : integer;
FirstP, p, SumProb, Tocher, Alpha, X : double;
obs : array[1..2,1..2] of integer;
ColNoSelected : IntDyneVec;
done : boolean;
cellstring, outline, response : string;
begin
Randomize; // initialize random number generator
row := 0;
col := 0;
dep := 0;
// get column no.s of row and col variables
if InputGrp.ItemIndex <> 3 then
begin
for i := 1 to NoVariables do
begin
cellstring := RowEdit.Text;
if cellstring = OS3MainFrm.DataGrid.Cells[i,0] then row := i;
cellstring := ColEdit.Text;
if cellstring = OS3MainFrm.DataGrid.Cells[i,0] then col := i;
if InputGrp.ItemIndex = 2 then
begin
cellstring := DepEdit.Text;
if cellstring = OS3MainFrm.DataGrid.Cells[i,0] then dep := i;
end;
end;
end;
SetLength(ColNoSelected,3);
ColNoSelected[0] := row;
ColNoSelected[1] := col;
if InputGrp.ItemIndex = 2 then
begin
ColNoSelected[2] := dep;
NoSelected := 3;
end
else NoSelected := 2;
//initialize observed matrix
for i := 1 to 2 do
for j := 1 to 2 do obs[i,j] := 0;
if InputGrp.ItemIndex = 3 then // get freq. from form
begin
obs[1,1] := StrToInt(RC11Edit.Text);
obs[1,2] := StrToInt(RC12Edit.Text);
obs[2,1] := StrToInt(RC21Edit.Text);
obs[2,2] := StrToInt(RC22Edit.Text);
end;
if InputGrp.ItemIndex = 0 then // count no. in row/col combinations
begin
for j := 1 to NoCases do
begin
if (not GoodRecord(j,NoSelected,ColNoSelected)) then continue;
caserow := round(StrToFloat(Trim(OS3MainFrm.DataGrid.Cells[row,j])));
casecol := round(StrToFloat(Trim(OS3MainFrm.DataGrid.Cells[col,j])));
if (caserow > 2) or (caserow < 1) then
begin
ShowMessage('ERROR! Row < 1 or > 2 found. Case ignored.');
continue;
end;
if (casecol > 2) or (casecol < 1) then
begin
ShowMessage('ERROR! Column < 1 or > 2 found. Case ignored.');
continue;
end;
obs[caserow,casecol] := obs[caserow,casecol] + 1;
end;
end;
if (InputGrp.ItemIndex = 1) or (InputGrp.ItemIndex = 2) then // Grid has frequencies for row/col
begin
for j := 1 to NoCases do
begin
if (not GoodRecord(j,NoSelected,ColNoSelected)) then continue;
caserow := round(StrToFloat(Trim(OS3MainFrm.DataGrid.Cells[row,j])));
casecol := round(StrToFloat(Trim(OS3MainFrm.DataGrid.Cells[col,j])));
if (caserow > 2) or (caserow < 1) then
begin
ShowMessage('ERROR! Row < 1 or > 2 found. Case ignored.');
continue;
end;
if (casecol > 2) or (casecol < 1) then
begin
ShowMessage('ERROR! Column < 1 or > 2 found. Case ignored.');
continue;
end;
obs[caserow,casecol] := round(StrToFloat(Trim(OS3MainFrm.DataGrid.Cells[dep,j])));
if InputGrp.ItemIndex = 2 then
obs[caserow,casecol] := obs[caserow,casecol] *
StrToInt(NCasesEdit.Text);
end;
end;
//Find smallest value
A := obs[1,1];
b := obs[1,2];
C := obs[2,1];
d := obs[2,2];
APlusB := A + b;
CPlusD := C + d;
BPlusD := b + d;
APlusC := A + C;
N := A + b + C + d;
Largest := 1;
if (b > A) then largest := 2;
if ((b > A) and (b > C) and (b > d)) then Largest := 2;
if ((C > A) and (C > b) and (C > d)) then Largest := 3;
if ((d > A) and (d > b) and (d > C)) then Largest := 4;
//Ready output
OutPutFrm.RichEdit.Clear;
SumProb := 0.0;
OutPutFrm.RichEdit.Lines.Add('Fisher Exact Probability Test');
OutPutFrm.RichEdit.Lines.Add('');
//Get first probability
FirstP := combos(A, APlusC) * combos(b, BPlusD) / combos(APlusB, N);
SumProb := SumProb + FirstP;
FisherTable(A, b, C, d, FirstP, SumProb);
//Get more extreme probabilities
done := false;
while (not done) do
begin
case Largest of
1: begin// top row, first col
if (A = APlusB) then done := true
else begin
A := A + 1;
b := b - 1;
C := C - 1;
d := d + 1;
end;
end;
2: begin// top row, second column
if (b = APlusB) then done := true
else begin
A := A - 1;
b := b + 1;
C := C + 1;
d := d - 1;
end;
end;
3: begin // second row, first column
if (C = CPlusD) then done := true
else begin
A := A - 1;
b := b + 1;
C := C + 1;
d := d - 1;
end;
end;
4: begin // second row, second column
if (d = CPlusD) then done := true
else begin
A := A + 1;
b := b - 1;
C := C - 1;
d := d + 1;
end;
end;
end; // end case
if (not done) then
begin
p := combos(A, APlusC) * combos(b, BPlusD) / combos(APlusB, N);
SumProb := SumProb + p;
FisherTable(A, b, C, d, p, SumProb);
end;
end;
//Tocher's modification
response :=
InputBox( 'ALPHA','Enter your Alpha (Type I Error rate) : ', '0.05');
Alpha := StrToFloat(response);
if ((SumProb - FirstP) > Alpha) then //Extreme values > alpha - accept null hypothesis
OutPutFrm.RichEdit.Lines.Add('Null hypothesis accepted.')
else begin//Extreme values significant - is total probability significant?
if (SumProb >= Alpha) then//No, so apply Tocher's rule
begin
Tocher := ( Alpha - (SumProb - FirstP)) / FirstP;
X := random(1000) / 1000.0; //Select a random value between 0 and num - 1
outline := format('Tocher ratio computed: %5.3f',[Tocher]);
OutPutFrm.RichEdit.Lines.Add(outline);
if (X < Tocher) then //Call it significant
begin
outline := format('A random value of %5.3f selected was less than the Tocher value.',[X]);
OutPutFrm.RichEdit.Lines.Add(outline);
OutPutFrm.RichEdit.Lines.Add('Conclusion: Reject the null Hypothesis');
end
else begin //Call it non-significant
outline := format('A random value of %5.3f selected was greater than the Tocher value.',[X]);
OutPutFrm.RichEdit.Lines.Add(outline);
OutPutFrm.RichEdit.Lines.Add('Conclusion: Accept the null Hypothesis');
end;
end
else begin //Total probability < alpha - reject null
OutPutFrm.RichEdit.Lines.Add('Probability less than alpha - reject null hypothesis.');
end; // end if-else
end; // end if-else
OutPutFrm.ShowModal;
end;
procedure TFisherFrm.DepInClick(Sender: TObject);
VAR index : integer;
begin
index := VarList.ItemIndex;
DepEdit.Text := VarList.Items.Strings[index];
VarList.Items.Delete(index);
DepIn.Visible := false;
DepOut.Visible := true;
end;
procedure TFisherFrm.DepOutClick(Sender: TObject);
begin
VarList.Items.Add(DepEdit.Text);
DepEdit.Text := '';
DepIn.Visible := true;
DepOut.Visible := false;
end;
procedure TFisherFrm.InputGrpClick(Sender: TObject);
begin
if InputGrp.ItemIndex = 3 then
begin
Panel2.Visible := true;
Panel1.Visible := false;
RC11Edit.SetFocus;
Label4.Visible := false;
ColIn.Visible := false;
DepIn.Visible := false;
DepOut.Visible := false;
end
else
begin
Panel1.Visible := true;
Panel2.Visible := false;
ColIn.Visible := true;
ColOut.Visible := false;
if InputGrp.ItemIndex = 2 then
begin
NCasesLabel.Visible := true;
NCasesEdit.Visible := true;
end
else begin
NCasesLabel.Visible := false;
NCasesEdit.Visible := false;
end;
if InputGrp.ItemIndex = 0 then
begin
Label4.Visible := false;
DepEdit.Visible := false;
DepIn.Visible := false;
DepOut.Visible := false;
end
else begin // InputGrp = 1
Label4.Visible := true;
DepEdit.Visible := true;
DepIn.Visible := true;
DepOut.Visible := true;
end;
end;
end;
procedure TFisherFrm.RC11EditKeyPress(Sender: TObject; var Key: char);
begin
if Ord(Key) = 13 then RC12Edit.SetFocus;
end;
procedure TFisherFrm.RC12EditKeyPress(Sender: TObject; var Key: char);
begin
if Ord(Key) = 13 then RC21Edit.SetFocus;
end;
procedure TFisherFrm.RC21EditKeyPress(Sender: TObject; var Key: char);
begin
if Ord(Key) = 13 then RC22Edit.SetFocus;
end;
procedure TFisherFrm.RC22EditKeyPress(Sender: TObject; var Key: char);
begin
if Ord(Key) = 13 then ComputeBtn.SetFocus;
end;
procedure TFisherFrm.FisherTable(A, b, C, d : integer; p, SumP : double);
var
outline : string;
begin
OutPutFrm.RichEdit.Lines.Add('');
OutPutFrm.RichEdit.Lines.Add('Contingency Table for Fisher Exact Test');
OutPutFrm.RichEdit.Lines.Add(' Column');
OutPutFrm.RichEdit.Lines.Add('Row 1 2');
outline := format(' 1 %10d %10d',[A, b]);
OutPutFrm.RichEdit.Lines.Add(outline);
outline := format(' 2 %10d %10d',[C, d]);
OutPutFrm.RichEdit.Lines.Add(outline);
outline := format('Probability := %6.4f',[p]);
OutPutFrm.RichEdit.Lines.Add(outline);
OutPutFrm.RichEdit.Lines.Add('');
outline := format('Cumulative Probability := %6.4f',[SumP]);
OutPutFrm.RichEdit.Lines.Add(outline);
OutPutFrm.RichEdit.Lines.Add('');
end;
initialization
{$I exactunit.lrs}
end.

View File

@ -0,0 +1,508 @@
object FisherFrm: TFisherFrm
Left = 171
Height = 407
Top = 104
Width = 553
Caption = 'Fisher''s Exact Test for a 2 by 2 Table'
ClientHeight = 407
ClientWidth = 553
OnShow = FormShow
LCLVersion = '0.9.26.2'
object InputGrp: TRadioGroup
Left = 6
Height = 95
Top = 1
Width = 366
AutoFill = True
Caption = 'Input Options'
ChildSizing.LeftRightSpacing = 6
ChildSizing.TopBottomSpacing = 6
ChildSizing.EnlargeHorizontal = crsHomogenousChildResize
ChildSizing.EnlargeVertical = crsHomogenousChildResize
ChildSizing.ShrinkHorizontal = crsScaleChilds
ChildSizing.ShrinkVertical = crsScaleChilds
ChildSizing.Layout = cclLeftToRightThenTopToBottom
ChildSizing.ControlsPerLine = 1
ClientHeight = 77
ClientWidth = 362
Items.Strings = (
'Count cases classified by row and column vectors in the data grid.'
'Use frequencies recorded in the data grid for row and column variables.'
'Use proportions recorded in the data grid for row and column variables.'
'Enter frequencies on this form.'
)
OnClick = InputGrpClick
TabOrder = 0
end
object Panel1: TPanel
Left = 6
Height = 293
Top = 103
Width = 368
ClientHeight = 293
ClientWidth = 368
TabOrder = 1
object Label1: TLabel
Left = 8
Height = 14
Top = 7
Width = 90
Caption = 'Variables Available'
ParentColor = False
end
object Label2: TLabel
Left = 208
Height = 14
Top = 23
Width = 63
Caption = 'Row Variable'
ParentColor = False
end
object Label3: TLabel
Left = 207
Height = 14
Top = 103
Width = 77
Caption = 'Column Variable'
ParentColor = False
end
object Label4: TLabel
Left = 207
Height = 14
Top = 183
Width = 93
Caption = 'Variable to Analyze'
ParentColor = False
end
object NCasesLabel: TLabel
Left = 8
Height = 14
Top = 265
Width = 94
Caption = 'Total No. of Cases:'
ParentColor = False
end
object VarList: TListBox
Left = 6
Height = 226
Top = 24
Width = 153
TabOrder = 0
end
object RowIn: TBitBtn
Left = 170
Height = 26
Top = 25
Width = 29
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
}
NumGlyphs = 0
OnClick = RowInClick
TabOrder = 1
end
object RowEdit: TEdit
Left = 208
Height = 16
Top = 40
Width = 136
TabOrder = 2
Text = 'RowEdit'
end
object ColEdit: TEdit
Left = 207
Height = 17
Top = 120
Width = 138
TabOrder = 3
Text = 'ColEdit'
end
object DepEdit: TEdit
Left = 207
Height = 17
Top = 199
Width = 138
TabOrder = 4
Text = 'DepEdit'
end
object NCasesEdit: TEdit
Left = 111
Height = 18
Top = 261
Width = 49
TabOrder = 5
Text = 'NCasesEdit'
end
end
object RowOut: TBitBtn
Left = 176
Height = 26
Top = 160
Width = 29
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
}
NumGlyphs = 0
OnClick = RowOutClick
TabOrder = 2
end
object ColIn: TBitBtn
Left = 176
Height = 26
Top = 208
Width = 29
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
}
NumGlyphs = 0
OnClick = ColInClick
TabOrder = 3
end
object ColOut: TBitBtn
Left = 176
Height = 26
Top = 240
Width = 29
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
}
NumGlyphs = 0
OnClick = ColOutClick
TabOrder = 4
end
object DepIn: TBitBtn
Left = 176
Height = 26
Top = 288
Width = 29
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
}
NumGlyphs = 0
OnClick = DepInClick
TabOrder = 5
end
object DepOut: TBitBtn
Left = 176
Height = 26
Top = 320
Width = 29
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
}
NumGlyphs = 0
OnClick = DepOutClick
TabOrder = 6
end
object Panel2: TPanel
Left = 384
Height = 88
Top = 8
Width = 158
ClientHeight = 88
ClientWidth = 158
TabOrder = 7
object Label6: TLabel
Left = 7
Height = 14
Top = 27
Width = 31
Caption = 'Row 1'
ParentColor = False
end
object Label7: TLabel
Left = 7
Height = 14
Top = 59
Width = 31
Caption = 'Row 2'
ParentColor = False
end
object Label8: TLabel
Left = 40
Height = 14
Top = 9
Width = 29
Caption = 'Col. 1'
ParentColor = False
end
object Label9: TLabel
Left = 88
Height = 14
Top = 9
Width = 29
Caption = 'Col. 2'
ParentColor = False
end
object RC11Edit: TEdit
Left = 40
Height = 21
Top = 24
Width = 38
OnKeyPress = RC11EditKeyPress
TabOrder = 0
Text = 'RC11Edit'
end
object RC12Edit: TEdit
Left = 87
Height = 20
Top = 24
Width = 43
OnKeyPress = RC12EditKeyPress
TabOrder = 1
Text = 'RC12Edit'
end
object RC21Edit: TEdit
Left = 40
Height = 18
Top = 55
Width = 36
OnKeyPress = RC21EditKeyPress
TabOrder = 2
Text = 'RC21Edit'
end
object RC22Edit: TEdit
Left = 88
Height = 16
Top = 54
Width = 42
OnKeyPress = RC22EditKeyPress
TabOrder = 3
Text = 'RC22Edit'
end
end
object ResetBtn: TButton
Left = 424
Height = 29
Top = 112
Width = 83
Caption = 'Reset'
OnClick = ResetBtnClick
TabOrder = 8
end
object CancelBtn: TButton
Left = 424
Height = 29
Top = 176
Width = 83
Caption = 'Cancel'
ModalResult = 2
TabOrder = 9
end
object ComputeBtn: TButton
Left = 424
Height = 29
Top = 240
Width = 83
Caption = 'Compute'
OnClick = ComputeBtnClick
TabOrder = 10
end
object ReturnBtn: TButton
Left = 424
Height = 29
Top = 296
Width = 83
Caption = 'Return'
ModalResult = 1
TabOrder = 11
end
end

View File

@ -0,0 +1,372 @@
{ This is an automatically generated lazarus resource file }
LazarusResources.Add('TFisherFrm','FORMDATA',[
'TPF0'#10'TFisherFrm'#9'FisherFrm'#4'Left'#3#171#0#6'Height'#3#151#1#3'Top'#2
+'h'#5'Width'#3')'#2#7'Caption'#6'&Fisher''s Exact Test for a 2 by 2 Table'#12
+'ClientHeight'#3#151#1#11'ClientWidth'#3')'#2#6'OnShow'#7#8'FormShow'#10'LCL'
+'Version'#6#8'0.9.26.2'#0#11'TRadioGroup'#8'InputGrp'#4'Left'#2#6#6'Height'#2
+'_'#3'Top'#2#1#5'Width'#3'n'#1#8'AutoFill'#9#7'Caption'#6#13'Input Options'
+#28'ChildSizing.LeftRightSpacing'#2#6#28'ChildSizing.TopBottomSpacing'#2#6#29
+'ChildSizing.EnlargeHorizontal'#7#24'crsHomogenousChildResize'#27'ChildSizin'
+'g.EnlargeVertical'#7#24'crsHomogenousChildResize'#28'ChildSizing.ShrinkHori'
+'zontal'#7#14'crsScaleChilds'#26'ChildSizing.ShrinkVertical'#7#14'crsScaleCh'
+'ilds'#18'ChildSizing.Layout'#7#29'cclLeftToRightThenTopToBottom'#27'ChildSi'
+'zing.ControlsPerLine'#2#1#12'ClientHeight'#2'M'#11'ClientWidth'#3'j'#1#13'I'
+'tems.Strings'#1#6'BCount cases classified by row and column vectors in the '
+'data grid.'#6'GUse frequencies recorded in the data grid for row and column'
+' variables.'#6'GUse proportions recorded in the data grid for row and colum'
+'n variables.'#6#31'Enter frequencies on this form.'#0#7'OnClick'#7#13'Input'
+'GrpClick'#8'TabOrder'#2#0#0#0#6'TPanel'#6'Panel1'#4'Left'#2#6#6'Height'#3'%'
+#1#3'Top'#2'g'#5'Width'#3'p'#1#12'ClientHeight'#3'%'#1#11'ClientWidth'#3'p'#1
+#8'TabOrder'#2#1#0#6'TLabel'#6'Label1'#4'Left'#2#8#6'Height'#2#14#3'Top'#2#7
+#5'Width'#2'Z'#7'Caption'#6#19'Variables Available'#11'ParentColor'#8#0#0#6
+'TLabel'#6'Label2'#4'Left'#3#208#0#6'Height'#2#14#3'Top'#2#23#5'Width'#2'?'#7
+'Caption'#6#12'Row Variable'#11'ParentColor'#8#0#0#6'TLabel'#6'Label3'#4'Lef'
+'t'#3#207#0#6'Height'#2#14#3'Top'#2'g'#5'Width'#2'M'#7'Caption'#6#15'Column '
+'Variable'#11'ParentColor'#8#0#0#6'TLabel'#6'Label4'#4'Left'#3#207#0#6'Heigh'
+'t'#2#14#3'Top'#3#183#0#5'Width'#2']'#7'Caption'#6#19'Variable to Analyze'#11
+'ParentColor'#8#0#0#6'TLabel'#11'NCasesLabel'#4'Left'#2#8#6'Height'#2#14#3'T'
+'op'#3#9#1#5'Width'#2'^'#7'Caption'#6#19'Total No. of Cases:'#11'ParentColor'
+#8#0#0#8'TListBox'#7'VarList'#4'Left'#2#6#6'Height'#3#226#0#3'Top'#2#24#5'Wi'
+'dth'#3#153#0#8'TabOrder'#2#0#0#0#7'TBitBtn'#5'RowIn'#4'Left'#3#170#0#6'Heig'
+'ht'#2#26#3'Top'#2#25#5'Width'#2#29#10'Glyph.Data'#10':'#4#0#0'6'#4#0#0'BM6'
+#4#0#0#0#0#0#0'6'#0#0#0'('#0#0#0#16#0#0#0#16#0#0#0#1#0' '#0#0#0#0#0#0#4#0#0
+'d'#0#0#0'd'#0#0#0#0#0#0#0#0#0#0#0#255#255#255#0#255#255#255#0#255#255#255#0
+#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255
+#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255
+#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0
+#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255
+#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255
+#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0
+#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255
+#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255
+#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0
+#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255
+#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255
+#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0
+#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255
+#255#255#0#255#255#255#0#255#255#255#0'!c$'#184#29'^ '#6#255#255#255#0#255
+#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255
+#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0
+#255#255#255#0'*p/8%i)'#247'!c$'#217#255#255#255#0#255#255#255#0#255#255#255
+#0#255#255#255#0'a'#190'm'#255']'#184'h'#255'X'#177'b'#255'S'#169'\'#255'M'
+#161'V'#255'G'#153'O'#255'A'#145'I'#255';'#136'B'#255'5'#128';'#255'?'#136'E'
+#255'Y'#161'^'#255'D'#139'I'#255'!c$'#207#255#255#255#0#255#255#255#0#255#255
+#255#0'e'#195'q'#255#160#215#169#255#156#213#165#255#152#211#161#255#148#208
+#157#255#144#206#152#255#139#203#147#255#135#201#142#255#130#198#137#255'~'
+#195#132#255'z'#193#128#255'v'#190'|'#255'E'#140'J'#255'!c$'#196#255#255#255
+#0#255#255#255#0'h'#199't'#255#165#218#174#255#162#216#171#255#158#214#167
+#255#154#212#163#255#150#210#159#255#147#207#154#255#142#204#149#255#137#202
+#144#255#133#199#139#255#129#197#135#255'}'#194#130#255'J'#145'P'#255'%i)'
+#201#255#255#255#0#255#255#255#0'h'#199't'#255'h'#199't'#255'e'#195'q'#255'a'
+#190'm'#255']'#184'h'#255'X'#177'b'#255'S'#169'\'#255'M'#161'V'#255'G'#153'O'
+#255'A'#145'I'#255'Z'#163'b'#255'U'#157'\'#255'/x5'#209#255#255#255#0#255#255
+#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0
+#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255
+#255#255#0'A'#145'I'#247';'#136'B'#219#255#255#255#0#255#255#255#0#255#255
+#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0
,#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255
+#255#255#0'G'#153'O'#187'A'#145'I'#6#255#255#255#0#255#255#255#0#255#255#255
+#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255
+#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255
+#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0
+#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255
+#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255
+#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0
+#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255
+#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255
+#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0
+#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255
+#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255
+#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0
+#9'NumGlyphs'#2#0#7'OnClick'#7#10'RowInClick'#8'TabOrder'#2#1#0#0#5'TEdit'#7
+'RowEdit'#4'Left'#3#208#0#6'Height'#2#16#3'Top'#2'('#5'Width'#3#136#0#8'TabO'
+'rder'#2#2#4'Text'#6#7'RowEdit'#0#0#5'TEdit'#7'ColEdit'#4'Left'#3#207#0#6'He'
+'ight'#2#17#3'Top'#2'x'#5'Width'#3#138#0#8'TabOrder'#2#3#4'Text'#6#7'ColEdit'
+#0#0#5'TEdit'#7'DepEdit'#4'Left'#3#207#0#6'Height'#2#17#3'Top'#3#199#0#5'Wid'
+'th'#3#138#0#8'TabOrder'#2#4#4'Text'#6#7'DepEdit'#0#0#5'TEdit'#10'NCasesEdit'
+#4'Left'#2'o'#6'Height'#2#18#3'Top'#3#5#1#5'Width'#2'1'#8'TabOrder'#2#5#4'Te'
+'xt'#6#10'NCasesEdit'#0#0#0#7'TBitBtn'#6'RowOut'#4'Left'#3#176#0#6'Height'#2
+#26#3'Top'#3#160#0#5'Width'#2#29#10'Glyph.Data'#10':'#4#0#0'6'#4#0#0'BM6'#4#0
+#0#0#0#0#0'6'#0#0#0'('#0#0#0#16#0#0#0#16#0#0#0#1#0' '#0#0#0#0#0#0#4#0#0'd'#0
+#0#0'd'#0#0#0#0#0#0#0#0#0#0#0#255#255#255#0#255#255#255#0#255#255#255#0#255
+#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255
+#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0
+#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255
+#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255
+#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0
+#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255
+#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255
+#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0
+#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255
+#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255
+#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0
+#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0'M'#161
+'V'#6'G'#153'O'#184#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0
+#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255
+#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0'S'#169'\'
+#217'M'#161'V'#247'G'#153'O8'#255#255#255#0#255#255#255#0#255#255#255#0#255
+#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255
+#255#0#255#255#255#0#255#255#255#0#255#255#255#0']'#184'h'#207'q'#190'{'#255
+'z'#193#131#255'['#170'd'#255'G'#153'O'#255'A'#145'I'#255';'#136'B'#255'5'
+#128';'#255'/x5'#255'*p/'#255'%i)'#255'!c$'#255#29'^ '#255#255#255#255#0#255
+#255#255#0'e'#195'q'#196'{'#200#134#255#156#213#165#255#152#211#161#255#148
+#208#157#255#144#206#152#255#139#203#147#255#135#201#142#255#130#198#137#255
+'~'#195#132#255'z'#193#128#255'v'#190'|'#255'r'#189'x'#255'!c$'#255#255#255
+#255#0#255#255#255#0'h'#199't'#201''#204#138#255#162#216#171#255#158#214#167
+#255#154#212#163#255#150#210#159#255#147#207#154#255#142#204#149#255#137#202
+#144#255#133#199#139#255#129#197#135#255'}'#194#130#255'x'#192'~'#255'%i)'
+#255#255#255#255#0#255#255#255#0#255#255#255#0'h'#199't'#209#128#205#139#255
+'|'#201#135#255']'#184'h'#255'X'#177'b'#255'S'#169'\'#255'M'#161'V'#255'G'
+#153'O'#255'A'#145'I'#255';'#136'B'#255'5'#128';'#255'/x5'#255'*p/'#255#255
+#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0'h'#199't'#219'e'#195'q'
+#247#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0
+#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255
+#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0'h'#199't'#6'h'#199't'
+#187#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0
+#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255
+#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255
+#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0
+#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255
+#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255
,#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0
+#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255
+#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255
+#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0
+#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255
+#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255
+#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0
+#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255
+#255#255#0#9'NumGlyphs'#2#0#7'OnClick'#7#11'RowOutClick'#8'TabOrder'#2#2#0#0
+#7'TBitBtn'#5'ColIn'#4'Left'#3#176#0#6'Height'#2#26#3'Top'#3#208#0#5'Width'#2
+#29#10'Glyph.Data'#10':'#4#0#0'6'#4#0#0'BM6'#4#0#0#0#0#0#0'6'#0#0#0'('#0#0#0
+#16#0#0#0#16#0#0#0#1#0' '#0#0#0#0#0#0#4#0#0'd'#0#0#0'd'#0#0#0#0#0#0#0#0#0#0#0
+#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255
+#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255
+#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0
+#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255
+#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255
+#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0
+#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255
+#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255
+#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0
+#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255
+#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255
+#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0
+#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255
+#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255
+#255#0'!c$'#184#29'^ '#6#255#255#255#0#255#255#255#0#255#255#255#0#255#255
+#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0
+#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0'*p/8%i)'#247'!c$'
+#217#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0'a'#190'm'#255']'
+#184'h'#255'X'#177'b'#255'S'#169'\'#255'M'#161'V'#255'G'#153'O'#255'A'#145'I'
+#255';'#136'B'#255'5'#128';'#255'?'#136'E'#255'Y'#161'^'#255'D'#139'I'#255'!'
+'c$'#207#255#255#255#0#255#255#255#0#255#255#255#0'e'#195'q'#255#160#215#169
+#255#156#213#165#255#152#211#161#255#148#208#157#255#144#206#152#255#139#203
+#147#255#135#201#142#255#130#198#137#255'~'#195#132#255'z'#193#128#255'v'#190
+'|'#255'E'#140'J'#255'!c$'#196#255#255#255#0#255#255#255#0'h'#199't'#255#165
+#218#174#255#162#216#171#255#158#214#167#255#154#212#163#255#150#210#159#255
+#147#207#154#255#142#204#149#255#137#202#144#255#133#199#139#255#129#197#135
+#255'}'#194#130#255'J'#145'P'#255'%i)'#201#255#255#255#0#255#255#255#0'h'#199
+'t'#255'h'#199't'#255'e'#195'q'#255'a'#190'm'#255']'#184'h'#255'X'#177'b'#255
+'S'#169'\'#255'M'#161'V'#255'G'#153'O'#255'A'#145'I'#255'Z'#163'b'#255'U'#157
+'\'#255'/x5'#209#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255
+#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255
+#255#0#255#255#255#0#255#255#255#0#255#255#255#0'A'#145'I'#247';'#136'B'#219
+#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255
+#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255
+#255#0#255#255#255#0#255#255#255#0#255#255#255#0'G'#153'O'#187'A'#145'I'#6
+#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255
+#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255
+#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0
+#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255
+#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255
+#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0
+#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255
+#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255
+#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0
+#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255
+#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255
+#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0
+#255#255#255#0#255#255#255#0#255#255#255#0#9'NumGlyphs'#2#0#7'OnClick'#7#10
+'ColInClick'#8'TabOrder'#2#3#0#0#7'TBitBtn'#6'ColOut'#4'Left'#3#176#0#6'Heig'
+'ht'#2#26#3'Top'#3#240#0#5'Width'#2#29#10'Glyph.Data'#10':'#4#0#0'6'#4#0#0'B'
+'M6'#4#0#0#0#0#0#0'6'#0#0#0'('#0#0#0#16#0#0#0#16#0#0#0#1#0' '#0#0#0#0#0#0#4#0
+#0'd'#0#0#0'd'#0#0#0#0#0#0#0#0#0#0#0#255#255#255#0#255#255#255#0#255#255#255
,#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255
+#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255
+#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0
+#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255
+#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255
+#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0
+#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255
+#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255
+#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0
+#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255
+#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255
+#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0
+'M'#161'V'#6'G'#153'O'#184#255#255#255#0#255#255#255#0#255#255#255#0#255#255
+#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0
+#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0'S'#169
+'\'#217'M'#161'V'#247'G'#153'O8'#255#255#255#0#255#255#255#0#255#255#255#0
+#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255
+#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0']'#184'h'#207'q'#190'{'
+#255'z'#193#131#255'['#170'd'#255'G'#153'O'#255'A'#145'I'#255';'#136'B'#255
+'5'#128';'#255'/x5'#255'*p/'#255'%i)'#255'!c$'#255#29'^ '#255#255#255#255#0
+#255#255#255#0'e'#195'q'#196'{'#200#134#255#156#213#165#255#152#211#161#255
+#148#208#157#255#144#206#152#255#139#203#147#255#135#201#142#255#130#198#137
+#255'~'#195#132#255'z'#193#128#255'v'#190'|'#255'r'#189'x'#255'!c$'#255#255
+#255#255#0#255#255#255#0'h'#199't'#201''#204#138#255#162#216#171#255#158#214
+#167#255#154#212#163#255#150#210#159#255#147#207#154#255#142#204#149#255#137
+#202#144#255#133#199#139#255#129#197#135#255'}'#194#130#255'x'#192'~'#255'%i'
+')'#255#255#255#255#0#255#255#255#0#255#255#255#0'h'#199't'#209#128#205#139
+#255'|'#201#135#255']'#184'h'#255'X'#177'b'#255'S'#169'\'#255'M'#161'V'#255
+'G'#153'O'#255'A'#145'I'#255';'#136'B'#255'5'#128';'#255'/x5'#255'*p/'#255
+#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0'h'#199't'#219'e'#195
+'q'#247#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0
+#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255
+#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0'h'#199't'#6'h'#199't'
+#187#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0
+#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255
+#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255
+#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0
+#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255
+#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255
+#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0
+#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255
+#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255
+#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0
+#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255
+#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255
+#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0
+#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255
+#255#255#0#9'NumGlyphs'#2#0#7'OnClick'#7#11'ColOutClick'#8'TabOrder'#2#4#0#0
+#7'TBitBtn'#5'DepIn'#4'Left'#3#176#0#6'Height'#2#26#3'Top'#3' '#1#5'Width'#2
+#29#10'Glyph.Data'#10':'#4#0#0'6'#4#0#0'BM6'#4#0#0#0#0#0#0'6'#0#0#0'('#0#0#0
+#16#0#0#0#16#0#0#0#1#0' '#0#0#0#0#0#0#4#0#0'd'#0#0#0'd'#0#0#0#0#0#0#0#0#0#0#0
+#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255
+#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255
+#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0
+#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255
+#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255
+#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0
+#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255
+#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255
+#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0
+#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255
+#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255
+#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0
+#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255
,#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255
+#255#0'!c$'#184#29'^ '#6#255#255#255#0#255#255#255#0#255#255#255#0#255#255
+#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0
+#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0'*p/8%i)'#247'!c$'
+#217#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0'a'#190'm'#255']'
+#184'h'#255'X'#177'b'#255'S'#169'\'#255'M'#161'V'#255'G'#153'O'#255'A'#145'I'
+#255';'#136'B'#255'5'#128';'#255'?'#136'E'#255'Y'#161'^'#255'D'#139'I'#255'!'
+'c$'#207#255#255#255#0#255#255#255#0#255#255#255#0'e'#195'q'#255#160#215#169
+#255#156#213#165#255#152#211#161#255#148#208#157#255#144#206#152#255#139#203
+#147#255#135#201#142#255#130#198#137#255'~'#195#132#255'z'#193#128#255'v'#190
+'|'#255'E'#140'J'#255'!c$'#196#255#255#255#0#255#255#255#0'h'#199't'#255#165
+#218#174#255#162#216#171#255#158#214#167#255#154#212#163#255#150#210#159#255
+#147#207#154#255#142#204#149#255#137#202#144#255#133#199#139#255#129#197#135
+#255'}'#194#130#255'J'#145'P'#255'%i)'#201#255#255#255#0#255#255#255#0'h'#199
+'t'#255'h'#199't'#255'e'#195'q'#255'a'#190'm'#255']'#184'h'#255'X'#177'b'#255
+'S'#169'\'#255'M'#161'V'#255'G'#153'O'#255'A'#145'I'#255'Z'#163'b'#255'U'#157
+'\'#255'/x5'#209#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255
+#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255
+#255#0#255#255#255#0#255#255#255#0#255#255#255#0'A'#145'I'#247';'#136'B'#219
+#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255
+#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255
+#255#0#255#255#255#0#255#255#255#0#255#255#255#0'G'#153'O'#187'A'#145'I'#6
+#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255
+#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255
+#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0
+#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255
+#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255
+#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0
+#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255
+#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255
+#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0
+#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255
+#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255
+#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0
+#255#255#255#0#255#255#255#0#255#255#255#0#9'NumGlyphs'#2#0#7'OnClick'#7#10
+'DepInClick'#8'TabOrder'#2#5#0#0#7'TBitBtn'#6'DepOut'#4'Left'#3#176#0#6'Heig'
+'ht'#2#26#3'Top'#3'@'#1#5'Width'#2#29#10'Glyph.Data'#10':'#4#0#0'6'#4#0#0'BM'
+'6'#4#0#0#0#0#0#0'6'#0#0#0'('#0#0#0#16#0#0#0#16#0#0#0#1#0' '#0#0#0#0#0#0#4#0
+#0'd'#0#0#0'd'#0#0#0#0#0#0#0#0#0#0#0#255#255#255#0#255#255#255#0#255#255#255
+#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255
+#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255
+#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0
+#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255
+#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255
+#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0
+#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255
+#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255
+#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0
+#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255
+#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255
+#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0
+'M'#161'V'#6'G'#153'O'#184#255#255#255#0#255#255#255#0#255#255#255#0#255#255
+#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0
+#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0'S'#169
+'\'#217'M'#161'V'#247'G'#153'O8'#255#255#255#0#255#255#255#0#255#255#255#0
+#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255
+#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0']'#184'h'#207'q'#190'{'
+#255'z'#193#131#255'['#170'd'#255'G'#153'O'#255'A'#145'I'#255';'#136'B'#255
+'5'#128';'#255'/x5'#255'*p/'#255'%i)'#255'!c$'#255#29'^ '#255#255#255#255#0
+#255#255#255#0'e'#195'q'#196'{'#200#134#255#156#213#165#255#152#211#161#255
+#148#208#157#255#144#206#152#255#139#203#147#255#135#201#142#255#130#198#137
+#255'~'#195#132#255'z'#193#128#255'v'#190'|'#255'r'#189'x'#255'!c$'#255#255
+#255#255#0#255#255#255#0'h'#199't'#201''#204#138#255#162#216#171#255#158#214
+#167#255#154#212#163#255#150#210#159#255#147#207#154#255#142#204#149#255#137
,#202#144#255#133#199#139#255#129#197#135#255'}'#194#130#255'x'#192'~'#255'%i'
+')'#255#255#255#255#0#255#255#255#0#255#255#255#0'h'#199't'#209#128#205#139
+#255'|'#201#135#255']'#184'h'#255'X'#177'b'#255'S'#169'\'#255'M'#161'V'#255
+'G'#153'O'#255'A'#145'I'#255';'#136'B'#255'5'#128';'#255'/x5'#255'*p/'#255
+#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0'h'#199't'#219'e'#195
+'q'#247#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0
+#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255
+#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0'h'#199't'#6'h'#199't'
+#187#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0
+#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255
+#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255
+#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0
+#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255
+#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255
+#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0
+#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255
+#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255
+#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0
+#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255
+#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255
+#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0
+#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255
+#255#255#0#9'NumGlyphs'#2#0#7'OnClick'#7#11'DepOutClick'#8'TabOrder'#2#6#0#0
+#6'TPanel'#6'Panel2'#4'Left'#3#128#1#6'Height'#2'X'#3'Top'#2#8#5'Width'#3#158
+#0#12'ClientHeight'#2'X'#11'ClientWidth'#3#158#0#8'TabOrder'#2#7#0#6'TLabel'
+#6'Label6'#4'Left'#2#7#6'Height'#2#14#3'Top'#2#27#5'Width'#2#31#7'Caption'#6
+#5'Row 1'#11'ParentColor'#8#0#0#6'TLabel'#6'Label7'#4'Left'#2#7#6'Height'#2
+#14#3'Top'#2';'#5'Width'#2#31#7'Caption'#6#5'Row 2'#11'ParentColor'#8#0#0#6
+'TLabel'#6'Label8'#4'Left'#2'('#6'Height'#2#14#3'Top'#2#9#5'Width'#2#29#7'Ca'
+'ption'#6#6'Col. 1'#11'ParentColor'#8#0#0#6'TLabel'#6'Label9'#4'Left'#2'X'#6
+'Height'#2#14#3'Top'#2#9#5'Width'#2#29#7'Caption'#6#6'Col. 2'#11'ParentColor'
+#8#0#0#5'TEdit'#8'RC11Edit'#4'Left'#2'('#6'Height'#2#21#3'Top'#2#24#5'Width'
+#2'&'#10'OnKeyPress'#7#16'RC11EditKeyPress'#8'TabOrder'#2#0#4'Text'#6#8'RC11'
+'Edit'#0#0#5'TEdit'#8'RC12Edit'#4'Left'#2'W'#6'Height'#2#20#3'Top'#2#24#5'Wi'
+'dth'#2'+'#10'OnKeyPress'#7#16'RC12EditKeyPress'#8'TabOrder'#2#1#4'Text'#6#8
+'RC12Edit'#0#0#5'TEdit'#8'RC21Edit'#4'Left'#2'('#6'Height'#2#18#3'Top'#2'7'#5
+'Width'#2'$'#10'OnKeyPress'#7#16'RC21EditKeyPress'#8'TabOrder'#2#2#4'Text'#6
+#8'RC21Edit'#0#0#5'TEdit'#8'RC22Edit'#4'Left'#2'X'#6'Height'#2#16#3'Top'#2'6'
+#5'Width'#2'*'#10'OnKeyPress'#7#16'RC22EditKeyPress'#8'TabOrder'#2#3#4'Text'
+#6#8'RC22Edit'#0#0#0#7'TButton'#8'ResetBtn'#4'Left'#3#168#1#6'Height'#2#29#3
+'Top'#2'p'#5'Width'#2'S'#7'Caption'#6#5'Reset'#7'OnClick'#7#13'ResetBtnClick'
+#8'TabOrder'#2#8#0#0#7'TButton'#9'CancelBtn'#4'Left'#3#168#1#6'Height'#2#29#3
+'Top'#3#176#0#5'Width'#2'S'#7'Caption'#6#6'Cancel'#11'ModalResult'#2#2#8'Tab'
+'Order'#2#9#0#0#7'TButton'#10'ComputeBtn'#4'Left'#3#168#1#6'Height'#2#29#3'T'
+'op'#3#240#0#5'Width'#2'S'#7'Caption'#6#7'Compute'#7'OnClick'#7#15'ComputeBt'
+'nClick'#8'TabOrder'#2#10#0#0#7'TButton'#9'ReturnBtn'#4'Left'#3#168#1#6'Heig'
+'ht'#2#29#3'Top'#3'('#1#5'Width'#2'S'#7'Caption'#6#6'Return'#11'ModalResult'
+#2#1#8'TabOrder'#2#11#0#0#0
]);

View File

@ -0,0 +1,56 @@
unit ExpSmoothUnit;
{$mode objfpc}{$H+}
interface
uses
Classes, SysUtils, FileUtil, LResources, Forms, Controls, Graphics, Dialogs,
StdCtrls;
type
{ TExpSmoothFrm }
TExpSmoothFrm = class(TForm)
AlphaEdit: TEdit;
CancelBtn: TButton;
OKBtn: TButton;
Label1: TLabel;
Label2: TLabel;
Label3: TLabel;
AlphaScroll: TScrollBar;
procedure AlphaScrollChange(Sender: TObject);
procedure FormShow(Sender: TObject);
private
{ private declarations }
public
{ public declarations }
alpha : double;
end;
var
ExpSmoothFrm: TExpSmoothFrm;
implementation
{ TExpSmoothFrm }
procedure TExpSmoothFrm.FormShow(Sender: TObject);
begin
AlphaEdit.Text := '0.99';
AlphaScroll.Position := 99;
alpha := 0.99;
end;
procedure TExpSmoothFrm.AlphaScrollChange(Sender: TObject);
begin
AlphaEdit.Text := FloatToStr(AlphaScroll.Position / 100.0);
alpha := AlphaScroll.Position / 100.0;
end;
initialization
{$I expsmoothunit.lrs}
end.

View File

@ -0,0 +1,72 @@
object ExpSmoothFrm: TExpSmoothFrm
Left = 208
Height = 166
Top = 135
Width = 273
Caption = 'Exponential Smoothing Form'
ClientHeight = 166
ClientWidth = 273
OnShow = FormShow
LCLVersion = '0.9.28.2'
object Label1: TLabel
Left = 8
Height = 14
Top = 24
Width = 42
Caption = 'Alpha = '
ParentColor = False
end
object Label2: TLabel
Left = 8
Height = 14
Top = 80
Width = 17
Caption = '0.0'
ParentColor = False
end
object Label3: TLabel
Left = 240
Height = 14
Top = 80
Width = 17
Caption = '1.0'
ParentColor = False
end
object AlphaEdit: TEdit
Left = 64
Height = 21
Top = 17
Width = 44
TabOrder = 0
Text = '0.99'
end
object AlphaScroll: TScrollBar
Left = 8
Height = 23
Top = 48
Width = 253
Max = 1
PageSize = 0
Position = 1
TabOrder = 1
OnChange = AlphaScrollChange
end
object CancelBtn: TButton
Left = 8
Height = 28
Top = 112
Width = 75
Caption = 'Cancel'
ModalResult = 2
TabOrder = 2
end
object OKBtn: TButton
Left = 184
Height = 28
Top = 112
Width = 75
Caption = 'OK'
ModalResult = 1
TabOrder = 3
end
end

View File

@ -0,0 +1,20 @@
{ This is an automatically generated lazarus resource file }
LazarusResources.Add('TExpSmoothFrm','FORMDATA',[
'TPF0'#13'TExpSmoothFrm'#12'ExpSmoothFrm'#4'Left'#3#208#0#6'Height'#3#166#0#3
+'Top'#3#135#0#5'Width'#3#17#1#7'Caption'#6#26'Exponential Smoothing Form'#12
+'ClientHeight'#3#166#0#11'ClientWidth'#3#17#1#6'OnShow'#7#8'FormShow'#10'LCL'
+'Version'#6#8'0.9.28.2'#0#6'TLabel'#6'Label1'#4'Left'#2#8#6'Height'#2#14#3'T'
+'op'#2#24#5'Width'#2'*'#7'Caption'#6#8'Alpha = '#11'ParentColor'#8#0#0#6'TLa'
+'bel'#6'Label2'#4'Left'#2#8#6'Height'#2#14#3'Top'#2'P'#5'Width'#2#17#7'Capti'
+'on'#6#3'0.0'#11'ParentColor'#8#0#0#6'TLabel'#6'Label3'#4'Left'#3#240#0#6'He'
+'ight'#2#14#3'Top'#2'P'#5'Width'#2#17#7'Caption'#6#3'1.0'#11'ParentColor'#8#0
+#0#5'TEdit'#9'AlphaEdit'#4'Left'#2'@'#6'Height'#2#21#3'Top'#2#17#5'Width'#2
+','#8'TabOrder'#2#0#4'Text'#6#4'0.99'#0#0#10'TScrollBar'#11'AlphaScroll'#4'L'
+'eft'#2#8#6'Height'#2#23#3'Top'#2'0'#5'Width'#3#253#0#3'Max'#2#1#8'PageSize'
+#2#0#8'Position'#2#1#8'TabOrder'#2#1#8'OnChange'#7#17'AlphaScrollChange'#0#0
+#7'TButton'#9'CancelBtn'#4'Left'#2#8#6'Height'#2#28#3'Top'#2'p'#5'Width'#2'K'
+#7'Caption'#6#6'Cancel'#11'ModalResult'#2#2#8'TabOrder'#2#2#0#0#7'TButton'#5
+'OKBtn'#4'Left'#3#184#0#6'Height'#2#28#3'Top'#2'p'#5'Width'#2'K'#7'Caption'#6
+#2'OK'#11'ModalResult'#2#1#8'TabOrder'#2#3#0#0#0
]);

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,379 @@
object FactorFrm: TFactorFrm
Left = 181
Height = 486
Top = 99
Width = 608
Caption = 'Factor Analysis'
ClientHeight = 486
ClientWidth = 608
OnShow = FormShow
LCLVersion = '0.9.28.2'
object Label1: TLabel
Left = 6
Height = 14
Top = 1
Width = 90
Caption = 'Available Variables'
ParentColor = False
end
object Label2: TLabel
Left = 227
Height = 14
Top = 1
Width = 88
Caption = 'Selected Variables'
ParentColor = False
end
object Label3: TLabel
Left = 415
Height = 14
Top = 328
Width = 115
Caption = 'Min. root size to rotate:'
ParentColor = False
end
object Label4: TLabel
Left = 415
Height = 14
Top = 358
Width = 99
Caption = 'Maximum Iterations:'
ParentColor = False
end
object Label5: TLabel
Left = 414
Height = 14
Top = 391
Width = 108
Caption = 'Maximum No. Factors:'
ParentColor = False
end
object VarList: TListBox
Left = 7
Height = 295
Top = 15
Width = 169
ItemHeight = 0
MultiSelect = True
TabOrder = 0
end
object InBtn: TBitBtn
Left = 183
Height = 35
Top = 16
Width = 36
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
}
NumGlyphs = 0
OnClick = InBtnClick
TabOrder = 1
end
object OutBtn: TBitBtn
Left = 184
Height = 35
Top = 56
Width = 36
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
}
NumGlyphs = 0
OnClick = OutBtnClick
TabOrder = 2
end
object FactorList: TListBox
Left = 225
Height = 292
Top = 16
Width = 173
ItemHeight = 0
TabOrder = 3
end
object TypeGroup: TRadioGroup
Left = 416
Height = 156
Top = 4
Width = 187
AutoFill = True
Caption = 'Type of Analysis'
ChildSizing.LeftRightSpacing = 6
ChildSizing.TopBottomSpacing = 6
ChildSizing.EnlargeHorizontal = crsHomogenousChildResize
ChildSizing.EnlargeVertical = crsHomogenousChildResize
ChildSizing.ShrinkHorizontal = crsScaleChilds
ChildSizing.ShrinkVertical = crsScaleChilds
ChildSizing.Layout = cclLeftToRightThenTopToBottom
ChildSizing.ControlsPerLine = 1
ClientHeight = 138
ClientWidth = 183
Items.Strings = (
'Principal Components'
'Partial Image (No Iterations)'
'Guttman Image'
'Harris Scaled Image'
'Canonical (Max. Likelihood)'
'Alpha'
'Principal Factors'
)
TabOrder = 4
end
object RotateGroup: TRadioGroup
Left = 415
Height = 133
Top = 176
Width = 187
AutoFill = True
Caption = 'Rotation Option'
ChildSizing.LeftRightSpacing = 6
ChildSizing.TopBottomSpacing = 6
ChildSizing.EnlargeHorizontal = crsHomogenousChildResize
ChildSizing.EnlargeVertical = crsHomogenousChildResize
ChildSizing.ShrinkHorizontal = crsScaleChilds
ChildSizing.ShrinkVertical = crsScaleChilds
ChildSizing.Layout = cclLeftToRightThenTopToBottom
ChildSizing.ControlsPerLine = 1
ClientHeight = 115
ClientWidth = 183
Items.Strings = (
'Varimax'
'Oblimax'
'Quartimax'
'Manual (Graphical)'
'Procrustian'
'NO rotation'
)
TabOrder = 5
end
object GroupBox1: TGroupBox
Left = 6
Height = 110
Top = 320
Width = 393
Caption = 'Output Options:'
ClientHeight = 92
ClientWidth = 389
TabOrder = 6
object DescBtn: TCheckBox
Left = 6
Height = 17
Top = 2
Width = 119
Caption = 'Descriptive Statistics'
TabOrder = 0
end
object RMatBtn: TCheckBox
Left = 6
Height = 17
Top = 24
Width = 106
Caption = 'Correlation Matrix'
TabOrder = 1
end
object UnrotBtn: TCheckBox
Left = 5
Height = 17
Top = 46
Width = 108
Caption = 'Unrotated Factors'
TabOrder = 2
end
object PcntTrBtn: TCheckBox
Left = 6
Height = 17
Top = 67
Width = 87
Caption = 'Percent Trace'
TabOrder = 3
end
object ScreeBtn: TCheckBox
Left = 137
Height = 17
Top = 2
Width = 68
Caption = 'Scree Plot'
TabOrder = 4
end
object ComUnBtn: TCheckBox
Left = 136
Height = 17
Top = 24
Width = 88
Caption = 'Communalities'
TabOrder = 5
end
object PlotBtn: TCheckBox
Left = 137
Height = 17
Top = 46
Width = 77
Caption = 'Plot Factors'
TabOrder = 6
end
object ScoresBtn: TCheckBox
Left = 137
Height = 17
Top = 67
Width = 86
Caption = 'Factor Scores'
TabOrder = 7
end
object SaveCorsBtn: TCheckBox
Left = 248
Height = 17
Top = 2
Width = 133
Caption = 'Save Correlation Matrix'
TabOrder = 8
end
object SaveFactBtn: TCheckBox
Left = 248
Height = 17
Top = 24
Width = 111
Caption = 'Save Factor Matrix'
TabOrder = 9
end
object SortBtn: TCheckBox
Left = 248
Height = 17
Top = 46
Width = 79
Caption = 'Sort Factors'
TabOrder = 10
end
end
object MinRootEdit: TEdit
Left = 568
Height = 21
Top = 323
Width = 32
TabOrder = 7
Text = 'MinRootEdit'
end
object MaxItersEdit: TEdit
Left = 568
Height = 21
Top = 353
Width = 32
TabOrder = 8
Text = 'Edit1'
end
object MaxFactorsEdit: TEdit
Left = 568
Height = 21
Top = 386
Width = 32
TabOrder = 9
Text = 'Edit1'
end
object ResetBtn: TButton
Left = 7
Height = 30
Top = 440
Width = 74
Caption = 'Reset'
OnClick = ResetBtnClick
TabOrder = 10
end
object CancelBtn: TButton
Left = 102
Height = 30
Top = 440
Width = 74
Caption = 'Cancel'
ModalResult = 2
TabOrder = 11
end
object ComputeBtn: TButton
Left = 224
Height = 30
Top = 440
Width = 74
Caption = 'Compute'
OnClick = ComputeBtnClick
TabOrder = 12
end
object ReturnBtn: TButton
Left = 320
Height = 30
Top = 440
Width = 74
Caption = 'Return'
ModalResult = 1
TabOrder = 13
end
object OpenDialog1: TOpenDialog
left = 425
top = 431
end
object SaveDialog1: TSaveDialog
left = 472
top = 431
end
end

View File

@ -0,0 +1,180 @@
{ This is an automatically generated lazarus resource file }
LazarusResources.Add('TFactorFrm','FORMDATA',[
'TPF0'#10'TFactorFrm'#9'FactorFrm'#4'Left'#3#181#0#6'Height'#3#230#1#3'Top'#2
+'c'#5'Width'#3'`'#2#7'Caption'#6#15'Factor Analysis'#12'ClientHeight'#3#230#1
+#11'ClientWidth'#3'`'#2#6'OnShow'#7#8'FormShow'#10'LCLVersion'#6#8'0.9.28.2'
+#0#6'TLabel'#6'Label1'#4'Left'#2#6#6'Height'#2#14#3'Top'#2#1#5'Width'#2'Z'#7
+'Caption'#6#19'Available Variables'#11'ParentColor'#8#0#0#6'TLabel'#6'Label2'
+#4'Left'#3#227#0#6'Height'#2#14#3'Top'#2#1#5'Width'#2'X'#7'Caption'#6#18'Sel'
+'ected Variables'#11'ParentColor'#8#0#0#6'TLabel'#6'Label3'#4'Left'#3#159#1#6
+'Height'#2#14#3'Top'#3'H'#1#5'Width'#2's'#7'Caption'#6#25'Min. root size to '
+'rotate:'#11'ParentColor'#8#0#0#6'TLabel'#6'Label4'#4'Left'#3#159#1#6'Height'
+#2#14#3'Top'#3'f'#1#5'Width'#2'c'#7'Caption'#6#19'Maximum Iterations:'#11'Pa'
+'rentColor'#8#0#0#6'TLabel'#6'Label5'#4'Left'#3#158#1#6'Height'#2#14#3'Top'#3
+#135#1#5'Width'#2'l'#7'Caption'#6#20'Maximum No. Factors:'#11'ParentColor'#8
+#0#0#8'TListBox'#7'VarList'#4'Left'#2#7#6'Height'#3''''#1#3'Top'#2#15#5'Widt'
+'h'#3#169#0#10'ItemHeight'#2#0#11'MultiSelect'#9#8'TabOrder'#2#0#0#0#7'TBitB'
+'tn'#5'InBtn'#4'Left'#3#183#0#6'Height'#2'#'#3'Top'#2#16#5'Width'#2'$'#10'Gl'
+'yph.Data'#10':'#4#0#0'6'#4#0#0'BM6'#4#0#0#0#0#0#0'6'#0#0#0'('#0#0#0#16#0#0#0
+#16#0#0#0#1#0' '#0#0#0#0#0#0#4#0#0'd'#0#0#0'd'#0#0#0#0#0#0#0#0#0#0#0#255#255
+#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0
+#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255
+#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255
+#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0
+#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255
+#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255
+#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0
+#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255
+#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255
+#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0
+#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255
+#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255
+#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0
+#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0'!c$'
+#184#29'^ '#6#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255
+#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0
+#255#255#255#0#255#255#255#0#255#255#255#0'*p/8%i)'#247'!c$'#217#255#255#255
+#0#255#255#255#0#255#255#255#0#255#255#255#0'a'#190'm'#255']'#184'h'#255'X'
+#177'b'#255'S'#169'\'#255'M'#161'V'#255'G'#153'O'#255'A'#145'I'#255';'#136'B'
+#255'5'#128';'#255'?'#136'E'#255'Y'#161'^'#255'D'#139'I'#255'!c$'#207#255#255
+#255#0#255#255#255#0#255#255#255#0'e'#195'q'#255#160#215#169#255#156#213#165
+#255#152#211#161#255#148#208#157#255#144#206#152#255#139#203#147#255#135#201
+#142#255#130#198#137#255'~'#195#132#255'z'#193#128#255'v'#190'|'#255'E'#140
+'J'#255'!c$'#196#255#255#255#0#255#255#255#0'h'#199't'#255#165#218#174#255
+#162#216#171#255#158#214#167#255#154#212#163#255#150#210#159#255#147#207#154
+#255#142#204#149#255#137#202#144#255#133#199#139#255#129#197#135#255'}'#194
+#130#255'J'#145'P'#255'%i)'#201#255#255#255#0#255#255#255#0'h'#199't'#255'h'
+#199't'#255'e'#195'q'#255'a'#190'm'#255']'#184'h'#255'X'#177'b'#255'S'#169'\'
+#255'M'#161'V'#255'G'#153'O'#255'A'#145'I'#255'Z'#163'b'#255'U'#157'\'#255'/'
+'x5'#209#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255
+#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255
+#255#255#0#255#255#255#0#255#255#255#0'A'#145'I'#247';'#136'B'#219#255#255
+#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0
+#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255
+#255#255#0#255#255#255#0#255#255#255#0'G'#153'O'#187'A'#145'I'#6#255#255#255
+#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255
+#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255
+#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0
+#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255
+#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255
+#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0
+#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255
+#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255
+#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0
+#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255
+#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255
+#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0
,#255#255#255#0#255#255#255#0#9'NumGlyphs'#2#0#7'OnClick'#7#10'InBtnClick'#8
+'TabOrder'#2#1#0#0#7'TBitBtn'#6'OutBtn'#4'Left'#3#184#0#6'Height'#2'#'#3'Top'
+#2'8'#5'Width'#2'$'#10'Glyph.Data'#10':'#4#0#0'6'#4#0#0'BM6'#4#0#0#0#0#0#0'6'
+#0#0#0'('#0#0#0#16#0#0#0#16#0#0#0#1#0' '#0#0#0#0#0#0#4#0#0'd'#0#0#0'd'#0#0#0
+#0#0#0#0#0#0#0#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255
+#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255
+#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0
+#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255
+#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255
+#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0
+#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255
+#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255
+#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0
+#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255
+#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255
+#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0
+#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0'M'#161'V'#6'G'#153
+'O'#184#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0
+#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255
+#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0'S'#169'\'#217'M'#161'V'
+#247'G'#153'O8'#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255
+#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255
+#255#0#255#255#255#0#255#255#255#0']'#184'h'#207'q'#190'{'#255'z'#193#131#255
+'['#170'd'#255'G'#153'O'#255'A'#145'I'#255';'#136'B'#255'5'#128';'#255'/x5'
+#255'*p/'#255'%i)'#255'!c$'#255#29'^ '#255#255#255#255#0#255#255#255#0'e'#195
+'q'#196'{'#200#134#255#156#213#165#255#152#211#161#255#148#208#157#255#144
+#206#152#255#139#203#147#255#135#201#142#255#130#198#137#255'~'#195#132#255
+'z'#193#128#255'v'#190'|'#255'r'#189'x'#255'!c$'#255#255#255#255#0#255#255
+#255#0'h'#199't'#201#127#204#138#255#162#216#171#255#158#214#167#255#154#212
+#163#255#150#210#159#255#147#207#154#255#142#204#149#255#137#202#144#255#133
+#199#139#255#129#197#135#255'}'#194#130#255'x'#192'~'#255'%i)'#255#255#255
+#255#0#255#255#255#0#255#255#255#0'h'#199't'#209#128#205#139#255'|'#201#135
+#255']'#184'h'#255'X'#177'b'#255'S'#169'\'#255'M'#161'V'#255'G'#153'O'#255'A'
+#145'I'#255';'#136'B'#255'5'#128';'#255'/x5'#255'*p/'#255#255#255#255#0#255
+#255#255#0#255#255#255#0#255#255#255#0'h'#199't'#219'e'#195'q'#247#255#255
+#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0
+#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255
+#255#255#0#255#255#255#0#255#255#255#0'h'#199't'#6'h'#199't'#187#255#255#255
+#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255
+#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255
+#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0
+#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255
+#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255
+#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0
+#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255
+#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255
+#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0
+#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255
+#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255
+#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0
+#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255
+#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#9'NumGlyp'
+'hs'#2#0#7'OnClick'#7#11'OutBtnClick'#8'TabOrder'#2#2#0#0#8'TListBox'#10'Fac'
+'torList'#4'Left'#3#225#0#6'Height'#3'$'#1#3'Top'#2#16#5'Width'#3#173#0#10'I'
+'temHeight'#2#0#8'TabOrder'#2#3#0#0#11'TRadioGroup'#9'TypeGroup'#4'Left'#3
+#160#1#6'Height'#3#156#0#3'Top'#2#4#5'Width'#3#187#0#8'AutoFill'#9#7'Caption'
+#6#16'Type of Analysis'#28'ChildSizing.LeftRightSpacing'#2#6#28'ChildSizing.'
+'TopBottomSpacing'#2#6#29'ChildSizing.EnlargeHorizontal'#7#24'crsHomogenousC'
+'hildResize'#27'ChildSizing.EnlargeVertical'#7#24'crsHomogenousChildResize'
+#28'ChildSizing.ShrinkHorizontal'#7#14'crsScaleChilds'#26'ChildSizing.Shrink'
+'Vertical'#7#14'crsScaleChilds'#18'ChildSizing.Layout'#7#29'cclLeftToRightTh'
+'enTopToBottom'#27'ChildSizing.ControlsPerLine'#2#1#12'ClientHeight'#3#138#0
+#11'ClientWidth'#3#183#0#13'Items.Strings'#1#6#20'Principal Components'#6#29
+'Partial Image (No Iterations)'#6#13'Guttman Image'#6#19'Harris Scaled Image'
,#6#27'Canonical (Max. Likelihood)'#6#5'Alpha'#6#17'Principal Factors'#0#8'Ta'
+'bOrder'#2#4#0#0#11'TRadioGroup'#11'RotateGroup'#4'Left'#3#159#1#6'Height'#3
+#133#0#3'Top'#3#176#0#5'Width'#3#187#0#8'AutoFill'#9#7'Caption'#6#15'Rotatio'
+'n Option'#28'ChildSizing.LeftRightSpacing'#2#6#28'ChildSizing.TopBottomSpac'
+'ing'#2#6#29'ChildSizing.EnlargeHorizontal'#7#24'crsHomogenousChildResize'#27
+'ChildSizing.EnlargeVertical'#7#24'crsHomogenousChildResize'#28'ChildSizing.'
+'ShrinkHorizontal'#7#14'crsScaleChilds'#26'ChildSizing.ShrinkVertical'#7#14
+'crsScaleChilds'#18'ChildSizing.Layout'#7#29'cclLeftToRightThenTopToBottom'
+#27'ChildSizing.ControlsPerLine'#2#1#12'ClientHeight'#2's'#11'ClientWidth'#3
+#183#0#13'Items.Strings'#1#6#7'Varimax'#6#7'Oblimax'#6#9'Quartimax'#6#18'Man'
+'ual (Graphical)'#6#11'Procrustian'#6#11'NO rotation'#0#8'TabOrder'#2#5#0#0#9
+'TGroupBox'#9'GroupBox1'#4'Left'#2#6#6'Height'#2'n'#3'Top'#3'@'#1#5'Width'#3
+#137#1#7'Caption'#6#15'Output Options:'#12'ClientHeight'#2'\'#11'ClientWidth'
+#3#133#1#8'TabOrder'#2#6#0#9'TCheckBox'#7'DescBtn'#4'Left'#2#6#6'Height'#2#17
+#3'Top'#2#2#5'Width'#2'w'#7'Caption'#6#22'Descriptive Statistics'#8'TabOrder'
+#2#0#0#0#9'TCheckBox'#7'RMatBtn'#4'Left'#2#6#6'Height'#2#17#3'Top'#2#24#5'Wi'
+'dth'#2'j'#7'Caption'#6#18'Correlation Matrix'#8'TabOrder'#2#1#0#0#9'TCheckB'
+'ox'#8'UnrotBtn'#4'Left'#2#5#6'Height'#2#17#3'Top'#2'.'#5'Width'#2'l'#7'Capt'
+'ion'#6#17'Unrotated Factors'#8'TabOrder'#2#2#0#0#9'TCheckBox'#9'PcntTrBtn'#4
+'Left'#2#6#6'Height'#2#17#3'Top'#2'C'#5'Width'#2'W'#7'Caption'#6#13'Percent '
+'Trace'#8'TabOrder'#2#3#0#0#9'TCheckBox'#8'ScreeBtn'#4'Left'#3#137#0#6'Heigh'
+'t'#2#17#3'Top'#2#2#5'Width'#2'D'#7'Caption'#6#10'Scree Plot'#8'TabOrder'#2#4
+#0#0#9'TCheckBox'#8'ComUnBtn'#4'Left'#3#136#0#6'Height'#2#17#3'Top'#2#24#5'W'
+'idth'#2'X'#7'Caption'#6#13'Communalities'#8'TabOrder'#2#5#0#0#9'TCheckBox'#7
+'PlotBtn'#4'Left'#3#137#0#6'Height'#2#17#3'Top'#2'.'#5'Width'#2'M'#7'Caption'
+#6#12'Plot Factors'#8'TabOrder'#2#6#0#0#9'TCheckBox'#9'ScoresBtn'#4'Left'#3
+#137#0#6'Height'#2#17#3'Top'#2'C'#5'Width'#2'V'#7'Caption'#6#13'Factor Score'
+'s'#8'TabOrder'#2#7#0#0#9'TCheckBox'#11'SaveCorsBtn'#4'Left'#3#248#0#6'Heigh'
+'t'#2#17#3'Top'#2#2#5'Width'#3#133#0#7'Caption'#6#23'Save Correlation Matrix'
+#8'TabOrder'#2#8#0#0#9'TCheckBox'#11'SaveFactBtn'#4'Left'#3#248#0#6'Height'#2
+#17#3'Top'#2#24#5'Width'#2'o'#7'Caption'#6#18'Save Factor Matrix'#8'TabOrder'
+#2#9#0#0#9'TCheckBox'#7'SortBtn'#4'Left'#3#248#0#6'Height'#2#17#3'Top'#2'.'#5
+'Width'#2'O'#7'Caption'#6#12'Sort Factors'#8'TabOrder'#2#10#0#0#0#5'TEdit'#11
+'MinRootEdit'#4'Left'#3'8'#2#6'Height'#2#21#3'Top'#3'C'#1#5'Width'#2' '#8'Ta'
+'bOrder'#2#7#4'Text'#6#11'MinRootEdit'#0#0#5'TEdit'#12'MaxItersEdit'#4'Left'
+#3'8'#2#6'Height'#2#21#3'Top'#3'a'#1#5'Width'#2' '#8'TabOrder'#2#8#4'Text'#6
+#5'Edit1'#0#0#5'TEdit'#14'MaxFactorsEdit'#4'Left'#3'8'#2#6'Height'#2#21#3'To'
+'p'#3#130#1#5'Width'#2' '#8'TabOrder'#2#9#4'Text'#6#5'Edit1'#0#0#7'TButton'#8
+'ResetBtn'#4'Left'#2#7#6'Height'#2#30#3'Top'#3#184#1#5'Width'#2'J'#7'Caption'
+#6#5'Reset'#7'OnClick'#7#13'ResetBtnClick'#8'TabOrder'#2#10#0#0#7'TButton'#9
+'CancelBtn'#4'Left'#2'f'#6'Height'#2#30#3'Top'#3#184#1#5'Width'#2'J'#7'Capti'
+'on'#6#6'Cancel'#11'ModalResult'#2#2#8'TabOrder'#2#11#0#0#7'TButton'#10'Comp'
+'uteBtn'#4'Left'#3#224#0#6'Height'#2#30#3'Top'#3#184#1#5'Width'#2'J'#7'Capti'
+'on'#6#7'Compute'#7'OnClick'#7#15'ComputeBtnClick'#8'TabOrder'#2#12#0#0#7'TB'
+'utton'#9'ReturnBtn'#4'Left'#3'@'#1#6'Height'#2#30#3'Top'#3#184#1#5'Width'#2
+'J'#7'Caption'#6#6'Return'#11'ModalResult'#2#1#8'TabOrder'#2#13#0#0#11'TOpen'
+'Dialog'#11'OpenDialog1'#4'left'#3#169#1#3'top'#3#175#1#0#0#11'TSaveDialog'
+#11'SaveDialog1'#4'left'#3#216#1#3'top'#3#175#1#0#0#0
]);

View File

@ -0,0 +1,36 @@
unit FFTUnit;
{$mode objfpc}{$H+}
interface
uses
Classes, SysUtils, FileUtil, LResources, Forms, Controls, Graphics, Dialogs,
StdCtrls;
type
{ TFFTFrm }
TFFTFrm = class(TForm)
CancelBtn: TButton;
OKBtn: TButton;
NptsEdit: TEdit;
Label1: TLabel;
Memo1: TMemo;
private
{ private declarations }
public
{ public declarations }
end;
var
FFTFrm: TFFTFrm;
implementation
initialization
{$I fftunit.lrs}
end.

View File

@ -0,0 +1,54 @@
object FFTFrm: TFFTFrm
Left = 192
Height = 138
Top = 136
Width = 232
Caption = 'Fourier Transform Form'
ClientHeight = 138
ClientWidth = 232
LCLVersion = '0.9.28.2'
object Label1: TLabel
Left = 8
Height = 14
Top = 72
Width = 90
Caption = 'Number of points: '
ParentColor = False
end
object Memo1: TMemo
Left = 7
Height = 44
Top = 8
Width = 209
Lines.Strings = (
'Enter the number of data points to '
'include in the Fourier smoothing.'
)
TabOrder = 0
end
object NptsEdit: TEdit
Left = 104
Height = 21
Top = 62
Width = 45
TabOrder = 1
end
object CancelBtn: TButton
Left = 7
Height = 29
Top = 97
Width = 70
Caption = 'Cancel'
ModalResult = 2
TabOrder = 2
end
object OKBtn: TButton
Left = 112
Height = 29
Top = 97
Width = 70
Caption = 'OK'
ModalResult = 1
TabOrder = 3
end
end

View File

@ -0,0 +1,16 @@
{ This is an automatically generated lazarus resource file }
LazarusResources.Add('TFFTFrm','FORMDATA',[
'TPF0'#7'TFFTFrm'#6'FFTFrm'#4'Left'#3#192#0#6'Height'#3#138#0#3'Top'#3#136#0#5
+'Width'#3#232#0#7'Caption'#6#22'Fourier Transform Form'#12'ClientHeight'#3
+#138#0#11'ClientWidth'#3#232#0#10'LCLVersion'#6#8'0.9.28.2'#0#6'TLabel'#6'La'
+'bel1'#4'Left'#2#8#6'Height'#2#14#3'Top'#2'H'#5'Width'#2'Z'#7'Caption'#6#18
+'Number of points: '#11'ParentColor'#8#0#0#5'TMemo'#5'Memo1'#4'Left'#2#7#6'H'
+'eight'#2','#3'Top'#2#8#5'Width'#3#209#0#13'Lines.Strings'#1#6'#Enter the nu'
+'mber of data points to '#6'!include in the Fourier smoothing.'#0#8'TabOrder'
+#2#0#0#0#5'TEdit'#8'NptsEdit'#4'Left'#2'h'#6'Height'#2#21#3'Top'#2'>'#5'Widt'
+'h'#2'-'#8'TabOrder'#2#1#0#0#7'TButton'#9'CancelBtn'#4'Left'#2#7#6'Height'#2
+#29#3'Top'#2'a'#5'Width'#2'F'#7'Caption'#6#6'Cancel'#11'ModalResult'#2#2#8'T'
+'abOrder'#2#2#0#0#7'TButton'#5'OKBtn'#4'Left'#2'p'#6'Height'#2#29#3'Top'#2'a'
+#5'Width'#2'F'#7'Caption'#6#2'OK'#11'ModalResult'#2#1#8'TabOrder'#2#3#0#0#0
]);

View File

@ -0,0 +1,447 @@
unit FileExtractUnit;
{$MODE Delphi}
interface
uses
LCLIntf, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
StdCtrls, Grids, ExtCtrls, GLOBALS, OS3MainUnit, DATAPROCS, DICTIONARYUNIT,
LResources, Buttons;
type
TFileExtractFrm = class(TForm)
Memo1: TMemo;
Label2: TLabel;
NoLinesEdit: TEdit;
Label3: TLabel;
NoFieldsEdit: TEdit;
FormatGrp: TRadioGroup;
Label4: TLabel;
KeyVarNoEdit: TEdit;
Label5: TLabel;
ValueEdit: TEdit;
LabelsChk: TCheckBox;
FmtGrid: TStringGrid;
CancelBtn: TButton;
OKBtn: TButton;
ResetBtn: TButton;
ExtractBtn: TButton;
OpenDialog1: TOpenDialog;
FileSelBtn: TButton;
Label1: TLabel;
NoGotEdit: TEdit;
Label6: TLabel;
RecdReadEdit: TEdit;
TypeBox: TComboBox;
procedure ResetBtnClick(Sender: TObject);
procedure FormShow(Sender: TObject);
procedure CancelBtnClick(Sender: TObject);
procedure FormatGrpClick(Sender: TObject);
procedure OKBtnClick(Sender: TObject);
procedure ExtractBtnClick(Sender: TObject);
procedure FileSelBtnClick(Sender: TObject);
procedure TypeBoxChange(Sender: TObject);
private
{ Private declarations }
FileName : string;
public
{ Public declarations }
function GetValues(VAR TheFile : TextFile;
NoLines : integer;
NoFlds : integer;
Token : integer;
VAR StrValues : StrDyneVec) : boolean;
procedure PutGrid(RecdNo : integer;
NoFlds : integer;
LabelsFirst : boolean;
VAR StrValues : StrDyneVec);
function GetFmtValues(VAR TheFile : TextFile;
NoLines : integer;
NoFlds : integer;
VAR StrValues : StrDyneVec) : boolean;
end;
var
FileExtractFrm: TFileExtractFrm;
implementation
procedure TFileExtractFrm.ResetBtnClick(Sender: TObject);
begin
NoLinesEdit.Text := '1';
NoFieldsEdit.Text := '';
KeyVarNoEdit.Text := '';
ValueEdit.Text := '';
NoGotEdit.Text := '';
RecdReadEdit.Text := '';
FormatGrp.ItemIndex := 0;
LabelsChk.Checked := false;
FmtGrid.Cells[0,0] := 'Field';
FmtGrid.Cells[1,0] := 'Start';
FmtGrid.Cells[2,0] := 'End';
FmtGrid.Cells[3,0] := 'Data Type';
FmtGrid.Cells[4,0] := 'Line No.';
FmtGrid.Cells[5,0] := 'Label';
FmtGrid.Visible := false;
TypeBox.Text := 'Types';
TypeBox.Visible := false;
end;
//--------------------------------------------------------
procedure TFileExtractFrm.FormShow(Sender: TObject);
begin
ResetBtnClick(self);
end;
//---------------------------------------------------------
procedure TFileExtractFrm.CancelBtnClick(Sender: TObject);
begin
FileExtractFrm.Hide;
end;
//--------------------------------------------------------------
procedure TFileExtractFrm.FormatGrpClick(Sender: TObject);
begin
if FormatGrp.ItemIndex = 3 then
begin
FmtGrid.RowCount := StrToInt(NoFieldsEdit.Text) + 1;
FmtGrid.Visible := true;
TypeBox.Visible := true;
end
else begin
FmtGrid.Visible := false;
TypeBox.Visible := false;
end;
end;
//-------------------------------------------------------------
procedure TFileExtractFrm.OKBtnClick(Sender: TObject);
begin
FileExtractFrm.Hide;
end;
//---------------------------------------------------------------------
function TFileExtractFrm.GetValues(VAR TheFile : TextFile;
NoLines : integer;
NoFlds : integer;
Token : integer;
VAR StrValues : StrDyneVec) : boolean;
var
done, endline : boolean;
i, valcount : integer;
cellstring : string;
achar : char;
begin
done := false;
valcount := 0;
if not done then
begin
for i := 1 to NoLines do
begin
endline := false;
while not endline do
begin
read(TheFile,achar);
if EOF(TheFile) then
begin
done := true;
GetValues := done;
exit;
end;
if ord(achar) = 10 then continue; // ignore line feed
if ord(achar) <> 13 then // not a new line
begin
if ord(achar) <> Token then // not a tab character
cellstring := cellstring + achar
else
begin // Token character found - save string and bump counter
StrValues[valcount] := cellstring;
cellstring := '';
valcount := valcount + 1;
end;
end // not a new line - tab or character found
else begin
endline := true;
StrValues[valcount] := cellstring;
valcount := valcount + 1;
cellstring := '';
end;
end; // next line
end; // next line
end // net yet at eof
else done := true;
if valcount <> NoFlds then
begin
ShowMessage('ERROR! Mismatched no. fields - see grid for first record');
FmtGrid.ColCount := valcount + 1;
FmtGrid.Visible := true;
for i := 1 to NoFlds do
FmtGrid.Cells[i-1,0] := StrValues[i-1];
done := true;
end;
GetValues := done;
end;
//---------------------------------------------------------------------
procedure TFileExtractFrm.PutGrid(RecdNo : integer;
NoFlds : integer;
LabelsFirst : boolean;
VAR StrValues : StrDyneVec);
var
i : integer;
cellstring : string;
begin
if LabelsFirst = true then
begin
OS3MainFrm.DataGrid.RowCount := 2;
OS3MainFrm.DataGrid.Cells[0,0] := 'Case 0';
for i := 1 to NoFlds do OS3MainFrm.DataGrid.Cells[i,0] := StrValues[i-1];
end
else
begin
OS3MainFrm.DataGrid.RowCount := RecdNo + 1;
cellstring := 'Case ' + IntToStr(RecdNo);
OS3MainFrm.DataGrid.Cells[0,RecdNo] := cellstring;
for i := 1 to NoFlds do OS3MainFrm.DataGrid.Cells[i,RecdNo] := StrValues[i-1];
end;
end;
//---------------------------------------------------------------------
procedure TFileExtractFrm.ExtractBtnClick(Sender: TObject);
var
LabelsFirst : boolean; // first record contains variable labels
NoFlds : integer; // number of variables
NoLines : integer; // number of lines per record
FormatType : integer; // 1 = tab, 2 = comma, 3 = space, 4 = user spec.
KeyNo : integer; // sequence number of field containing the key
KeyValue : string; // value of the key field
TheFile : TextFile; // file handle
StrValues : StrDyneVec; // pointer to array of strings for record values
done : boolean;
NoRecords : integer;
Token : integer; // tab, comma or space charcter ordinal value
i, fldno : integer;
OldCursor : Tcursor;
NoRead : integer; // no. of records read from big file
fldtype : string;
cellstring : string; // for labels provided in the fmtgrid
begin
// get entered values from the form
if LabelsChk.Checked then LabelsFirst := true else LabelsFirst := false;
NoFlds := StrToInt(NoFieldsEdit.Text);
NoLines := StrToInt(NoLinesEdit.Text);
FormatType := FormatGrp.ItemIndex + 1;
KeyNo := StrToInt(KeyVarNoEdit.Text);
KeyValue := ValueEdit.Text;
SetLength(StrValues,NoFlds + 1);
done := false;
NoRecords := 0;
Token := ord(' '); // default of a space
OldCursor := FileExtractFrm.Cursor;
NoRead := 0;
OS3MainFrm.DataGrid.ColCount := NoFlds + 1;
for i := 1 to NoFlds do
begin
DictionaryFrm.DictGrid.RowCount := i;
DictionaryFrm.Defaults(Self,i);
VarDefined[i] := true;
end;
// open file for processing
AssignFile(TheFile,FileName);
Reset(TheFile);
// process first (or second) record according to format type
case FormatType of
1, 2, 3 : begin // tab seperated fields
FileExtractFrm.Cursor := crHourGlass;
if not LabelsFirst then
begin
// store labels (if not blank) into grid row 0 and type in defs.
for i := 1 to NoFlds do
begin
cellstring := format('VAR%2d',[i]);
OS3MainFrm.DataGrid.Cells[i,0] := cellstring;
end;
end;
while Not done do
begin
if FormatType = 1 then Token := 9; // tab character
if FormatType = 2 then Token := ord(','); // comma
if FormatType = 3 then Token := ord(' '); // space
done := GetValues(TheFile,NoLines,NoFlds,Token,StrValues);
if not done then
begin
NoRead := NoRead + 1;
if LabelsFirst then
begin
PutGrid(0,NoFlds,LabelsFirst,StrValues);
LabelsFirst := false;
end;
RecdReadEdit.Text := IntToStr(NoRead);
FileExtractFrm.Repaint;
StrValues[KeyNo-1] := Trim(StrValues[KeyNo-1]);
if StrValues[KeyNo-1] = KeyValue then // found group record
begin
NoRecords := NoRecords + 1;
PutGrid(NoRecords,NoFlds,LabelsFirst,StrValues);
NoGotEdit.Text := IntToStr(NoRecords);
end;
end;
end;
FileExtractFrm.Cursor := OldCursor;
OS3MainFrm.NoCasesEdit.Text := IntToStr(NoRecords);
OS3MainFrm.NoVarsEdit.Text := IntToStr(NoFlds);
OS3MainFrm.RowEdit.Text := '1';
OS3MainFrm.ColEdit.Text := '1';
OS3MainFrm.DataGrid.Row := 1;
OS3MainFrm.DataGrid.Col := 1;
NoVariables := NoFlds;
NoCases := NoRecords;
end;
4 : begin // user specified format
FileExtractFrm.Cursor := crHourGlass;
if not LabelsFirst then
begin
// store labels (if not blank) into grid row 0 and type in defs.
for i := 1 to NoFlds do
begin
fldno := StrToInt(FmtGrid.Cells[0,i]);
fldtype := FmtGrid.Cells[3,fldno];
DictionaryFrm.DictGrid.Cells[4,fldno] := fldtype[2];
cellstring := FmtGrid.Cells[5,fldno];
DictionaryFrm.DictGrid.Cells[1,fldno] := cellstring;
DictionaryFrm.DictGrid.Cells[2,fldno] := cellstring;
if cellstring <> '' then OS3MainFrm.DataGrid.Cells[i,0] := cellstring;
end;
end;
while NOT done do
begin
done := GetFmtValues(TheFile,NoLines,NoFlds,StrValues);
if not done then
begin
NoRead := NoRead + 1;
if LabelsFirst then
begin
PutGrid(0,NoFlds,LabelsFirst,StrValues);
LabelsFirst := false;
end;
RecdReadEdit.Text := IntToStr(NoRead);
FileExtractFrm.Repaint;
StrValues[KeyNo-1] := Trim(StrValues[KeyNo-1]);
if StrValues[KeyNo-1] = KeyValue then // found group record
begin
NoRecords := NoRecords + 1;
PutGrid(NoRecords,NoFlds,LabelsFirst,StrValues);
NoGotEdit.Text := IntToStr(NoRecords);
end;
end; // if not done
end; // while not done
FileExtractFrm.Cursor := OldCursor;
OS3MainFrm.NoCasesEdit.Text := IntToStr(NoRecords);
OS3MainFrm.NoVarsEdit.Text := IntToStr(NoFlds);
OS3MainFrm.RowEdit.Text := '1';
OS3MainFrm.ColEdit.Text := '1';
OS3MainFrm.DataGrid.Row := 1;
OS3MainFrm.DataGrid.Col := 1;
NoVariables := NoFlds;
NoCases := NoRecords;
end; // end case 4 (formatted input)
end; // end case switch
StrValues := nil;
CloseFile(TheFile);
end;
//------------------------------------------------------------------------
procedure TFileExtractFrm.FileSelBtnClick(Sender: TObject);
begin
OpenDialog1.Filter := 'Tab field files (*.tab)|*.TAB|Text files (*.txt)|*.TXT|All files (*.*)|*.*';
OpenDialog1.FilterIndex := 1;
OpenDialog1.DefaultExt := 'TAB';
if OpenDialog1.Execute then FileName := OpenDialog1.FileName
else ShowMessage('Error in opening File!');
end;
//-------------------------------------------------------------------------
function TFileExtractFrm.GetFmtValues(VAR TheFile : TextFile;
NoLines : integer;
NoFlds : integer;
VAR StrValues : StrDyneVec) : boolean;
var
done, endline : boolean;
i, j, endat, startat, stlong, valcount, fldno : integer;
LineStr : string;
achar : char;
begin
done := false;
valcount := 0;
if not done then
begin
for i := 1 to NoLines do
begin
endline := false;
while not endline do
begin
read(TheFile,achar);
if EOF(TheFile) then
begin
done := true;
GetFmtValues := done;
exit;
end;
if ord(achar) = 10 then continue; // ignore line feed
if ord(achar) <> 13 then LineStr := LineStr + achar
else endline := true;
end;
// now, parse values in this line
for j := 1 to NoFlds do
begin
if StrToInt(FmtGrid.Cells[4,j]) <> i then continue; // in line i?
startat := StrToInt(FmtGrid.Cells[1,j]);
endat := StrToInt(FmtGrid.Cells[2,j]);
stlong := endat - startat + 1;
fldno := StrToInt(FmtGrid.Cells[0,j]);
StrValues[fldno-1] := Copy(LineStr,startat,stlong);
valcount := valcount + 1;
end; // next j
LineStr := '';
end; // next line
end // not yet at eof
else done := true;
if valcount <> NoFlds then
begin
ShowMessage('ERROR! Mismatched no. fields and actual record data.');
done := true;
end;
GetFmtValues := done;
end;
//-----------------------------------------------------------------------
procedure TFileExtractFrm.TypeBoxChange(Sender: TObject);
var
index : integer;
row, col : integer;
begin
index := TypeBox.ItemIndex;
row := FmtGrid.Row;
col := FmtGrid.Col;
FmtGrid.Cells[col,row] := IntToStr(index);
end;
//-------------------------------------------------------------------------
initialization
{$i FILEEXTRACTUNIT.lrs}
{$i FILEEXTRACTUNIT.lrs}
end.

View File

@ -0,0 +1,255 @@
object FileExtractFrm: TFileExtractFrm
Left = 160
Height = 509
Top = 713
Width = 435
HelpContext = 406
HorzScrollBar.Page = 434
VertScrollBar.Page = 508
ActiveControl = NoFieldsEdit
Caption = 'File Extraction Procedure'
Font.Height = -11
Font.Name = 'MS Sans Serif'
HelpFile = 'OS2Help.hlp'
OnShow = FormShow
object Label2: TLabel
Left = 8
Height = 14
Top = 152
Width = 132
Caption = 'Number of lines per record:'
Color = clNone
ParentColor = False
end
object Label3: TLabel
Left = 224
Height = 14
Top = 152
Width = 170
Caption = 'No. of fields (variables) per record:'
Color = clNone
ParentColor = False
end
object Label4: TLabel
Left = 8
Height = 14
Top = 176
Width = 192
Caption = 'Sequence number of key selection field:'
Color = clNone
ParentColor = False
end
object Label5: TLabel
Left = 8
Height = 40
Top = 200
Width = 76
Caption = 'Selection Value (Including Dec. Fraction):'
Color = clNone
ParentColor = False
WordWrap = True
end
object Label1: TLabel
Left = 272
Height = 14
Top = 424
Width = 94
Caption = 'Records Retrieved:'
Color = clNone
ParentColor = False
end
object Label6: TLabel
Left = 8
Height = 14
Top = 424
Width = 96
Caption = 'Records Processed:'
Color = clNone
ParentColor = False
end
object Memo1: TMemo
Left = 24
Height = 113
Width = 377
Lines.Strings = (
'This procedure is used to extract records from files too large to read directly '
'into the data grid. The data grid can hold about 100,000 records. If your file'
'is larger but you will not be processing all records, you may extract sub-groups'
'of records using a "key" field, e.g. a group identification number. The records'
'extracted will be placed into the data grid as if you had entered them via the'
'keyboard. You may then save the sub-file, process it, etc. as any other file. If'
'you have multiple groups to extract, repeat pressing the Extract button until all'
'sub-files you need are placed into the data grid. Press return to continue.'
)
TabOrder = 4
end
object NoLinesEdit: TEdit
Left = 144
Height = 21
Top = 152
Width = 25
TabOrder = 5
end
object NoFieldsEdit: TEdit
Left = 392
Height = 21
Top = 152
Width = 25
TabOrder = 0
end
object FormatGrp: TRadioGroup
Left = 272
Height = 81
Top = 176
Width = 145
AutoFill = True
Caption = 'Record Format:'
ChildSizing.LeftRightSpacing = 6
ChildSizing.TopBottomSpacing = 6
ChildSizing.EnlargeHorizontal = crsHomogenousChildResize
ChildSizing.EnlargeVertical = crsHomogenousChildResize
ChildSizing.ShrinkHorizontal = crsScaleChilds
ChildSizing.ShrinkVertical = crsScaleChilds
ChildSizing.Layout = cclLeftToRightThenTopToBottom
ChildSizing.ControlsPerLine = 1
Items.Strings = (
'Tab seperated fields'
'comma seperated fields'
'space seperated fields'
'User specified format'
)
OnClick = FormatGrpClick
TabOrder = 3
end
object KeyVarNoEdit: TEdit
Left = 200
Height = 21
Top = 176
Width = 25
TabOrder = 1
end
object ValueEdit: TEdit
Left = 112
Height = 21
Top = 208
Width = 113
TabOrder = 2
end
object LabelsChk: TCheckBox
Left = 8
Height = 13
Top = 248
Width = 207
Caption = 'The first record contains variable labels.'
TabOrder = 6
end
object FmtGrid: TStringGrid
Left = 8
Height = 121
Top = 296
Width = 409
ColCount = 6
FixedColor = clBtnFace
FixedCols = 0
FixedRows = 0
GridLineWidth = 0
Options = [goFixedVertLine, goFixedHorzLine, goVertLine, goHorzLine, goColMoving, goEditing, goTabs]
RowCount = 5
ScrollBars = ssAutoBoth
TabOrder = 7
TabStop = True
end
object CancelBtn: TButton
Left = 160
Height = 25
Top = 448
Width = 57
BorderSpacing.InnerBorder = 4
Caption = 'Cancel'
ModalResult = 2
OnClick = CancelBtnClick
TabOrder = 8
end
object OKBtn: TButton
Left = 360
Height = 25
Top = 448
Width = 57
BorderSpacing.InnerBorder = 4
Caption = 'Return'
ModalResult = 1
OnClick = OKBtnClick
TabOrder = 9
end
object ResetBtn: TButton
Left = 224
Height = 25
Top = 448
Width = 57
BorderSpacing.InnerBorder = 4
Caption = 'Reset'
OnClick = ResetBtnClick
TabOrder = 10
end
object ExtractBtn: TButton
Left = 288
Height = 25
Top = 448
Width = 65
BorderSpacing.InnerBorder = 4
Caption = 'Extract'
OnClick = ExtractBtnClick
TabOrder = 11
end
object FileSelBtn: TButton
Left = 8
Height = 25
Top = 120
Width = 201
BorderSpacing.InnerBorder = 4
Caption = 'Press to Select a Huge File for Extraction'
OnClick = FileSelBtnClick
TabOrder = 12
end
object NoGotEdit: TEdit
Left = 368
Height = 21
Top = 424
Width = 49
TabOrder = 13
Text = 'NoGotEdit'
end
object RecdReadEdit: TEdit
Left = 104
Height = 21
Top = 424
Width = 65
TabOrder = 14
Text = 'RecdReadEdit'
end
object TypeBox: TComboBox
Left = 208
Height = 21
Top = 272
Width = 57
AutoCompleteText = [cbactEndOfLineComplete, cbactSearchAscending]
ItemHeight = 13
Items.Strings = (
'(I)nteger'
'(F)loating point'
'(S)tring'
'(M)oney'
'(D)ate'
)
MaxLength = 0
OnChange = TypeBoxChange
TabOrder = 15
Text = 'Type'
end
object OpenDialog1: TOpenDialog
Title = 'Open existing file'
FilterIndex = 0
left = 240
top = 192
end
end

View File

@ -0,0 +1,80 @@
{ This is an automatically generated lazarus resource file }
LazarusResources.Add('TFileExtractFrm','FORMDATA',[
'TPF0'#15'TFileExtractFrm'#14'FileExtractFrm'#4'Left'#3#160#0#6'Height'#3#253
+#1#3'Top'#3#201#2#5'Width'#3#179#1#11'HelpContext'#3#150#1#18'HorzScrollBar.'
+'Page'#3#178#1#18'VertScrollBar.Page'#3#252#1#13'ActiveControl'#7#12'NoField'
+'sEdit'#7'Caption'#6#25'File Extraction Procedure'#11'Font.Height'#2#245#9'F'
+'ont.Name'#6#13'MS Sans Serif'#8'HelpFile'#6#11'OS2Help.hlp'#6'OnShow'#7#8'F'
+'ormShow'#0#6'TLabel'#6'Label2'#4'Left'#2#8#6'Height'#2#14#3'Top'#3#152#0#5
+'Width'#3#132#0#7'Caption'#6#27'Number of lines per record:'#5'Color'#7#6'cl'
+'None'#11'ParentColor'#8#0#0#6'TLabel'#6'Label3'#4'Left'#3#224#0#6'Height'#2
+#14#3'Top'#3#152#0#5'Width'#3#170#0#7'Caption'#6'%No. of fields (variables) '
+'per record:'#5'Color'#7#6'clNone'#11'ParentColor'#8#0#0#6'TLabel'#6'Label4'
+#4'Left'#2#8#6'Height'#2#14#3'Top'#3#176#0#5'Width'#3#192#0#7'Caption'#6'''S'
+'equence number of key selection field:'#5'Color'#7#6'clNone'#11'ParentColor'
+#8#0#0#6'TLabel'#6'Label5'#4'Left'#2#8#6'Height'#2'('#3'Top'#3#200#0#5'Width'
+#2'L'#7'Caption'#6'*Selection Value (Including Dec. Fraction):'#5'Color'#7#6
+'clNone'#11'ParentColor'#8#8'WordWrap'#9#0#0#6'TLabel'#6'Label1'#4'Left'#3#16
+#1#6'Height'#2#14#3'Top'#3#168#1#5'Width'#2'^'#7'Caption'#6#18'Records Retri'
+'eved:'#5'Color'#7#6'clNone'#11'ParentColor'#8#0#0#6'TLabel'#6'Label6'#4'Lef'
+'t'#2#8#6'Height'#2#14#3'Top'#3#168#1#5'Width'#2'`'#7'Caption'#6#18'Records '
+'Processed:'#5'Color'#7#6'clNone'#11'ParentColor'#8#0#0#5'TMemo'#5'Memo1'#4
+'Left'#2#24#6'Height'#2'q'#5'Width'#3'y'#1#13'Lines.Strings'#1#6'PThis proce'
+'dure is used to extract records from files too large to read directly '#6'P'
+'into the data grid. The data grid can hold about 100,000 records. If your'
+' file'#6'Pis larger but you will not be processing all records, you may ext'
+'ract sub-groups'#6'Pof records using a "key" field, e.g. a group identifica'
+'tion number. The records'#6'Nextracted will be placed into the data grid a'
+'s if you had entered them via the'#6'Rkeyboard. You may then save the sub-'
+'file, process it, etc. as any other file. If'#6'Qyou have multiple groups '
+'to extract, repeat pressing the Extract button until all'#6'Lsub-files you '
+'need are placed into the data grid. Press return to continue.'#0#8'TabOrde'
+'r'#2#4#0#0#5'TEdit'#11'NoLinesEdit'#4'Left'#3#144#0#6'Height'#2#21#3'Top'#3
+#152#0#5'Width'#2#25#8'TabOrder'#2#5#0#0#5'TEdit'#12'NoFieldsEdit'#4'Left'#3
+#136#1#6'Height'#2#21#3'Top'#3#152#0#5'Width'#2#25#8'TabOrder'#2#0#0#0#11'TR'
+'adioGroup'#9'FormatGrp'#4'Left'#3#16#1#6'Height'#2'Q'#3'Top'#3#176#0#5'Widt'
+'h'#3#145#0#8'AutoFill'#9#7'Caption'#6#14'Record Format:'#28'ChildSizing.Lef'
+'tRightSpacing'#2#6#28'ChildSizing.TopBottomSpacing'#2#6#29'ChildSizing.Enla'
+'rgeHorizontal'#7#24'crsHomogenousChildResize'#27'ChildSizing.EnlargeVertica'
+'l'#7#24'crsHomogenousChildResize'#28'ChildSizing.ShrinkHorizontal'#7#14'crs'
+'ScaleChilds'#26'ChildSizing.ShrinkVertical'#7#14'crsScaleChilds'#18'ChildSi'
+'zing.Layout'#7#29'cclLeftToRightThenTopToBottom'#27'ChildSizing.ControlsPer'
+'Line'#2#1#13'Items.Strings'#1#6#20'Tab seperated fields'#6#22'comma seperat'
+'ed fields'#6#22'space seperated fields'#6#21'User specified format'#0#7'OnC'
+'lick'#7#14'FormatGrpClick'#8'TabOrder'#2#3#0#0#5'TEdit'#12'KeyVarNoEdit'#4
+'Left'#3#200#0#6'Height'#2#21#3'Top'#3#176#0#5'Width'#2#25#8'TabOrder'#2#1#0
+#0#5'TEdit'#9'ValueEdit'#4'Left'#2'p'#6'Height'#2#21#3'Top'#3#208#0#5'Width'
+#2'q'#8'TabOrder'#2#2#0#0#9'TCheckBox'#9'LabelsChk'#4'Left'#2#8#6'Height'#2
+#13#3'Top'#3#248#0#5'Width'#3#207#0#7'Caption'#6'*The first record contains '
+'variable labels.'#8'TabOrder'#2#6#0#0#11'TStringGrid'#7'FmtGrid'#4'Left'#2#8
+#6'Height'#2'y'#3'Top'#3'('#1#5'Width'#3#153#1#8'ColCount'#2#6#10'FixedColor'
+#7#9'clBtnFace'#9'FixedCols'#2#0#9'FixedRows'#2#0#13'GridLineWidth'#2#0#7'Op'
+'tions'#11#15'goFixedVertLine'#15'goFixedHorzLine'#10'goVertLine'#10'goHorzL'
+'ine'#11'goColMoving'#9'goEditing'#6'goTabs'#0#8'RowCount'#2#5#10'ScrollBars'
+#7#10'ssAutoBoth'#8'TabOrder'#2#7#7'TabStop'#9#0#0#7'TButton'#9'CancelBtn'#4
+'Left'#3#160#0#6'Height'#2#25#3'Top'#3#192#1#5'Width'#2'9'#25'BorderSpacing.'
+'InnerBorder'#2#4#7'Caption'#6#6'Cancel'#11'ModalResult'#2#2#7'OnClick'#7#14
+'CancelBtnClick'#8'TabOrder'#2#8#0#0#7'TButton'#5'OKBtn'#4'Left'#3'h'#1#6'He'
+'ight'#2#25#3'Top'#3#192#1#5'Width'#2'9'#25'BorderSpacing.InnerBorder'#2#4#7
+'Caption'#6#6'Return'#11'ModalResult'#2#1#7'OnClick'#7#10'OKBtnClick'#8'TabO'
+'rder'#2#9#0#0#7'TButton'#8'ResetBtn'#4'Left'#3#224#0#6'Height'#2#25#3'Top'#3
+#192#1#5'Width'#2'9'#25'BorderSpacing.InnerBorder'#2#4#7'Caption'#6#5'Reset'
+#7'OnClick'#7#13'ResetBtnClick'#8'TabOrder'#2#10#0#0#7'TButton'#10'ExtractBt'
+'n'#4'Left'#3' '#1#6'Height'#2#25#3'Top'#3#192#1#5'Width'#2'A'#25'BorderSpac'
+'ing.InnerBorder'#2#4#7'Caption'#6#7'Extract'#7'OnClick'#7#15'ExtractBtnClic'
+'k'#8'TabOrder'#2#11#0#0#7'TButton'#10'FileSelBtn'#4'Left'#2#8#6'Height'#2#25
+#3'Top'#2'x'#5'Width'#3#201#0#25'BorderSpacing.InnerBorder'#2#4#7'Caption'#6
,'*Press to Select a Huge File for Extraction'#7'OnClick'#7#15'FileSelBtnClic'
+'k'#8'TabOrder'#2#12#0#0#5'TEdit'#9'NoGotEdit'#4'Left'#3'p'#1#6'Height'#2#21
+#3'Top'#3#168#1#5'Width'#2'1'#8'TabOrder'#2#13#4'Text'#6#9'NoGotEdit'#0#0#5
+'TEdit'#12'RecdReadEdit'#4'Left'#2'h'#6'Height'#2#21#3'Top'#3#168#1#5'Width'
+#2'A'#8'TabOrder'#2#14#4'Text'#6#12'RecdReadEdit'#0#0#9'TComboBox'#7'TypeBox'
+#4'Left'#3#208#0#6'Height'#2#21#3'Top'#3#16#1#5'Width'#2'9'#16'AutoCompleteT'
+'ext'#11#22'cbactEndOfLineComplete'#20'cbactSearchAscending'#0#10'ItemHeight'
+#2#13#13'Items.Strings'#1#6#9'(I)nteger'#6#16'(F)loating point'#6#8'(S)tring'
+#6#7'(M)oney'#6#6'(D)ate'#0#9'MaxLength'#2#0#8'OnChange'#7#13'TypeBoxChange'
+#8'TabOrder'#2#15#4'Text'#6#4'Type'#0#0#11'TOpenDialog'#11'OpenDialog1'#5'Ti'
+'tle'#6#18'Open existing file'#11'FilterIndex'#2#0#4'left'#3#240#0#3'top'#3
+#192#0#0#0#0
]);

View File

@ -0,0 +1,191 @@
object EquationForm: TEquationForm
Left = 244
Height = 396
Top = 138
Width = 592
Caption = 'Equation Editor'
ClientHeight = 396
ClientWidth = 592
OnShow = ResetBtnClick
LCLVersion = '0.9.30'
object Memo1: TMemo
Left = 7
Height = 184
Top = 8
Width = 569
Lines.Strings = (
'You can create a new variable as a combination of other existing variables with this procedure.'
'First, enter the name of the new variable in the area labeled "New Variable".'
'Next, enter up to three values for each entry in your equation by selecting an operation, function or'
'variable from the "drop-down" boxes. You can select:'
'(a) An operation code (+,-,* or /) except for the first one which should be a function or variable name.'
'(b) A function such as sin, cos, sqrt, etc. can be entered first followed by the variable to be acted upon.'
'(c) A variable name from the list of available variables in the drop-down list of variables.'
'(d) For each variable to be entered, click the "Next Entry" button. Following the first entry, an '
' operation code must be the first entry.'
'When done, click the "Finished" button followed by a click of the "Compute button". An image of the'
'completed function will be displayed before the new values are created.'
)
TabOrder = 0
end
object Label1: TLabel
Left = 8
Height = 16
Top = 250
Width = 108
Caption = 'New Variable Name:'
ParentColor = False
end
object NewVarEdit: TEdit
Left = 8
Height = 23
Top = 275
Width = 127
TabOrder = 1
Text = 'NewVarEdit'
end
object Label2: TLabel
Left = 145
Height = 16
Top = 278
Width = 9
Caption = '='
ParentColor = False
end
object OpEdit: TEdit
Left = 161
Height = 23
Top = 275
Width = 96
TabOrder = 2
Text = 'OpEdit'
end
object FuncEdit: TEdit
Left = 265
Height = 23
Top = 275
Width = 136
TabOrder = 3
Text = 'FuncEdit'
end
object VarEdit: TEdit
Left = 409
Height = 23
Top = 275
Width = 168
TabOrder = 4
Text = 'VarEdit'
end
object OpsCombo: TComboBox
Left = 162
Height = 23
Top = 227
Width = 94
AutoDropDown = True
ItemHeight = 15
Items.Strings = (
'+'
'-'
'*'
'/'
''
)
OnClick = OpsComboClick
OnSelect = OpsComboSelect
TabOrder = 5
end
object FunctionCombo: TComboBox
Left = 265
Height = 23
Top = 226
Width = 134
AutoDropDown = True
ItemHeight = 15
Items.Strings = (
'sqr'
'sqrt'
'sin'
'cos'
'tan'
'asin'
'acos'
'atan'
'log10'
'ln'
'exp'
'1 / X'
''
)
OnClick = FunctionComboClick
OnSelect = FunctionComboSelect
TabOrder = 6
end
object VarCombo: TComboBox
Left = 407
Height = 23
Top = 224
Width = 169
AutoDropDown = True
ItemHeight = 15
OnClick = VarComboClick
OnSelect = VarComboSelect
TabOrder = 7
Text = 'VarCombo'
end
object ResetBtn: TButton
Left = 10
Height = 32
Top = 354
Width = 87
Caption = 'Reset'
OnClick = ResetBtnClick
TabOrder = 8
end
object CancelBtn: TButton
Left = 161
Height = 32
Top = 354
Width = 87
Caption = 'Cancel'
ModalResult = 2
OnClick = CancelBtnClick
TabOrder = 9
end
object ComputeBtn: TButton
Left = 312
Height = 32
Top = 354
Width = 87
Caption = 'Compute'
OnClick = ComputeBtnClick
TabOrder = 10
end
object ReturnBnt: TButton
Left = 489
Height = 32
Top = 354
Width = 87
Caption = 'Return'
ModalResult = 1
OnClick = ReturnBntClick
TabOrder = 11
end
object NextBtn: TButton
Left = 115
Height = 29
Top = 313
Width = 140
Caption = 'Continue for next entry'
OnClick = NextBtnClick
TabOrder = 12
end
object FinishedBtn: TButton
Left = 297
Height = 29
Top = 312
Width = 132
Caption = 'Finished'
OnClick = FinishedBtnClick
TabOrder = 13
end
end

View File

@ -0,0 +1,57 @@
{ This is an automatically generated lazarus resource file }
LazarusResources.Add('TEquationForm','FORMDATA',[
'TPF0'#13'TEquationForm'#12'EquationForm'#4'Left'#3#244#0#6'Height'#3#140#1#3
+'Top'#3#138#0#5'Width'#3'P'#2#7'Caption'#6#15'Equation Editor'#12'ClientHeig'
+'ht'#3#140#1#11'ClientWidth'#3'P'#2#6'OnShow'#7#13'ResetBtnClick'#10'LCLVers'
+'ion'#6#6'0.9.30'#0#5'TMemo'#5'Memo1'#4'Left'#2#7#6'Height'#3#184#0#3'Top'#2
+#8#5'Width'#3'9'#2#13'Lines.Strings'#1#6'_You can create a new variable as a'
+' combination of other existing variables with this procedure.'#6'MFirst, en'
+'ter the name of the new variable in the area labeled "New Variable".'#6'eNe'
+'xt, enter up to three values for each entry in your equation by selecting a'
+'n operation, function or'#6'6variable from the "drop-down" boxes. You can'
+' select:'#6'j(a) An operation code (+,-,* or /) except for the first one '
+'which should be a function or variable name.'#6'm(b) A function such as s'
+'in, cos, sqrt, etc. can be entered first followed by the variable to be act'
+'ed upon.'#6'^(c) A variable name from the list of available variables in '
+'the drop-down list of variables.'#6'e(d) For each variable to be entered,'
+' click the "Next Entry" button. Following the first entry, an '#6'/ '
+' operation code must be the first entry.'#6'dWhen done, click the "Finished'
+'" button followed by a click of the "Compute button". An image of the'#6'G'
+'completed function will be displayed before the new values are created.'#0#8
+'TabOrder'#2#0#0#0#6'TLabel'#6'Label1'#4'Left'#2#8#6'Height'#2#16#3'Top'#3
+#250#0#5'Width'#2'l'#7'Caption'#6#18'New Variable Name:'#11'ParentColor'#8#0
+#0#5'TEdit'#10'NewVarEdit'#4'Left'#2#8#6'Height'#2#23#3'Top'#3#19#1#5'Width'
+#2#127#8'TabOrder'#2#1#4'Text'#6#10'NewVarEdit'#0#0#6'TLabel'#6'Label2'#4'Le'
+'ft'#3#145#0#6'Height'#2#16#3'Top'#3#22#1#5'Width'#2#9#7'Caption'#6#1'='#11
+'ParentColor'#8#0#0#5'TEdit'#6'OpEdit'#4'Left'#3#161#0#6'Height'#2#23#3'Top'
+#3#19#1#5'Width'#2'`'#8'TabOrder'#2#2#4'Text'#6#6'OpEdit'#0#0#5'TEdit'#8'Fun'
+'cEdit'#4'Left'#3#9#1#6'Height'#2#23#3'Top'#3#19#1#5'Width'#3#136#0#8'TabOrd'
+'er'#2#3#4'Text'#6#8'FuncEdit'#0#0#5'TEdit'#7'VarEdit'#4'Left'#3#153#1#6'Hei'
+'ght'#2#23#3'Top'#3#19#1#5'Width'#3#168#0#8'TabOrder'#2#4#4'Text'#6#7'VarEdi'
+'t'#0#0#9'TComboBox'#8'OpsCombo'#4'Left'#3#162#0#6'Height'#2#23#3'Top'#3#227
+#0#5'Width'#2'^'#12'AutoDropDown'#9#10'ItemHeight'#2#15#13'Items.Strings'#1#6
+#1'+'#6#1'-'#6#1'*'#6#1'/'#6#0#0#7'OnClick'#7#13'OpsComboClick'#8'OnSelect'#7
+#14'OpsComboSelect'#8'TabOrder'#2#5#0#0#9'TComboBox'#13'FunctionCombo'#4'Lef'
+'t'#3#9#1#6'Height'#2#23#3'Top'#3#226#0#5'Width'#3#134#0#12'AutoDropDown'#9
+#10'ItemHeight'#2#15#13'Items.Strings'#1#6#3'sqr'#6#4'sqrt'#6#3'sin'#6#3'cos'
+#6#3'tan'#6#4'asin'#6#4'acos'#6#4'atan'#6#5'log10'#6#2'ln'#6#3'exp'#6#5'1 / '
+'X'#6#0#0#7'OnClick'#7#18'FunctionComboClick'#8'OnSelect'#7#19'FunctionCombo'
+'Select'#8'TabOrder'#2#6#0#0#9'TComboBox'#8'VarCombo'#4'Left'#3#151#1#6'Heig'
+'ht'#2#23#3'Top'#3#224#0#5'Width'#3#169#0#12'AutoDropDown'#9#10'ItemHeight'#2
+#15#7'OnClick'#7#13'VarComboClick'#8'OnSelect'#7#14'VarComboSelect'#8'TabOrd'
+'er'#2#7#4'Text'#6#8'VarCombo'#0#0#7'TButton'#8'ResetBtn'#4'Left'#2#10#6'Hei'
+'ght'#2' '#3'Top'#3'b'#1#5'Width'#2'W'#7'Caption'#6#5'Reset'#7'OnClick'#7#13
+'ResetBtnClick'#8'TabOrder'#2#8#0#0#7'TButton'#9'CancelBtn'#4'Left'#3#161#0#6
+'Height'#2' '#3'Top'#3'b'#1#5'Width'#2'W'#7'Caption'#6#6'Cancel'#11'ModalRes'
+'ult'#2#2#7'OnClick'#7#14'CancelBtnClick'#8'TabOrder'#2#9#0#0#7'TButton'#10
+'ComputeBtn'#4'Left'#3'8'#1#6'Height'#2' '#3'Top'#3'b'#1#5'Width'#2'W'#7'Cap'
+'tion'#6#7'Compute'#7'OnClick'#7#15'ComputeBtnClick'#8'TabOrder'#2#10#0#0#7
+'TButton'#9'ReturnBnt'#4'Left'#3#233#1#6'Height'#2' '#3'Top'#3'b'#1#5'Width'
+#2'W'#7'Caption'#6#6'Return'#11'ModalResult'#2#1#7'OnClick'#7#14'ReturnBntCl'
+'ick'#8'TabOrder'#2#11#0#0#7'TButton'#7'NextBtn'#4'Left'#2's'#6'Height'#2#29
+#3'Top'#3'9'#1#5'Width'#3#140#0#7'Caption'#6#23'Continue for next entry'#7'O'
+'nClick'#7#12'NextBtnClick'#8'TabOrder'#2#12#0#0#7'TButton'#11'FinishedBtn'#4
+'Left'#3')'#1#6'Height'#2#29#3'Top'#3'8'#1#5'Width'#3#132#0#7'Caption'#6#8'F'
+'inished'#7'OnClick'#7#16'FinishedBtnClick'#8'TabOrder'#2#13#0#0#0
]);

View File

@ -0,0 +1,289 @@
unit EquationUnit;
{$mode objfpc}{$H+}
interface
uses
Classes, SysUtils, FileUtil, LResources, Forms, Controls, Graphics, Dialogs,
StdCtrls, MainUnit, Globals, OutPutUnit, DataProcs,
DictionaryUnit, contexthelpunit, MatrixLib, Math;
type
{ TEquationForm }
TEquationForm = class(TForm)
FinishedBtn: TButton;
NextBtn: TButton;
ResetBtn: TButton;
CancelBtn: TButton;
ComputeBtn: TButton;
ReturnBnt: TButton;
VarCombo: TComboBox;
FunctionCombo: TComboBox;
OpsCombo: TComboBox;
VarEdit: TEdit;
FuncEdit: TEdit;
OpEdit: TEdit;
Label2: TLabel;
NewVarEdit: TEdit;
Label1: TLabel;
Memo1: TMemo;
procedure CancelBtnClick(Sender: TObject);
procedure ComputeBtnClick(Sender: TObject);
procedure FinishedBtnClick(Sender: TObject);
procedure FunctionComboClick(Sender: TObject);
procedure FunctionComboSelect(Sender: TObject);
procedure NextBtnClick(Sender: TObject);
procedure OpsComboClick(Sender: TObject);
procedure OpsComboSelect(Sender: TObject);
procedure ResetBtnClick(Sender: TObject);
procedure ReturnBntClick(Sender: TObject);
procedure VarComboClick(Sender: TObject);
procedure VarComboSelect(Sender: TObject);
private
{ private declarations }
operations, functions, variables : StrDyneVec;
NoEntries : integer;
selected : IntDyneVec;
public
{ public declarations }
end;
var
EquationForm: TEquationForm;
implementation
{ TEquationForm }
procedure TEquationForm.ResetBtnClick(Sender: TObject);
VAR i : integer;
begin
NewVarEdit.Text := '';
OpEdit.Text := '';
FuncEdit.Text := '';
VarEdit.Text := '';
OpsCombo.Text := 'Operations';
FunctionCombo.Text := 'Functions';
VarCombo.Clear;
for i := 1 to NoVariables do
VarCombo.Items.Add(OS3MainFrm.DataGrid.Cells[i,0]);
VarCombo.Text := 'Variables';
VarCombo.DropDownCount := NoVariables;
SetLength(operations,NoVariables);
SetLength(functions,NoVariables);
SetLength(variables,NoVariables);
NoEntries := 0;
end;
procedure TEquationForm.ReturnBntClick(Sender: TObject);
begin
variables := nil;
functions := nil;
operations := nil;
end;
procedure TEquationForm.VarComboClick(Sender: TObject);
VAR index : integer;
begin
index := VarCombo.ItemIndex;
if index < 0 then exit;
VarEdit.Text := VarCombo.Items.Strings[index];
VarCombo.ItemIndex := -1;
end;
procedure TEquationForm.VarComboSelect(Sender: TObject);
VAR index : integer;
begin
index := VarCombo.ItemIndex;
if index < 0 then exit;
VarEdit.Text := VarCombo.Items.Strings[index];
VarCombo.ItemIndex := -1;
end;
procedure TEquationForm.NextBtnClick(Sender: TObject);
begin
operations[NoEntries] := OpEdit.Text;
if ((NoEntries > 0) and (operations[NoEntries] = '') )then
begin
ShowMessage('ERROR-No operation selected - enter again!');
exit;
end;
functions[NoEntries] := FuncEdit.Text;
variables[NoEntries] := VarEdit.Text;
if (variables[NoEntries] = '') then
begin
ShowMessage('ERROR-No variable entered - enter again!');
exit;
end;
NoEntries := NoEntries + 1;
OpEdit.Text := '';
FuncEdit.Text := '';
VarEdit.Text := '';
OpsCombo.Text := 'Operations';
FunctionCombo.Text := 'Functions';
VarCombo.Text := 'Variables';
end;
procedure TEquationForm.OpsComboClick(Sender: TObject);
VAR index : integer;
begin
index := OpsCombo.ItemIndex;
if index < 0 then exit;
OpEdit.Text := OpsCombo.Items.Strings[index];
OpsCombo.ItemIndex := -1;
end;
procedure TEquationForm.OpsComboSelect(Sender: TObject);
VAR index : integer;
begin
index := OpsCombo.ItemIndex;
if index < 0 then exit;
OpEdit.Text := OpsCombo.Items.Strings[index];
OpsCombo.ItemIndex := -1;
end;
procedure TEquationForm.FinishedBtnClick(Sender: TObject);
begin
operations[NoEntries] := OpEdit.Text;
if ((NoEntries > 0) and (operations[NoEntries] = '')) then
begin
ShowMessage('ERROR-No operation selected - enter again!');
exit;
end;
functions[NoEntries] := FuncEdit.Text;
variables[NoEntries] := VarEdit.Text;
if (variables[NoEntries] = '') then
begin
ShowMessage('ERROR-No variable entered - enter again!');
exit;
end;
NoEntries := NoEntries + 1;
OpsCombo.Text := 'Operations';
FunctionCombo.Text := 'Functions';
VarCombo.Text := 'Variables';
end;
procedure TEquationForm.FunctionComboClick(Sender: TObject);
VAR index : integer;
begin
index := FunctionCombo.ItemIndex;
if index < 0 then exit;
FuncEdit.Text := FunctionCombo.Items.Strings[index];
FunctionCombo.ItemIndex := -1;
end;
procedure TEquationForm.FunctionComboSelect(Sender: TObject);
VAR index : integer;
begin
index := FunctionCombo.ItemIndex;
if index < 0 then exit;
FuncEdit.Text := FunctionCombo.Items.Strings[index];
FunctionCombo.ItemIndex := -1;
end;
procedure TEquationForm.ComputeBtnClick(Sender: TObject);
VAR
cellstring, outline : string;
opsitem, funcsitem, col, newcol, i, j, k : integer;
newvalue, xvalue : double;
begin
// get position of selected variables from the main grid
SetLength(selected,NoEntries);
for i := 1 to NoVariables do
begin
cellstring := Trim(OS3MainFrm.DataGrid.Cells[i,0]);
for j := 0 to NoEntries - 1 do
if (cellstring = variables[j]) then selected[j] := i;
end;
// create a new variable in the main grid
col := NoVariables + 1;
newcol := col;
DictionaryFrm.NewVar(col);
OS3MainFrm.DataGrid.Cells[col,0] := NewVarEdit.Text;
DictionaryFrm.DictGrid.Cells[1,col] := NewVarEdit.Text;
// for each subject obtain selected variable values and add to newvalue
for i := 1 to NoCases do // subject loop
begin
newvalue := 0.0;
for j := 0 to NoEntries - 1 do // list loop
begin
col := selected[j];
xvalue := StrToFloat(Trim(OS3MainFrm.DataGrid.Cells[col,i]));
if (functions[j] <> '') then // do the function
begin
for k := 0 to 11 do // get function number
begin
if (functions[j] = FunctionCombo.Items.Strings[k]) then funcsitem := k;
end;
case (funcsitem) of
0: xvalue *= xvalue;
1: xvalue := sqrt(xvalue);
2: xvalue := sin(xvalue);
3: xvalue := cos(xvalue);
4: xvalue := tan(xvalue);
5: xvalue := arcsin(xvalue);
6: xvalue := arccos(xvalue);
7: xvalue := arctan(xvalue);
8: xvalue := log10(xvalue);
9: xvalue := ln(xvalue);
10: xvalue := exp(xvalue);
11: xvalue := 1.0 / xvalue;
end;
end; // end if function
if (operations[j] = '') then newvalue := newvalue + xvalue
else // find operation
begin
for k := 0 to 3 do
begin
if (operations[j] = OpsCombo.Items.Strings[k]) then opsitem := k;
end;
case (opsitem) of
0: newvalue += xvalue;
1: newvalue -= xvalue;
2: newvalue *= xvalue;
3: newvalue /= xvalue;
end;
end; // end else
end; // end jth variable
OS3MainFrm.DataGrid.Cells[newcol,i] := floattostr(newvalue);
FormatCell(newcol,i);
end; // next subject
OutPutFrm.RichEdit.Clear;
OutPutFrm.RichEdit.Lines.Add('Equation Used for the New Variable');
OutPutFrm.RichEdit.Lines.Add('');
outline := NewVarEdit.Text;
outline := outline +' = ';
for j := 0 to NoEntries - 1 do
begin
outline := outline + functions[j];
outline := outline + ' ';
outline := outline + variables[j];
outline := outline + ' ';
if (j < NoEntries-1) then
begin
outline := outline + operations[j+1];
outline := outline + ' ';
end;
end;
OutPutFrm.RichEdit.Lines.Add(outline);
OutPutFrm.ShowModal;
end;
procedure TEquationForm.CancelBtnClick(Sender: TObject);
begin
variables := nil;
functions := nil;
operations := nil;
end;
initialization
{$I equationunit.lrs}
end.

View File

@ -0,0 +1,330 @@
unit ERRORCURVESUNIT;
{$mode objfpc}{$H+}
interface
uses
Classes, SysUtils, LResources, Forms, Controls, Graphics, Dialogs,
StdCtrls, ExtCtrls, BlankFrmUnit, OutPutUnit, FunctionsLib, Globals;
type
TwoCol = array[1..2,1..100] of double;
type
{ TErrorCurvesFrm }
TErrorCurvesFrm = class(TForm)
NullType: TRadioGroup;
ResetBtn: TButton;
CancelBtn: TButton;
ComputeBtn: TButton;
ReturnBtn: TButton;
NullMeanEdit: TEdit;
AltMeanEdit: TEdit;
SDEdit: TEdit;
TypeIEdit: TEdit;
TypeIIEdit: TEdit;
Label1: TLabel;
Label2: TLabel;
Label3: TLabel;
Label4: TLabel;
Label5: TLabel;
procedure ComputeBtnClick(Sender: TObject);
procedure FormShow(Sender: TObject);
procedure ResetBtnClick(Sender: TObject);
private
{ private declarations }
procedure PltPts(realpts : TwoCol;
Xmax, Xmin, Ymax, Ymin : double;
Npts, XaxisStart, YaxisStart, XaxisRange : integer;
YaxisRange : integer;
acolor : TColor; Sender : TObject);
procedure Hscale(Xmin, Xmax : double; Nsteps : integer;
acolor : TColor; FontSize : integer;
X, Y, Xlength : integer;
charLabel : string; Sender : TObject);
procedure Vscale(Ymin, Ymax : double; Nsteps : integer;
acolor : TColor; FontSize : integer;
X, Y, Ylength : integer;
charLabel : string; Sender : TObject);
procedure NormPts(zMin, zMax : double; Npts : integer;
VAR realpts : TwoCol;
Sender : TObject);
public
{ public declarations }
end;
var
ErrorCurvesFrm: TErrorCurvesFrm;
implementation
{ TErrorCurvesFrm }
procedure TErrorCurvesFrm.ResetBtnClick(Sender: TObject);
begin
NullMeanEdit.Text := '';
AltMeanEdit.Text := '';
SDEdit.Text := '';
TypeIEdit.Text := '0.05';
TypeIIEdit.Text := '0.05';
NullMeanEdit.SetFocus;
end;
procedure TErrorCurvesFrm.FormShow(Sender: TObject);
begin
ResetBtnClick(self);
end;
procedure TErrorCurvesFrm.ComputeBtnClick(Sender: TObject);
var
// generate a null and alternate hypothesis for a specified effect
// size, Type I error rate and Type II error rate using the normal
// distribution z-test. Estimate the N needed.
// Uses the Plot.h header file and form FrmPlot.
Clwidth,Clheight,X,Y,XaxisStart,XaxisEnd,YaxisStart,YaxisEnd : integer;
Xrange, Yrange, t, range, Nsize: integer;
alpha, beta, nullmean, altmean, Diff, StdDev, CriticalX, zalpha : double;
zbeta, Xprop, stderrmean, xlow, xhigh : double;
valuestr, charLabel : string;
realpts : TwoCol;
begin
BlankFrm.Show;
BlankFrm.Image1.Canvas.Clear;
BlankFrm.Image1.Canvas.Pen.Color := clBlack;
BlankFrm.Image1.Canvas.Brush.Color := clWhite;
BlankFrm.Image1.Canvas.Clear;
BlankFrm.Image1.Canvas.FloodFill(1,1,clWhite,fsborder);
alpha := StrToFloat(TypeIEdit.Text);
if NullType.ItemIndex = 1 then alpha := alpha / 2.0;
beta := StrToFloat(TypeIIEdit.Text);
nullmean := StrToFloat(NullMeanEdit.Text);
altmean := StrToFloat(AltMeanEdit.Text);
StdDev := StrToFloat(SDEdit.Text);
zalpha := inversez(1.0 - alpha);
zbeta := inversez(1.0 - beta);
Diff := abs(nullmean - altmean);
Nsize := round((StdDev / Diff) * abs(zbeta + zalpha));
Nsize := Nsize * Nsize;
CriticalX := zalpha * (StdDev / sqrt(Nsize)) + nullmean;
stderrmean := StdDev / sqrt(Nsize);
Clwidth := BlankFrm.Image1.Width;
Clheight := BlankFrm.Image1.Height;
// Determine X scale and print it
YaxisStart := (Clheight * 6) div 10;
YaxisEnd := Clheight div 10;
Yrange := YaxisStart - YaxisEnd;
xlow := nullmean - 4 * stderrmean;
xhigh := altmean + 4 * stderrmean;
XaxisStart := Clwidth div 8;
XaxisEnd := Clwidth - (Clwidth div 8);
Xrange := XaxisEnd - XaxisStart;
Hscale(xlow, xhigh, 9, clWhite, 8, XaxisStart, YaxisStart, Xrange,'X SCALE',BlankFrm);
// Create values of the alternative distribution
Xprop := ( (nullmean + 4*stderrmean) - xlow) / (xhigh - xlow);
range := round(Xprop * Xrange);
NormPts(-4.0, 4.0, 100, realpts, self);
Xprop := ((altmean - 4 * stderrmean) - xlow) / (xhigh - xlow);
X := round((Xprop * Xrange) + XaxisStart); // where to start curve
PltPts(realpts, 4.0, -4.0, 0.5, 0.0, 100, X, YaxisStart, range,
Yrange, clBlack, self);
//Draw vertical axis at the critical X value
Xprop := (CriticalX - xlow) / (xhigh - xlow);
X := round((Xprop * Xrange) + XaxisStart);
Y := YaxisStart;
BlankFrm.Image1.Canvas.MoveTo(X,Y);
BlankFrm.Image1.Canvas.LineTo(X,YaxisEnd);
charLabel := 'Critical X = ';
valuestr := format('%6.2f',[CriticalX]);
charLabel := charLabel + valuestr;
t := BlankFrm.Image1.Canvas.TextWidth(charLabel) div 2;
BlankFrm.Image1.Canvas.TextOut(X-t,YaxisEnd-15,charLabel);
// floodfill Alternate distribution area with blue
Xprop := (CriticalX - xlow) / (xhigh - xlow);
X := round((Xprop * Xrange) + XaxisStart);
Y := YaxisStart - 3;
BlankFrm.Image1.Canvas.Brush.Color := clBlue;
BlankFrm.Image1.Canvas.FloodFill(X-2,Y,clBlack,fsBorder );
BlankFrm.Image1.Canvas.Brush.Color := clWhite;
// Create values of normal curve for null distribution
NormPts(-4.0, 4.0, 100, realpts, self);
Xprop := ( (nullmean + 4*stderrmean) - xlow) / (xhigh - xlow);
range := round(Xprop * Xrange);
BlankFrm.Image1.Canvas.Brush.Color := clWhite;
PltPts(realpts, 4.0, -4.0, 0.5, 0.0, 100, XaxisStart, YaxisStart, range,
Yrange, clBlack, self);
//Draw vertical axis at null mean
Xprop := (nullmean - xlow) / (xhigh - xlow);
X := round((Xprop * Xrange) + XaxisStart);
Y := YaxisStart;
BlankFrm.Image1.Canvas.MoveTo(X,Y);
BlankFrm.Image1.Canvas.LineTo(X,YaxisEnd);
charLabel := 'Null Mean';
t := BlankFrm.Image1.Canvas.TextWidth(charLabel) div 2;
BlankFrm.Image1.Canvas.TextOut(X-t,YaxisEnd,charLabel);
// floodfill alpha area with red
Xprop := (CriticalX - xlow) / (xhigh - xlow);
X := round((Xprop * Xrange) + XaxisStart);
Y := YaxisStart - 3;
BlankFrm.Image1.Canvas.Brush.Color := clRed;
BlankFrm.Image1.Canvas.FloodFill(X+2,Y,clBlack,fsBorder );
BlankFrm.Image1.Canvas.Brush.Color := clWhite;
//Draw vertical axis at alternative mean
BlankFrm.Image1.Canvas.Pen.Color := clBlack;
Xprop := (altmean - xlow) / (xhigh - xlow);
X := round((Xprop * Xrange) + XaxisStart);
Y := YaxisStart;
BlankFrm.Image1.Canvas.MoveTo(X,Y);
BlankFrm.Image1.Canvas.LineTo(X,YaxisEnd);
charLabel := 'Alternative Mean';
t := BlankFrm.Image1.Canvas.TextWidth(charLabel) div 2;
BlankFrm.Image1.Canvas.TextOut(X-t,YaxisEnd,charLabel);
// draw the vertical density axis scale values
Vscale(0.0, 0.5, 11, clWhite, 10, XaxisStart, YaxisStart, Yrange, 'DENSITY', self);
// Print Heading
charLabel := 'Type I and II Error Areas';
BlankFrm.Caption := charLabel;
charLabel := 'Alpha := ';
charLabel := charLabel + TypeIEdit.Text;
charLabel := charLabel + ', Beta := ';
charLabel := charLabel + TypeIIEdit.Text;
charLabel := charLabel + ', N := ';
charLabel := charLabel + IntToStr(Nsize);
t := BlankFrm.Image1.Canvas.TextWidth(charLabel);
X := round((BlankFrm.Image1.Width / 2) - (t / 2));
BlankFrm.Image1.Canvas.TextOut(X,0,charLabel);
// print z scale for the null distribution
Xprop := ( (nullmean + 4*stderrmean) - xlow) / (xhigh - xlow);
range := round(Xprop * Xrange);
Hscale(-4.0, 4.0, 11, clWhite, 8, XaxisStart, YaxisStart+50, range,'NULL Z SCALE', self);
end;
procedure TErrorCurvesFrm.PltPts(realpts: TwoCol; Xmax, Xmin, Ymax,
Ymin: double; Npts, XaxisStart, YaxisStart, XaxisRange: integer;
YaxisRange: integer; acolor: TColor; Sender: TObject);
var
hprop, zprop, z, h : double;
i, X, Y : integer;
intpts : array[1..100] of TPoint;
begin
for i := 1 to Npts do
begin
z := realpts[1,i];
h := realpts[2,i];
zprop := (z - Xmin) / (Xmax - Xmin);
X := round((zprop * XaxisRange) + XaxisStart);
hprop := (h - Ymin) / (Ymax - Ymin);
Y := round(YaxisStart - (hprop * YaxisRange));
intpts[i] := Point(X,Y);
end;
BlankFrm.Image1.Canvas.Pen.Color := acolor;
BlankFrm.Image1.Canvas.Polyline(Slice(intpts,Npts - 1));
end;
procedure TErrorCurvesFrm.Hscale(Xmin, Xmax: double; Nsteps: integer;
acolor: TColor; FontSize: integer; X, Y, Xlength: integer; charLabel: string;
Sender: TObject);
var
i, TickEnd, Xpos, Ypos, TextX : integer;
Xincr, Xval : double;
Svalue, Ast : string;
begin
BlankFrm.Image1.Canvas.MoveTo(X,Y);
BlankFrm.Image1.Canvas.LineTo(X+Xlength,Y);
BlankFrm.Image1.Canvas.Font.Size := FontSize;
BlankFrm.Image1.Canvas.Brush.Color := acolor;
TickEnd := Y + 10;
Xincr := (Xmax - Xmin) / Nsteps;
for i := 0 to Nsteps + 1 do
begin
Xpos := round(((Xlength / Nsteps) * i) + X);
BlankFrm.Image1.Canvas.MoveTo(Xpos,Y);
BlankFrm.Image1.Canvas.LineTo(Xpos,TickEnd);
TextX := Xpos - 8;
Xval := Xmin + ( i * Xincr);
Svalue := format('%4.2f',[Xval]);
Ast := Svalue;
BlankFrm.Image1.Canvas.TextOut(TextX, Y+15, Ast);
end;
// print label below X axis
Ypos := Y + 30;
Xpos := round((BlankFrm.Image1.Width / 2) - (BlankFrm.Image1.Canvas.TextWidth(charLabel) / 2));
BlankFrm.Image1.Canvas.TextOut(Xpos,Ypos,charLabel);
end;
procedure TErrorCurvesFrm.Vscale(Ymin, Ymax: double; Nsteps: integer;
acolor: TColor; FontSize: integer; X, Y, Ylength: integer; charLabel: string;
Sender: TObject);
var
TickEnd, Ypos, Xpos, TextY : integer;
Yincr, Yval : double;
Svalue, symbol, Ast : string;
chpixs, i : integer;
begin
BlankFrm.Image1.Canvas.MoveTo(X,Y);
BlankFrm.Image1.Canvas.LineTo(X,Y-Ylength);
BlankFrm.Image1.Canvas.Font.Size := FontSize;
BlankFrm.Image1.Canvas.Brush.Color := acolor;
TickEnd := X - 10;
Yincr := (Ymax - Ymin) / Nsteps;
TextY := 0;
for i := 0 to Nsteps + 1 do
begin
Ypos := round(Y - ((Ylength / Nsteps) * i));
BlankFrm.Image1.Canvas.MoveTo(X,Ypos);
BlankFrm.Image1.Canvas.LineTo(TickEnd,Ypos);
TextY := TickEnd - 30;
Yval := Ymin + ( i * Yincr);
Svalue := format('%4.2f',[Yval]);
Ast := Svalue;
BlankFrm.Image1.Canvas.TextOut(TextY, Ypos-8, Ast);
end;
// print label vertically
Xpos := TextY - 15;
for i := 1 to Length(charLabel) do
begin
chpixs := BlankFrm.Image1.Canvas.TextHeight(charLabel);
Ypos := round(Y - (Ylength / 2) - ( (Length(charLabel) * chpixs) / 2 ) + (chpixs * i));
symbol := charLabel[i];
// symbol[2] := 0;
BlankFrm.Image1.Canvas.TextOut(Xpos,Ypos,symbol);
end;
end;
procedure TErrorCurvesFrm.NormPts(zMin, zMax: double; Npts: integer;
var realpts: TwoCol; Sender: TObject);
var
zIncr, z, h : double;
i : integer;
begin
zIncr := (zMax - zMin) / Npts;
for i := 1 to Npts do
begin
z := zMin + (zIncr * i);
h := (1.0 / sqrt(2.0 * 3.14159265358979)) *
( 1.0 / exp(z * z / 2.0));
realpts[1,i] := z;
realpts[2,i] := h;
end;
end;
initialization
{$I errorcurvesunit.lrs}
end.

View File

@ -0,0 +1,205 @@
object EssayItemForm: TEssayItemForm
Left = 207
Height = 499
Top = 116
Width = 641
Caption = 'Essay Item Creation and Editing'
ClientHeight = 499
ClientWidth = 641
OnShow = FormShow
LCLVersion = '0.9.30'
object jpegBrowseBtn: TButton
Left = 7
Height = 30
Top = 337
Width = 118
Caption = 'Browse jpeg Images'
OnClick = jpegBrowseBtnClick
TabOrder = 0
end
object SelectImageBtn: TButton
Left = 10
Height = 26
Top = 408
Width = 112
Caption = 'Select Shown Image'
OnClick = SelectImageBtnClick
TabOrder = 1
end
object Image1: TImage
Left = 138
Height = 151
Top = 337
Width = 211
end
object ItemSaveBtn: TButton
Left = 368
Height = 33
Top = 336
Width = 111
Caption = 'Save this item'
OnClick = ItemSaveBtnClick
TabOrder = 2
end
object PreviousBtn: TButton
Left = 498
Height = 32
Top = 337
Width = 110
Caption = 'Show Previous Item'
OnClick = PreviousBtnClick
TabOrder = 3
end
object ShowNextBtn: TButton
Left = 369
Height = 30
Top = 392
Width = 109
Caption = 'Show Next Item'
OnClick = ShowNextBtnClick
TabOrder = 4
end
object StartNewBtn: TButton
Left = 498
Height = 30
Top = 392
Width = 111
Caption = 'Start a new item'
OnClick = StartNewBtnClick
TabOrder = 5
end
object ReturnBtn: TButton
Left = 432
Height = 30
Top = 456
Width = 111
Caption = 'Return'
OnClick = ReturnBtnClick
TabOrder = 6
end
object jpeglabel: TLabel
Left = 10
Height = 16
Top = 299
Width = 225
Caption = 'jpeg photo to display prior to item (if any):'
ParentColor = False
end
object jpegnameEdit: TEdit
Left = 240
Height = 23
Top = 292
Width = 372
TabOrder = 7
Text = 'jpegnameEdit'
end
object TFItemNoLabel: TLabel
Left = 7
Height = 16
Top = 179
Width = 75
Caption = 'Item Number:'
ParentColor = False
end
object ItemNoEdit: TEdit
Left = 96
Height = 23
Top = 172
Width = 44
TabOrder = 8
Text = '1'
end
object ItemCodeLabel: TLabel
Left = 176
Height = 16
Top = 179
Width = 93
Caption = 'Item Major Code:'
ParentColor = False
end
object MajorCodeEdit: TEdit
Left = 280
Height = 23
Top = 172
Width = 41
TabOrder = 9
Text = '1'
end
object MinorCodeLabel: TLabel
Left = 336
Height = 16
Top = 177
Width = 94
Caption = 'Item Minor Code:'
ParentColor = False
end
object MinorCodeEdit: TEdit
Left = 440
Height = 23
Top = 172
Width = 45
TabOrder = 10
Text = '0'
end
object ItemStemLabel: TLabel
Left = 8
Height = 16
Top = 220
Width = 58
Caption = 'Item Stem:'
ParentColor = False
end
object ItemStemEdit: TEdit
Left = 73
Height = 23
Top = 213
Width = 539
TabOrder = 11
Text = 'ItemStemEdit'
end
object AnswerLabel: TLabel
Left = 8
Height = 16
Top = 256
Width = 74
Caption = 'Short Answer:'
ParentColor = False
end
object AnswerEdit: TEdit
Left = 96
Height = 23
Top = 249
Width = 516
TabOrder = 12
end
object Memo1: TMemo
Left = 20
Height = 133
Top = 11
Width = 592
Lines.Strings = (
'Directions: To create an Essay item, you will need to enter the number of an item code which contains'
'both a major code and a minor code. It is suggested you print all item codes from the options menu on the'
'main procedure page of the item banking program. You can however, browse the Essay items from this '
'form.'
'After you have selected an item code number, enter the item stem in the space provided. Your item can also'
'include a jpeg picture prior to the presentation of the item on a test. To find the image, click the jpeg browse'
'button until you see the image you wish to include. When that item is shown, click the Select button to save'
'the name of the image file.'
)
TabOrder = 13
end
object CodeBrowseBtn: TButton
Left = 502
Height = 28
Top = 165
Width = 106
Caption = 'Browse Items'
OnClick = CodeBrowseBtnClick
TabOrder = 14
end
object OpenPictureDialog1: TOpenPictureDialog
left = 412
top = 471
end
end

View File

@ -0,0 +1,60 @@
{ This is an automatically generated lazarus resource file }
LazarusResources.Add('TEssayItemForm','FORMDATA',[
'TPF0'#14'TEssayItemForm'#13'EssayItemForm'#4'Left'#3#207#0#6'Height'#3#243#1
+#3'Top'#2't'#5'Width'#3#129#2#7'Caption'#6#31'Essay Item Creation and Editin'
+'g'#12'ClientHeight'#3#243#1#11'ClientWidth'#3#129#2#6'OnShow'#7#8'FormShow'
+#10'LCLVersion'#6#6'0.9.30'#0#7'TButton'#13'jpegBrowseBtn'#4'Left'#2#7#6'Hei'
+'ght'#2#30#3'Top'#3'Q'#1#5'Width'#2'v'#7'Caption'#6#18'Browse jpeg Images'#7
+'OnClick'#7#18'jpegBrowseBtnClick'#8'TabOrder'#2#0#0#0#7'TButton'#14'SelectI'
+'mageBtn'#4'Left'#2#10#6'Height'#2#26#3'Top'#3#152#1#5'Width'#2'p'#7'Caption'
+#6#18'Select Shown Image'#7'OnClick'#7#19'SelectImageBtnClick'#8'TabOrder'#2
+#1#0#0#6'TImage'#6'Image1'#4'Left'#3#138#0#6'Height'#3#151#0#3'Top'#3'Q'#1#5
+'Width'#3#211#0#0#0#7'TButton'#11'ItemSaveBtn'#4'Left'#3'p'#1#6'Height'#2'!'
+#3'Top'#3'P'#1#5'Width'#2'o'#7'Caption'#6#14'Save this item'#7'OnClick'#7#16
+'ItemSaveBtnClick'#8'TabOrder'#2#2#0#0#7'TButton'#11'PreviousBtn'#4'Left'#3
+#242#1#6'Height'#2' '#3'Top'#3'Q'#1#5'Width'#2'n'#7'Caption'#6#18'Show Previ'
+'ous Item'#7'OnClick'#7#16'PreviousBtnClick'#8'TabOrder'#2#3#0#0#7'TButton'
+#11'ShowNextBtn'#4'Left'#3'q'#1#6'Height'#2#30#3'Top'#3#136#1#5'Width'#2'm'#7
+'Caption'#6#14'Show Next Item'#7'OnClick'#7#16'ShowNextBtnClick'#8'TabOrder'
+#2#4#0#0#7'TButton'#11'StartNewBtn'#4'Left'#3#242#1#6'Height'#2#30#3'Top'#3
+#136#1#5'Width'#2'o'#7'Caption'#6#16'Start a new item'#7'OnClick'#7#16'Start'
+'NewBtnClick'#8'TabOrder'#2#5#0#0#7'TButton'#9'ReturnBtn'#4'Left'#3#176#1#6
+'Height'#2#30#3'Top'#3#200#1#5'Width'#2'o'#7'Caption'#6#6'Return'#7'OnClick'
+#7#14'ReturnBtnClick'#8'TabOrder'#2#6#0#0#6'TLabel'#9'jpeglabel'#4'Left'#2#10
+#6'Height'#2#16#3'Top'#3'+'#1#5'Width'#3#225#0#7'Caption'#6'-jpeg photo to d'
+'isplay prior to item (if any):'#11'ParentColor'#8#0#0#5'TEdit'#12'jpegnameE'
+'dit'#4'Left'#3#240#0#6'Height'#2#23#3'Top'#3'$'#1#5'Width'#3't'#1#8'TabOrde'
+'r'#2#7#4'Text'#6#12'jpegnameEdit'#0#0#6'TLabel'#13'TFItemNoLabel'#4'Left'#2
+#7#6'Height'#2#16#3'Top'#3#179#0#5'Width'#2'K'#7'Caption'#6#12'Item Number:'
+#11'ParentColor'#8#0#0#5'TEdit'#10'ItemNoEdit'#4'Left'#2'`'#6'Height'#2#23#3
+'Top'#3#172#0#5'Width'#2','#8'TabOrder'#2#8#4'Text'#6#1'1'#0#0#6'TLabel'#13
+'ItemCodeLabel'#4'Left'#3#176#0#6'Height'#2#16#3'Top'#3#179#0#5'Width'#2']'#7
+'Caption'#6#16'Item Major Code:'#11'ParentColor'#8#0#0#5'TEdit'#13'MajorCode'
+'Edit'#4'Left'#3#24#1#6'Height'#2#23#3'Top'#3#172#0#5'Width'#2')'#8'TabOrder'
+#2#9#4'Text'#6#1'1'#0#0#6'TLabel'#14'MinorCodeLabel'#4'Left'#3'P'#1#6'Height'
+#2#16#3'Top'#3#177#0#5'Width'#2'^'#7'Caption'#6#16'Item Minor Code:'#11'Pare'
+'ntColor'#8#0#0#5'TEdit'#13'MinorCodeEdit'#4'Left'#3#184#1#6'Height'#2#23#3
+'Top'#3#172#0#5'Width'#2'-'#8'TabOrder'#2#10#4'Text'#6#1'0'#0#0#6'TLabel'#13
+'ItemStemLabel'#4'Left'#2#8#6'Height'#2#16#3'Top'#3#220#0#5'Width'#2':'#7'Ca'
+'ption'#6#10'Item Stem:'#11'ParentColor'#8#0#0#5'TEdit'#12'ItemStemEdit'#4'L'
+'eft'#2'I'#6'Height'#2#23#3'Top'#3#213#0#5'Width'#3#27#2#8'TabOrder'#2#11#4
+'Text'#6#12'ItemStemEdit'#0#0#6'TLabel'#11'AnswerLabel'#4'Left'#2#8#6'Height'
+#2#16#3'Top'#3#0#1#5'Width'#2'J'#7'Caption'#6#13'Short Answer:'#11'ParentCol'
+'or'#8#0#0#5'TEdit'#10'AnswerEdit'#4'Left'#2'`'#6'Height'#2#23#3'Top'#3#249#0
+#5'Width'#3#4#2#8'TabOrder'#2#12#0#0#5'TMemo'#5'Memo1'#4'Left'#2#20#6'Height'
+#3#133#0#3'Top'#2#11#5'Width'#3'P'#2#13'Lines.Strings'#1#6'fDirections: To '
+'create an Essay item, you will need to enter the number of an item code whi'
+'ch contains'#6'jboth a major code and a minor code. It is suggested you pr'
+'int all item codes from the options menu on the'#6'emain procedure page of '
+'the item banking program. You can however, browse the Essay items from th'
+'is '#6#5'form.'#6'kAfter you have selected an item code number, enter the i'
+'tem stem in the space provided. Your item can also'#6'qinclude a jpeg pict'
+'ure prior to the presentation of the item on a test. To find the image, cl'
+'ick the jpeg browse'#6'mbutton until you see the image you wish to include.'
+' When that item is shown, click the Select button to save'#6#27'the name o'
+'f the image file.'#0#8'TabOrder'#2#13#0#0#7'TButton'#13'CodeBrowseBtn'#4'Le'
+'ft'#3#246#1#6'Height'#2#28#3'Top'#3#165#0#5'Width'#2'j'#7'Caption'#6#12'Bro'
+'wse Items'#7'OnClick'#7#18'CodeBrowseBtnClick'#8'TabOrder'#2#14#0#0#18'TOpe'
+'nPictureDialog'#18'OpenPictureDialog1'#4'left'#3#156#1#3'top'#3#215#1#0#0#0
]);

View File

@ -0,0 +1,260 @@
unit EssayItemUnit;
{$mode objfpc}{$H+}
interface
uses
Classes, SysUtils, FileUtil, LResources, Forms, Controls, Graphics, Dialogs,
StdCtrls, ExtCtrls, ExtDlgs, outputunit;
type
{ TEssayItemForm }
TEssayItemForm = class(TForm)
AnswerEdit: TEdit;
AnswerLabel: TLabel;
CodeBrowseBtn: TButton;
Image1: TImage;
ItemCodeLabel: TLabel;
ItemSaveBtn: TButton;
ItemStemEdit: TEdit;
ItemStemLabel: TLabel;
jpegBrowseBtn: TButton;
jpeglabel: TLabel;
jpegnameEdit: TEdit;
MajorCodeEdit: TEdit;
Memo1: TMemo;
MinorCodeEdit: TEdit;
MinorCodeLabel: TLabel;
OpenPictureDialog1: TOpenPictureDialog;
PreviousBtn: TButton;
ReturnBtn: TButton;
SelectImageBtn: TButton;
ShowNextBtn: TButton;
StartNewBtn: TButton;
ItemNoEdit: TEdit;
TFItemNoLabel: TLabel;
procedure CodeBrowseBtnClick(Sender: TObject);
procedure FormShow(Sender: TObject);
procedure ItemSaveBtnClick(Sender: TObject);
procedure jpegBrowseBtnClick(Sender: TObject);
procedure PreviousBtnClick(Sender: TObject);
procedure ReturnBtnClick(Sender: TObject);
procedure SelectImageBtnClick(Sender: TObject);
procedure ShowNextBtnClick(Sender: TObject);
procedure StartNewBtnClick(Sender: TObject);
private
{ private declarations }
public
{ public declarations }
end;
var
EssayItemForm: TEssayItemForm;
implementation
uses ItemBankingUnit;
{ TEssayItemForm }
procedure TEssayItemForm.ReturnBtnClick(Sender: TObject);
begin
EssayItemForm.Hide;
Close;
end;
procedure TEssayItemForm.SelectImageBtnClick(Sender: TObject);
begin
jpegnameEdit.Text := OpenPictureDialog1.FileName;
end;
procedure TEssayItemForm.ShowNextBtnClick(Sender: TObject);
var
count : integer;
itemno : integer;
JPEG : TJPEGImage;
begin
itemno := StrToInt(ItemNoEdit.Text) + 1;
count := ItemBankFrm.BankInfo.NEssayItems;
if count <= itemno then
begin
ItemNoEdit.Text := IntToStr(ItemBankFrm.EssayInfo[itemno].ItemNumber);
MajorCodeEdit.Text := IntToStr(ItemBankFrm.EssayInfo[itemno].majorcode) ;
MinorCodeEdit.Text := IntToStr(ItemBankFrm.EssayInfo[itemno].minorcode);
ItemStemEdit.Text := ItemBankFrm.EssayInfo[itemno].ItemStem;
AnswerEdit.Text := ItemBankFrm.EssayInfo[itemno].Answer;
jpegnameEdit.Text := ItemBankFrm.EssayInfo[itemno].PicName;
if jpegnameEdit.Text <> 'none' then
begin
JPEG := TJPEGImage.Create;
try
JPEG.LoadFromFile(jpegnameEdit.Text);
Image1.Picture.Assign(JPEG);
finally
JPEG.Free;
Image1.Proportional := true;
end;
end;
end;
end;
procedure TEssayItemForm.StartNewBtnClick(Sender: TObject);
var
currentno : integer;
begin
currentno := ItemBankFrm.BankInfo.NEssayItems + 1;
ItemNoEdit.Text := IntToStr(currentno);
currentno := StrToInt(MinorCodeEdit.Text);
MinorCodeEdit.Text := IntToStr(currentno + 1);
ItemStemEdit.Text := '';
AnswerEdit.Text := '';
jpegnameEdit.Text := 'none';
Image1.Canvas.Clear;
end;
procedure TEssayItemForm.ItemSaveBtnClick(Sender: TObject);
var
currentno : integer;
count : integer;
begin
count := ItemBankFrm.BankInfo.NEssayItems;
currentno := StrToInt(ItemNoEdit.Text);
if currentno > count then
begin
ItemBankFrm.BankInfo.NEssayItems := currentno;
ItemBankFrm.NEssayText.Text := IntToStr(currentno);
end;
ItemBankFrm.EssayInfo[currentno].ItemNumber := currentno;
ItemBankFrm.EssayInfo[currentno].majorcode := StrToInt(MajorCodeEdit.Text);
ItemBankFrm.EssayInfo[currentno].minorcode := StrToInt(MinorCodeEdit.Text);
ItemBankFrm.EssayInfo[currentno].ItemStem := ItemStemEdit.Text;
ItemBankFrm.EssayInfo[currentno].Answer := AnswerEdit.text;
ItemBankFrm.EssayInfo[currentno].PicName := jpegnameEdit.Text;
end;
procedure TEssayItemForm.FormShow(Sender: TObject);
Var
nitems : integer;
JPEG : TJPEGImage;
begin
if ItemBankFrm.BankInfo.NEssayItems > 0 then
begin
nitems := ItemBankFrm.BankInfo.NEssayItems;
ItemNoEdit.Text := '1'; //IntToStr(ItemBankFrm.TFItemInfo[1].ItemNumber);
MajorCodeEdit.Text := IntToStr(ItemBankFrm.EssayInfo[1].majorcode) ;
MinorCodeEdit.Text := IntToStr(ItemBankFrm.EssayInfo[1].minorcode);
ItemStemEdit.Text := ItemBankFrm.EssayInfo[1].ItemStem;
AnswerEdit.Text := ItemBankFrm.EssayInfo[1].Answer;
jpegnameEdit.Text := ItemBankFrm.EssayInfo[1].PicName;
if jpegnameEdit.Text <> 'none' then
begin
JPEG := TJPEGImage.Create;
try
JPEG.LoadFromFile(jpegnameEdit.Text);
Image1.Picture.Assign(JPEG);
finally
JPEG.Free;
Image1.Proportional := true;
end;
end;
end else
begin
ItemNoEdit.Text := '1';
MajorCodeEdit.Text := '1';
MinorCodeEdit.Text := '0';
ItemStemEdit.Text := '';
AnswerEdit.Text := '';
jpegnameEdit.Text := 'none';
Image1.Canvas.Clear;
end;
end;
procedure TEssayItemForm.CodeBrowseBtnClick(Sender: TObject);
var
count : integer;
i : integer;
outline : string;
begin
OutPutFrm.RichEdit.Clear;
count := ItemBankFrm.BankInfo.NTFItems;
OutPutFrm.RichEdit.Lines.Add('Current Items');
OutPutFrm.RichEdit.Lines.Add('');
for i := 1 to count do
begin
outline := format('Item number %3d',[ItemBankFrm.EssayInfo[i].itemnumber]);
OutPutFrm.RichEdit.Lines.Add(outline);
outline := format('Major Code %3d',[ItemBankFrm.EssayInfo[i].majorcode]);
OutPutFrm.RichEdit.Lines.Add(outline);
outline := format('Minor Code %3d',[ItemBankFrm.EssayInfo[i].minorcode]);
OutPutFrm.RichEdit.Lines.Add(outline);
outline := format('Item Stem %s',[ItemBankFrm.EssayInfo[i].ItemStem]);
OutPutFrm.RichEdit.Lines.Add(outline);
outline := format('Breif Answer %s',[ItemBankFrm.EssayInfo[i].Answer]);
OutPutFrm.RichEdit.Lines.Add(outline);
outline := format('Graphic Image %s',[ItemBankFrm.EssayInfo[i].PicName]);
OutPutFrm.RichEdit.Lines.Add(outline);
OutPutFrm.RichEdit.Lines.Add('');
end;
OutPutFrm.ShowModal;
end;
procedure TEssayItemForm.jpegBrowseBtnClick(Sender: TObject);
VAR
JPEG : TJPEGImage;
begin
OpenPictureDialog1.Options := OpenPictureDialog1.Options+[ofFileMustExist];
if not OpenPictureDialog1.Execute then exit;
try
JPEG := TJPEGImage.Create;
try
JPEG.LoadFromFile(OpenPictureDialog1.FileName);
Image1.Picture.Assign(JPEG);
finally
JPEG.Free;
end;
except
on E: Exception do begin
MessageDlg('Error','Error: '+E.Message,mtError,[mbOk],0);
end;
end;
Image1.Proportional := true;
end;
procedure TEssayItemForm.PreviousBtnClick(Sender: TObject);
Var
response : string;
itemno : integer;
JPEG : TJPEGImage;
begin
response := InputBox('Code Number:','Number:','1');
itemno := StrToInt(response);
if itemno <= ItemBankFrm.BankInfo.NEssayItems then
begin
ItemNoEdit.Text := IntToStr(ItemBankFrm.EssayInfo[itemno].ItemNumber);
MajorCodeEdit.Text := IntToStr(ItemBankFrm.EssayInfo[itemno].majorcode);
MinorCodeEdit.Text := IntToStr(ItemBankFrm.EssayInfo[itemno].minorcode);
ItemStemEdit.Text := ItemBankFrm.EssayInfo[itemno].ItemStem ;
AnswerEdit.Text := ItemBankFrm.EssayInfo[itemno].Answer;
jpegnameEdit.Text := ItemBankFrm.EssayInfo[itemno].PicName;
if jpegnameEdit.Text <> 'none' then
begin
JPEG := TJPEGImage.Create;
try
JPEG.LoadFromFile(jpegnameEdit.Text);
Image1.Picture.Assign(JPEG);
finally
JPEG.Free;
Image1.Proportional := true;
end;
end;
end;
end;
initialization
{$I essayitemunit.lrs}
end.

View File

@ -0,0 +1,112 @@
object FForm: TFForm
Left = 288
Height = 232
Top = 161
Width = 322
Caption = 'Probability of a larger F value'
ClientHeight = 232
ClientWidth = 322
OnShow = ResetBtnClick
LCLVersion = '0.9.30'
object Label1: TLabel
Left = 8
Height = 16
Top = 16
Width = 118
Caption = 'Given: An F statistic = '
ParentColor = False
end
object FEdit: TEdit
Left = 128
Height = 23
Top = 8
Width = 70
TabOrder = 0
Text = 'FEdit'
end
object Label2: TLabel
Left = 8
Height = 16
Top = 50
Width = 118
Caption = 'with Deg. Freedom of '
ParentColor = False
end
object DF1Edit: TEdit
Left = 129
Height = 23
Top = 41
Width = 68
TabOrder = 1
Text = 'DF1Edit'
end
object Label3: TLabel
Left = 208
Height = 16
Top = 48
Width = 24
Caption = 'and '
ParentColor = False
end
object DF2Edit: TEdit
Left = 240
Height = 23
Top = 39
Width = 64
TabOrder = 2
Text = 'DF2Edit'
end
object Label4: TLabel
Left = 7
Height = 16
Top = 82
Width = 206
Caption = 'then the probability of a larger value = '
ParentColor = False
end
object ProbEdit: TEdit
Left = 239
Height = 23
Top = 75
Width = 64
TabOrder = 3
Text = 'ProbEdit'
end
object CancelBtn: TButton
Left = 7
Height = 33
Top = 120
Width = 82
Cancel = True
Caption = 'Cancel'
ModalResult = 2
TabOrder = 4
end
object ResetBtn: TButton
Left = 112
Height = 33
Top = 120
Width = 82
Caption = 'Reset'
OnClick = ResetBtnClick
TabOrder = 5
end
object ComputeBtn: TButton
Left = 221
Height = 33
Top = 120
Width = 82
Caption = 'Compute'
OnClick = ComputeBtnClick
TabOrder = 6
end
object ReturnBtn: TButton
Left = 112
Height = 33
Top = 176
Width = 77
Caption = 'Return'
ModalResult = 1
TabOrder = 7
end
end

View File

@ -0,0 +1,29 @@
{ This is an automatically generated lazarus resource file }
LazarusResources.Add('TFForm','FORMDATA',[
'TPF0'#6'TFForm'#5'FForm'#4'Left'#3' '#1#6'Height'#3#232#0#3'Top'#3#161#0#5'W'
+'idth'#3'B'#1#7'Caption'#6#31'Probability of a larger F value'#12'ClientHeig'
+'ht'#3#232#0#11'ClientWidth'#3'B'#1#6'OnShow'#7#13'ResetBtnClick'#10'LCLVers'
+'ion'#6#6'0.9.30'#0#6'TLabel'#6'Label1'#4'Left'#2#8#6'Height'#2#16#3'Top'#2
+#16#5'Width'#2'v'#7'Caption'#6#24'Given: An F statistic = '#11'ParentColor'#8
+#0#0#5'TEdit'#5'FEdit'#4'Left'#3#128#0#6'Height'#2#23#3'Top'#2#8#5'Width'#2
+'F'#8'TabOrder'#2#0#4'Text'#6#5'FEdit'#0#0#6'TLabel'#6'Label2'#4'Left'#2#8#6
+'Height'#2#16#3'Top'#2'2'#5'Width'#2'v'#7'Caption'#6#21'with Deg. Freedom of'
+' '#11'ParentColor'#8#0#0#5'TEdit'#7'DF1Edit'#4'Left'#3#129#0#6'Height'#2#23
+#3'Top'#2')'#5'Width'#2'D'#8'TabOrder'#2#1#4'Text'#6#7'DF1Edit'#0#0#6'TLabel'
+#6'Label3'#4'Left'#3#208#0#6'Height'#2#16#3'Top'#2'0'#5'Width'#2#24#7'Captio'
+'n'#6#4'and '#11'ParentColor'#8#0#0#5'TEdit'#7'DF2Edit'#4'Left'#3#240#0#6'He'
+'ight'#2#23#3'Top'#2''''#5'Width'#2'@'#8'TabOrder'#2#2#4'Text'#6#7'DF2Edit'#0
+#0#6'TLabel'#6'Label4'#4'Left'#2#7#6'Height'#2#16#3'Top'#2'R'#5'Width'#3#206
+#0#7'Caption'#6')then the probability of a larger value = '#11'ParentColor'#8
+#0#0#5'TEdit'#8'ProbEdit'#4'Left'#3#239#0#6'Height'#2#23#3'Top'#2'K'#5'Width'
+#2'@'#8'TabOrder'#2#3#4'Text'#6#8'ProbEdit'#0#0#7'TButton'#9'CancelBtn'#4'Le'
+'ft'#2#7#6'Height'#2'!'#3'Top'#2'x'#5'Width'#2'R'#6'Cancel'#9#7'Caption'#6#6
+'Cancel'#11'ModalResult'#2#2#8'TabOrder'#2#4#0#0#7'TButton'#8'ResetBtn'#4'Le'
+'ft'#2'p'#6'Height'#2'!'#3'Top'#2'x'#5'Width'#2'R'#7'Caption'#6#5'Reset'#7'O'
+'nClick'#7#13'ResetBtnClick'#8'TabOrder'#2#5#0#0#7'TButton'#10'ComputeBtn'#4
+'Left'#3#221#0#6'Height'#2'!'#3'Top'#2'x'#5'Width'#2'R'#7'Caption'#6#7'Compu'
+'te'#7'OnClick'#7#15'ComputeBtnClick'#8'TabOrder'#2#6#0#0#7'TButton'#9'Retur'
+'nBtn'#4'Left'#2'p'#6'Height'#2'!'#3'Top'#3#176#0#5'Width'#2'M'#7'Caption'#6
+#6'Return'#11'ModalResult'#2#1#8'TabOrder'#2#7#0#0#0
]);

View File

@ -0,0 +1,68 @@
unit FProbUnit;
{$mode objfpc}{$H+}
interface
uses
Classes, SysUtils, FileUtil, LResources, Forms, Controls, Graphics, Dialogs,
StdCtrls, functionslib;
type
{ TFForm }
TFForm = class(TForm)
CancelBtn: TButton;
ComputeBtn: TButton;
DF1Edit: TEdit;
DF2Edit: TEdit;
ProbEdit: TEdit;
FEdit: TEdit;
Label1: TLabel;
Label2: TLabel;
Label3: TLabel;
Label4: TLabel;
ResetBtn: TButton;
ReturnBtn: TButton;
procedure ComputeBtnClick(Sender: TObject);
procedure ResetBtnClick(Sender: TObject);
private
{ private declarations }
public
{ public declarations }
end;
var
FForm: TFForm;
implementation
{ TFForm }
procedure TFForm.ResetBtnClick(Sender: TObject);
begin
FEdit.Text := '';
DF1Edit.Text := '';
DF2Edit.Text := '';
ProbEdit.Text := '';
end;
procedure TFForm.ComputeBtnClick(Sender: TObject);
VAR
F, df1, df2, prob : extended;
outvalue : string;
begin
F := StrToFloat(FEdit.Text);
df1 := StrToFloat(DF1Edit.Text);
df2 := StrToFloat(DF2Edit.Text);
prob := probf(F,df1,df2);
outvalue := format('%6.4f',[prob]);
ProbEdit.Text := outvalue;
end;
initialization
{$I fprobunit.lrs}
end.

View File

@ -0,0 +1,143 @@
object FreqSpecsFrm: TFreqSpecsFrm
Left = 281
Height = 358
Top = 107
Width = 300
Caption = 'Frequency Specifications'
ClientHeight = 358
ClientWidth = 300
LCLVersion = '0.9.30'
object Label1: TLabel
Left = 11
Height = 16
Top = 119
Width = 56
Caption = 'VARIABLE:'
ParentColor = False
end
object Label2: TLabel
Left = 11
Height = 16
Top = 151
Width = 46
Caption = 'MINIUM'
ParentColor = False
end
object Label3: TLabel
Left = 11
Height = 16
Top = 183
Width = 60
Caption = 'MAXIMUM'
ParentColor = False
end
object Label4: TLabel
Left = 11
Height = 16
Top = 215
Width = 39
Caption = 'RANGE'
ParentColor = False
end
object Label5: TLabel
Left = 11
Height = 16
Top = 247
Width = 79
Caption = 'INTERVAL SIZE'
ParentColor = False
end
object Label6: TLabel
Left = 11
Height = 16
Top = 279
Width = 84
Caption = 'NO. INTERVALS'
ParentColor = False
end
object VarName: TEdit
Left = 112
Height = 23
Top = 112
Width = 169
TabOrder = 0
end
object Minimum: TEdit
Left = 112
Height = 23
Top = 144
Width = 169
TabOrder = 1
end
object Maximum: TEdit
Left = 112
Height = 23
Top = 176
Width = 169
TabOrder = 2
end
object Range: TEdit
Left = 112
Height = 23
Top = 208
Width = 169
TabOrder = 3
end
object IntSize: TEdit
Left = 112
Height = 23
Top = 240
Width = 169
OnKeyPress = IntSizeKeyPress
TabOrder = 4
end
object NoInts: TEdit
Left = 112
Height = 23
Top = 272
Width = 169
TabOrder = 5
end
object CancelBtn: TButton
Left = 104
Height = 32
Top = 311
Width = 81
Caption = 'Cancel'
ModalResult = 2
TabOrder = 6
end
object OKBtn: TButton
Left = 200
Height = 31
Top = 311
Width = 81
Caption = 'OK'
ModalResult = 1
TabOrder = 7
end
object HelpBtn: TButton
Tag = 123
Left = 11
Height = 32
Top = 311
Width = 82
Caption = 'Help'
OnClick = HelpBtnClick
TabOrder = 8
end
object Memo1: TMemo
Left = 7
Height = 87
Top = 1
Width = 277
Lines.Strings = (
'The number of intervals must be less than or '
'equal to the number of cases. To change the'
'number of intervals, change the interval size'
'to a larger value. Press the Enter key to make'
'the number of intervals smaller.'
)
TabOrder = 9
end
end