📄 fincalu.pas
字号:
end;
procedure TFinCalForm.SetupRoundToDecimal;
begin
FT(E1Edit, 1, 'Value');
FT(I1Edit, 2, 'Places');
FT(BoolEdit, 3, 'Bankers');
end;
procedure TFinCalForm.SetupIsCardValid;
begin
FT(StrEdit, 1, 'Card Number');
end;
procedure TFinCalForm.SetupNetPresentValue;
begin
FT(E1Edit, 1, 'Rate');
FT(I1Edit, 2, 'NValues');
FT(VAEdit, 3, 'Values');
end;
procedure TFinCalForm.SetupFutureValue;
begin
FT(E1Edit, 1, 'Rate');
FT(I1Edit, 2, 'NPeriods');
FT(E2Edit, 3, 'Payment');
FT(E3Edit, 4, 'Present Value');
FT(FreqEdit, 5, 'Frequency');
FT(TimEdit, 6, 'Timing');
end;
procedure TFinCalForm.SetupPresentValue;
begin
FT(E1Edit, 1, 'Rate');
FT(I1Edit, 2, 'NPeriods');
FT(E2Edit, 3, 'Payment');
FT(E3Edit, 4, 'Future Value');
FT(FreqEdit, 5, 'Frequency');
FT(TimEdit, 6, 'Timing');
end;
procedure TFinCalForm.SetupBondPrice;
begin
FT(D1Edit, 1, 'Settlement');
FT(D2Edit, 2, 'Maturity');
FT(E1Edit, 3, 'Rate');
FT(E2Edit, 4, 'Yield');
FT(E3Edit, 5, 'Redemption');
FT(FreqEdit, 6, 'Frequency');
FT(BasEdit, 7, 'Basis');
end;
procedure TFinCalForm.SetupPayment;
begin
FT(E1Edit, 1, 'Rate');
FT(I1Edit, 2, 'NPeriods');
FT(E2Edit, 3, 'Present Value');
FT(E3Edit, 4, 'Future Value');
FT(FreqEdit, 5, 'Frequency');
FT(TimEdit, 6, 'Timing');
end;
procedure TFinCalForm.SetupInternalRateOfReturn;
begin
FT(I1Edit, 1, 'NValues');
FT(VAEdit, 2, 'Values');
FT(E1Edit, 3, 'Guess');
end;
{------- Function selection -------}
procedure TFinCalForm.GoBtnClick(Sender: TObject);
var
FR : Extended;
SR : String;
begin
FR := 0;
SR := '';
case Functions.ItemIndex of
0 : FR := AccruedInterestMaturity(DateVar[1], DateVar[2], ExtVar[1],
ExtVar[2], BasVar);
1 : FR := AccruedInterestPeriodic(DateVar[1], DateVar[2], DateVar[3],
ExtVar[1], ExtVar[2], FreqVar, BasVar);
2 : FR := BondDuration(DateVar[1], DateVar[2], ExtVar[1], ExtVar[2],
FreqVar, BasVar);
3 : FR := BondPrice(DateVar[1], DateVar[2], ExtVar[1], ExtVar[2],
ExtVar[3], FreqVar, BasVar);
4 : FR := CumulativeInterest(ExtVar[1], IntVar[1], ExtVar[2], IntVar[2],
IntVar[3], FreqVar, TimVar);
5 : FR := CumulativePrincipal(ExtVar[1], IntVar[1], ExtVar[2], IntVar[2],
IntVar[3], FreqVar, TimVar);
6 : FR := DecliningBalance(ExtVar[1], ExtVar[2], IntVar[1], IntVar[2],
IntVar[3]);
7 : FR := DiscountRate(DateVar[1], DateVar[2], ExtVar[1], ExtVar[2],
BasVar);
8 : FR := DollarToDecimal(ExtVar[1], IntVar[1]);
9 : SR := DollarToDecimalText(ExtVar[1]);
10 : FR := DollarToFraction(ExtVar[1], IntVar[1]);
11 : SR := DollarToFractionStr(ExtVar[1], IntVar[1]);
12 : FR := EffectiveInterestRate(ExtVar[1], FreqVar);
13 : FR := FutureValue(ExtVar[1], IntVar[1], ExtVar[2], ExtVar[3],
FreqVar, TimVar);
14 : FR := FutureValueSchedule16(ExtVar[1], ValArray, IntVar[1]);
15 : FR := InterestRate(IntVar[1], ExtVar[1], ExtVar[2], ExtVar[3],
FreqVar, TimVar, ExtVar[4]);
16 : FR := InternalRateOfReturn16(ValArray, IntVar[1], ExtVar[1]);
17 : if IsCardValid(StrVar) then
SR := 'Valid card number'
else
SR := 'Invalid card number';
18 : FR := ModifiedDuration(DateVar[1], DateVar[2], ExtVar[1],
ExtVar[2], FreqVar, BasVar);
19 : FR := ModifiedIRR16(ValArray, IntVar[1], ExtVar[1], ExtVar[2]);
20 : FR := NetPresentValue16(ExtVar[1], ValArray, IntVar[1]);
21 : FR := NominalInterestRate(ExtVar[1], FreqVar);
22 : FR := NonPeriodicIRR16(ValArray, DateArray, IntVar[1], ExtVar[1]);
23 : FR := NonPeriodicNPV16(ExtVar[1], ValArray, DateArray, IntVar[1]);
24 : FR := Payment(ExtVar[1], IntVar[1], ExtVar[2], ExtVar[3],
FreqVar, TimVar);
25 : FR := PresentValue(ExtVar[1], IntVar[1], ExtVar[2], ExtVar[3],
FreqVar, TimVar);
26 : FR := ReceivedAtMaturity(DateVar[1], DateVar[2], ExtVar[1],
ExtVar[2], BasVar);
27 : FR := RoundToDecimal(ExtVar[1], IntVar[1], BoolVar);
28 : FR := TBillEquivYield(DateVar[1], DateVar[2], ExtVar[1]);
29 : FR := TBillPrice(DateVar[1], DateVar[2], ExtVar[1]);
30 : FR := TBillYield(DateVar[1], DateVar[2], ExtVar[1]);
31 : FR := VariableDecliningBalance(ExtVar[1], ExtVar[2], IntVar[1],
ExtVar[3], ExtVar[4], ExtVar[5], BoolVar);
32 : FR := YieldPeriodic(DateVar[1], DateVar[2], ExtVar[1], ExtVar[2],
ExtVar[3], FreqVar, BasVar);
33 : FR := YieldDiscounted(DateVar[1], DateVar[2], ExtVar[1],
ExtVar[2], BasVar);
34 : FR := YieldMaturity(DateVar[1], DateVar[2], DateVar[3], ExtVar[1],
ExtVar[2], BasVar);
end;
FResult.Text := FloatToStr(FR);
SResult.Text := SR;
end;
procedure TFinCalForm.FunctionsClick(Sender: TObject);
begin
DisableFields;
case Functions.ItemIndex of
0 : SetupAccruedInterestMaturity;
1 : SetupAccruedInterestPeriodic;
2 : SetupBondDuration;
3 : SetupBondPrice;
4 : SetupCumulativeInterest;
5 : SetupCumulativePrincipal;
6 : SetupDecliningBalance;
7 : SetupDiscountRate;
8 : SetupDollarToDecimal;
9 : SetupDollarToDecimalText;
10 : SetupDollarToFraction;
11 : SetupDollarToFractionStr;
12 : SetupEffectiveInterestRate;
13 : SetupFutureValue;
14 : SetupFutureValueSchedule;
15 : SetupInterestRate;
16 : SetupInternalRateOfReturn;
17 : SetupIsCardValid;
18 : SetupModifiedDuration;
19 : SetupModifiedIRR;
20 : SetupNetPresentValue;
21 : SetupNominalInterestRate;
22 : SetupNonperiodicIRR;
23 : SetupNonperiodicNPV;
24 : SetupPayment;
25 : SetupPresentValue;
26 : SetupReceivedAtMaturity;
27 : SetupRoundToDecimal;
28 : SetupTBillEquivYield;
29 : SetupTBillPrice;
30 : SetupTBillYield;
31 : SetupVariableDecliningBalance;
32 : SetupYieldPeriodic;
33 : SetupYieldDiscounted;
34 : SetupYieldMaturity;
end;
end;
{------- Misc utilities and set up -------}
procedure TFinCalForm.DisableFields;
begin
E1Edit.Enabled := false;
E1Edit.Color := clwhite;
E2Edit.Enabled := false;
E2Edit.Color := clwhite;
E3Edit.Enabled := false;
E3Edit.Color := clwhite;
E4Edit.Enabled := false;
E4Edit.Color := clwhite;
E5Edit.Enabled := false;
E5Edit.Color := clwhite;
I1Edit.Enabled := false;
I1Edit.Color := clwhite;
I2Edit.Enabled := false;
I2Edit.Color := clwhite;
I3Edit.Enabled := false;
I3Edit.Color := clwhite;
I4Edit.Enabled := false;
I4Edit.Color := clwhite;
I5Edit.Enabled := false;
I5Edit.Color := clwhite;
D1Edit.Enabled := false;
D1Edit.Color := clwhite;
D2Edit.Enabled := false;
D2Edit.Color := clwhite;
D3Edit.Enabled := false;
D3Edit.Color := clwhite;
D4Edit.Enabled := false;
D4Edit.Color := clwhite;
D5Edit.Enabled := false;
D5Edit.Color := clwhite;
DAEdit.Enabled := false;
DAEdit.Color := clwhite;
VAEdit.Enabled := false;
VAEdit.Color := clwhite;
StrEdit.Enabled := false;
StrEdit.Color := clwhite;
TimEdit.Enabled := False;
TimEdit.Color := clWhite;
BasEdit.Enabled := False;
BasEdit.Color := clWhite;
FreqEdit.Enabled := False;
FreqEdit.Color := clWhite;
BoolEdit.Enabled := false;
BoolEdit.Color := clWhite;
end;
procedure TFinCalForm.ExtEditExit(Sender: TObject);
begin
with (Sender as TEdit) do
ExtVar[Tag] := StrToFloat(Text);
end;
procedure TFinCalForm.IntEditExit(Sender: TObject);
begin
with (Sender as TEdit) do
IntVar[Tag] := StrToInt(Text);
end;
procedure TFinCalForm.DateEditExit(Sender: TObject);
begin
with (Sender as TEdit) do
DateVar[Tag] := DateStringToStDate('mm/dd/yy', Text, 1920);
end;
procedure TFinCalForm.StrEditExit(Sender: TObject);
begin
StrVar := TEdit(Sender).Text;
end;
procedure TFinCalForm.DAEditEnter(Sender: TObject);
begin
DAEdit.Row := 0;
DAEdit.Col := 0;
end;
procedure TFinCalForm.DAEditExit(Sender: TObject);
var
I : Integer;
begin
for I := 0 to IntVar[1] - 1 do
DateArray[I] := DateStringToStDate('mm/dd/yy', DAEdit.Cells[0,I], 1950);
end;
procedure TFinCalForm.VAEditEnter(Sender: TObject);
begin
VAEdit.Row := 0;
VAEdit.Col := 0;
end;
procedure TFinCalForm.VAEditExit(Sender: TObject);
var
I : Integer;
begin
for I := 0 to IntVar[1] - 1 do
ValArray[I] := StrToFloat(VAEdit.Cells[0,I]);
end;
procedure TFinCalForm.FreqEditExit(Sender: TObject);
begin
case FreqEdit.ItemIndex of
0: FreqVar := fqAnnual;
1: FreqVar := fqSemiAnnual;
2: FreqVar := fqQuarterly;
3: FreqVar := fqMonthly;
end;
end;
procedure TFinCalForm.BasEditExit(Sender: TObject);
begin
case BasEdit.ItemIndex of
0: BasVar := BasisNASD;
1: BasVar := BasisActAct;
2: BasVar := BasisAct360;
3: BasVar := BasisAct365;
4: BasVar := BasisEur30360;
end;
end;
procedure TFinCalForm.TimEditExit(Sender: TObject);
begin
case TimEdit.ItemIndex of
0: TimVar := ptEndOfPeriod;
1: TimVar := ptStartOfPeriod;
end;
end;
procedure TFinCalForm.BoolEditExit(Sender: TObject);
begin
BoolVar := BoolEdit.Checked;
end;
procedure TFinCalForm.FormCreate(Sender: TObject);
var
I : Integer;
begin
for I := 1 to 5 do begin
ExtVar[I] := 0;
DateVar[I] := CurrentDate;
IntVar[I] := 0;
end;
E1Edit.Text := FloatToStr(ExtVar[1]);
E2Edit.Text := FloatToStr(ExtVar[2]);
E3Edit.Text := FloatToStr(ExtVar[3]);
E4Edit.Text := FloatToStr(ExtVar[4]);
E5Edit.Text := FloatToStr(ExtVar[5]);
I1Edit.Text := IntToStr(IntVar[1]);
I2Edit.Text := IntToStr(IntVar[2]);
I3Edit.Text := IntToStr(IntVar[3]);
I4Edit.Text := IntToStr(IntVar[4]);
I5Edit.Text := IntToStr(IntVar[5]);
D1Edit.Text := DateToStr(DateVar[1]);
D2Edit.Text := DateToStr(DateVar[2]);
D3Edit.Text := DateToStr(DateVar[3]);
D4Edit.Text := DateToStr(DateVar[4]);
D5Edit.Text := DateToStr(DateVar[5]);
DisableFields;
for I := 0 to 29 do begin
ValArray[I] := 0;
DateArray[I] := CurrentDate;
end;
TimEdit.ItemIndex := 0;
TimVar := ptEndOfPeriod;
BasEdit.ItemIndex := 0;
BasVar := BasisNASD;
FreqEdit.ItemIndex := 0;
FreqVar := fqAnnual;
BoolEdit.Checked := false;
BoolVar := false;
Application.HintPause := 250;
Application.HintColor := clAqua;
end;
procedure TFinCalForm.BitBtn1Click(Sender: TObject);
begin
Close;
end;
end.
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -