📄 fincalu.pas
字号:
(* ***** BEGIN LICENSE BLOCK *****
* Version: MPL 1.1
*
* The contents of this file are subject to the Mozilla Public License Version
* 1.1 (the "License"); you may not use this file except in compliance with
* the License. You may obtain a copy of the License at
* http://www.mozilla.org/MPL/
*
* Software distributed under the License is distributed on an "AS IS" basis,
* WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
* for the specific language governing rights and limitations under the
* License.
*
* The Original Code is TurboPower SysTools
*
* The Initial Developer of the Original Code is
* TurboPower Software
*
* Portions created by the Initial Developer are Copyright (C) 1996-2002
* the Initial Developer. All Rights Reserved.
*
* Contributor(s):
*
* ***** END LICENSE BLOCK ***** *)
unit Fincalu;
interface
uses
Windows, Messages, SysUtils, Controls, Classes, Forms, StdCtrls, Buttons,
ExtCtrls, Grids, Graphics,
StFin, StDate, StDateSt;
type
TFinCalForm = class(TForm)
Functions: TRadioGroup;
GroupBox1: TGroupBox;
Label2: TLabel;
Label4: TLabel;
Label5: TLabel;
Label6: TLabel;
Label7: TLabel;
Label3: TLabel;
Label1: TLabel;
Label20: TLabel;
Arrays: TGroupBox;
Label8: TLabel;
Label9: TLabel;
StrEdit: TEdit;
Panel1: TPanel;
GoBtn: TButton;
SResult: TEdit;
BitBtn1: TBitBtn;
E1Edit: TEdit;
E2Edit: TEdit;
E3Edit: TEdit;
E4Edit: TEdit;
I1Edit: TEdit;
I2Edit: TEdit;
I3Edit: TEdit;
I4Edit: TEdit;
FResult: TEdit;
VAEdit: TStringGrid;
DAEdit: TStringGrid;
D1Edit: TEdit;
D2Edit: TEdit;
D3Edit: TEdit;
D4Edit: TEdit;
Label10: TLabel;
FreqEdit: TComboBox;
BasEdit: TComboBox;
TimEdit: TComboBox;
E5Edit: TEdit;
I5Edit: TEdit;
D5Edit: TEdit;
Label13: TLabel;
BoolEdit: TCheckBox;
procedure SetupAccruedInterestPeriodic;
procedure SetupAccruedInterestMaturity;
procedure SetupCumulativeInterest;
procedure SetupCumulativePrincipal;
procedure SetupDiscountRate;
procedure SetupEffectiveInterestRate;
procedure SetupNominalInterestRate;
procedure SetupInterestRate;
procedure SetupReceivedAtMaturity;
procedure SetupYieldPeriodic;
procedure SetupYieldDiscounted;
procedure SetupYieldMaturity;
procedure SetupTBillEquivYield;
procedure SetupTBillPrice;
procedure SetupTBillYield;
procedure SetupBondDuration;
procedure SetupModifiedDuration;
procedure SetupFutureValueSCHEDULE;
procedure SetupModifiedIRR;
procedure SetupNonperiodicIRR;
procedure SetupNonperiodicNPV;
procedure SetupDecliningBalance;
procedure SetupVariableDecliningBalance;
procedure SetupDollarToDecimal;
procedure SetupDollarToFraction;
procedure SetupDollarToDecimalText;
procedure SetupDollarToFractionStr;
procedure SetupRoundToDecimal;
procedure SetupIsCardValid;
procedure SetupNetPresentValue;
procedure SetupFutureValue;
procedure SetupPresentValue;
procedure SetupBondPrice;
procedure SetupPayment;
procedure SetupInternalRateOfReturn;
procedure ExtEditExit(Sender: TObject);
procedure IntEditExit(Sender: TObject);
procedure DisableFields;
procedure FunctionsClick(Sender: TObject);
procedure FormCreate(Sender: TObject);
procedure GoBtnClick(Sender: TObject);
procedure FT(F : TWinControl; T: Integer; S: string);
procedure DateEditExit(Sender: TObject);
procedure VAEditExit(Sender: TObject);
procedure DAEditExit(Sender: TObject);
procedure FreqEditExit(Sender: TObject);
procedure BasEditExit(Sender: TObject);
procedure TimEditExit(Sender: TObject);
procedure StrEditExit(Sender: TObject);
procedure VAEditEnter(Sender: TObject);
procedure DAEditEnter(Sender: TObject);
procedure BoolEditExit(Sender: TObject);
procedure BitBtn1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
FinCalForm: TFinCalForm;
implementation
{$R *.DFM}
var
ExtVar : array[1..5] of Extended;
IntVar : array[1..5] of Integer;
DateVar : array[1..5] of TStDate;
FreqVar : TStFrequency;
BasVar : TStBasis;
TimVar : TStPaymentTime;
StrVar : String;
BoolVar : Boolean;
DateArray : array[0..29] of TStDate;
ValArray : array[0..29] of Double;
{------ Function parameters ------}
procedure TFinCalForm.FT(F : TWinControl; T: Integer; S: string);
begin
F.Enabled := true;
TEdit(F).Color := clYellow;
F.TabOrder := T;
F.Hint := S;
F.ShowHint := true;
end;
procedure TFinCalForm.SetupAccruedInterestPeriodic;
begin
FT(D1Edit, 1, 'Issue');
FT(D2Edit, 2, 'Settlement');
FT(D3Edit, 3, 'Maturity');
FT(E1Edit, 4, 'Rate');
FT(E2Edit, 5, 'Par');
FT(FreqEdit, 6, 'Frequency');
FT(BasEdit, 7, 'Basis');
end;
procedure TFinCalForm.SetupAccruedInterestMaturity;
begin
FT(D1Edit, 1, 'Issue');
FT(D2Edit, 2, 'Maturity');
FT(E1Edit, 3, 'Rate');
FT(E2Edit, 4, 'Par');
FT(BasEdit, 5, 'Basis');
end;
procedure TFinCalForm.SetupCumulativeInterest;
begin
FT(E1Edit, 1, 'Rate');
FT(I1Edit, 2, 'NPeriods');
FT(E2Edit, 3, 'Present Value');
FT(I2Edit, 4, 'Start Period');
FT(I3Edit, 5, 'End Period');
FT(FreqEdit, 6, 'Frequency');
FT(TimEdit, 7, 'Timing');
end;
procedure TFinCalForm.SetupCumulativePrincipal;
begin
SetupCumulativeInterest;
end;
procedure TFinCalForm.SetupDiscountRate;
begin
FT(D1Edit, 1, 'Settlement');
FT(D2Edit, 2, 'Maturity');
FT(E1Edit, 3, 'Price');
FT(E2Edit, 4, 'Redemption');
FT(BasEdit, 5, 'Basis');
end;
procedure TFinCalForm.SetupEffectiveInterestRate;
begin
FT(E1Edit, 1, 'Nominal Rate');
FT(FreqEdit, 2, 'Frequency');
end;
procedure TFinCalForm.SetupNominalInterestRate;
begin
FT(E1Edit, 1, 'Effective Rate');
FT(FreqEdit, 2, 'Frequency');
end;
procedure TFinCalForm.SetupInterestRate;
begin
FT(I1Edit, 1, 'NPeriods');
FT(E1Edit, 2, 'Payment');
FT(E2Edit, 3, 'Present Value');
FT(E3Edit, 4, 'Future Value');
FT(FreqEdit, 5, 'Frequency');
FT(TimEdit, 6, 'Timing');
FT(E4Edit, 7, 'Guess');
end;
procedure TFinCalForm.SetupReceivedAtMaturity;
begin
FT(D1Edit, 1, 'Settlement');
FT(D2Edit, 2, 'Maturity');
FT(E1Edit, 3, 'Investment');
FT(E2Edit, 4, 'Discount');
FT(BasEdit, 5, 'Basis');
end;
procedure TFinCalForm.SetupYieldPeriodic;
begin
FT(D1Edit, 1, 'Settlement');
FT(D2Edit, 2, 'Maturity');
FT(E1Edit, 3, 'Rate');
FT(E2Edit, 4, 'Price');
FT(E3Edit, 5, 'Redemption');
FT(FreqEdit, 6, 'Frequency');
FT(BasEdit, 7, 'Basis');
end;
procedure TFinCalForm.SetupYieldDiscounted;
begin
FT(D1Edit, 1, 'Settlement');
FT(D2Edit, 2, 'Maturity');
FT(E1Edit, 3, 'Price');
FT(E2Edit, 4, 'Redemption');
FT(BasEdit, 5, 'Basis');
end;
procedure TFinCalForm.SetupYieldMaturity;
begin
FT(D1Edit, 1, 'Issue');
FT(D2Edit, 2, 'Settlement');
FT(D3Edit, 3, 'Maturity');
FT(E1Edit, 4, 'Rate');
FT(E2Edit, 5, 'Price');
FT(BasEdit, 6, 'Basis');
end;
procedure TFinCalForm.SetupTBillEquivYield;
begin
FT(D1Edit, 1, 'Settlement');
FT(D2Edit, 2, 'Maturity');
FT(E1Edit, 3, 'Discount');
end;
procedure TFinCalForm.SetupTBillPrice;
begin
SetupTBillEquivYield;
end;
procedure TFinCalForm.SetupTBillYield;
begin
FT(D1Edit, 1, 'Settlement');
FT(D2Edit, 2, 'Maturity');
FT(E1Edit, 3, 'Price');
end;
procedure TFinCalForm.SetupBondDuration;
begin
FT(D1Edit, 1, 'Settlement');
FT(D2Edit, 2, 'Maturity');
FT(E1Edit, 3, 'Rate');
FT(E2Edit, 4, 'Yield');
FT(FreqEdit, 5, 'Frequency');
FT(BasEdit, 6, 'Basis');
end;
procedure TFinCalForm.SetupModifiedDuration;
begin
SetupBondDuration;
end;
procedure TFinCalForm.SetupFutureValueSCHEDULE;
begin
FT(E1Edit, 1, 'Principal');
FT(VAEdit, 2, 'Schedule');
FT(I1Edit, 3, 'NRates');
end;
procedure TFinCalForm.SetupModifiedIRR;
begin
FT(VAEdit, 1, 'Values');
FT(I1Edit, 2, 'NValues');
FT(E1Edit, 3, 'Finance Rate');
FT(E2Edit, 4, 'Reinvest Rate');
end;
procedure TFinCalForm.SetupNonperiodicIRR;
begin
FT(I1Edit, 1, 'NValues');
FT(VAEdit, 2, 'Values');
FT(DAEdit, 3, 'Dates');
FT(E1Edit, 4, 'Guess');
end;
procedure TFinCalForm.SetupNonperiodicNPV;
begin
FT(I1Edit, 1, 'NValues');
FT(E1Edit, 2, 'Rate');
FT(VAEdit, 3, 'Values');
FT(DAEdit, 4, 'Dates');
end;
procedure TFinCalForm.SetupDecliningBalance;
begin
FT(E1Edit, 1, 'Cost');
FT(E2Edit, 2, 'Salvage');
FT(I1Edit, 3, 'Life');
FT(I2Edit, 4, 'Period');
FT(I3Edit, 5, 'Month');
end;
procedure TFinCalForm.SetupVariableDecliningBalance;
begin
FT(E1Edit, 1, 'Cost');
FT(E2Edit, 2, 'Salvage');
FT(I1Edit, 3, 'Life');
FT(E3Edit, 4, 'Start');
FT(E4Edit, 5, 'End');
FT(E5Edit, 6, 'Factor');
FT(BoolEdit, 7, 'No Switch');
end;
procedure TFinCalForm.SetupDollarToDecimal;
begin
FT(E1Edit, 1, 'Fractional Dollar');
FT(I1Edit, 2, 'Fraction');
end;
procedure TFinCalForm.SetupDollarToFraction;
begin
FT(E1Edit, 1, 'Decimal Dollar');
FT(I1Edit, 2, 'Fraction');
end;
procedure TFinCalForm.SetupDollarToDecimalText;
begin
FT(E1Edit, 1, 'Decimal Dollar');
end;
procedure TFinCalForm.SetupDollarToFractionStr;
begin
FT(E1Edit, 1, 'Fractional Dollar');
FT(I1Edit, 2, 'Fraction');
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -