Files
lazarus-ccr/applications/lazstats/source_orig/moveavgunit.pas

130 lines
2.8 KiB
ObjectPascal
Raw Normal View History

unit MoveAvgUnit;
{$mode objfpc}{$H+}
interface
uses
Classes, SysUtils, FileUtil, LResources, Forms, Controls, Graphics, Dialogs,
StdCtrls, contexthelpunit;
type
{ TMoveAvgFrm }
TMoveAvgFrm = class(TForm)
HelpBtn: TButton;
ResetBtn: TButton;
CancelBtn: TButton;
ApplyBtn: TButton;
OKBtn: TButton;
ThetaList: TListBox;
ThetaEdit: TEdit;
Label2: TLabel;
OrderEdit: TEdit;
Label1: TLabel;
procedure ApplyBtnClick(Sender: TObject);
procedure FormShow(Sender: TObject);
procedure HelpBtnClick(Sender: TObject);
procedure OrderEditKeyPress(Sender: TObject; var Key: char);
procedure ResetBtnClick(Sender: TObject);
procedure ThetaEditKeyPress(Sender: TObject; var Key: char);
procedure ThetaListClick(Sender: TObject);
private
{ private declarations }
public
{ public declarations }
W : array[0..20] of double;
order : integer;
currentindex : integer;
end;
var
MoveAvgFrm: TMoveAvgFrm;
implementation
{ TMoveAvgFrm }
procedure TMoveAvgFrm.ResetBtnClick(Sender: TObject);
VAR i : integer;
begin
OrderEdit.Text := '';
ThetaEdit.Text := '';
ThetaList.Clear;
currentindex := 0;
for i := 0 to 20 do W[i] := 1.0;
end;
procedure TMoveAvgFrm.ThetaEditKeyPress(Sender: TObject; var Key: char);
var cellstring : string;
begin
if currentindex < 1 then exit;
if ord(Key) <> 13 then exit;
cellstring := 'Theta(' + IntToStr(currentindex + 1) + ') = ';
cellstring := cellstring + ThetaEdit.Text;
W[currentindex + 1] := StrToFloat(ThetaEdit.Text);
end;
procedure TMoveAvgFrm.ThetaListClick(Sender: TObject);
VAR index : integer;
begin
index := ThetaList.ItemIndex;
if index < 0 then exit;
currentindex := index;
ThetaEdit.Text := '1.0';
ThetaEdit.SetFocus;
end;
procedure TMoveAvgFrm.FormShow(Sender: TObject);
begin
ResetBtnClick(self);
end;
procedure TMoveAvgFrm.HelpBtnClick(Sender: TObject);
begin
ContextHelpForm.HelpMessage((Sender as TButton).tag);
end;
procedure TMoveAvgFrm.ApplyBtnClick(Sender: TObject);
var
sum : double;
i : integer;
cellstring : string;
begin
ThetaList.Clear;
sum := W[0];
for i := 1 to order do sum := sum + (2.0 * W[i]);
for i := 0 to order do
begin
W[i] := W[i] / sum;
cellstring := 'Theta(' + IntToStr(i+1) + ') = ';
cellstring := cellstring + FloatToStr(W[i]);
ThetaList.Items.Add(cellstring);
end;
end;
procedure TMoveAvgFrm.OrderEditKeyPress(Sender: TObject; var Key: char);
VAR cellstring : string;
i : integer;
begin
if ord(Key) <> 13 then exit;
ThetaList.Clear;
order := StrToInt(OrderEdit.Text);
for i := 1 to order do
begin
cellstring := 'Theta(' + IntToStr(i) + ')';
ThetaList.Items.Add(cellstring);
end;
end;
initialization
{$I moveavgunit.lrs}
end.