home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Chip 1997 April
/
Chip_1997-04_cd.bin
/
prezent
/
cb
/
data.z
/
DM.CPP
< prev
next >
Wrap
C/C++ Source or Header
|
1997-01-16
|
5KB
|
135 lines
//----------------------------------------------------------------------------
//Borland C++ Builder
//Copyright (c) 1987 Borland International Inc. All Rights Reserved.
//----------------------------------------------------------------------------
//---------------------------------------------------------------------------
#include <vcl.h>
#pragma hdrstop
#include "DM.h"
#include "CtrlForm.h"
//---------------------------------------------------------------------------
#pragma resource "*.dfm"
TDM1 *DM1;
//---------------------------------------------------------------------------
__fastcall TDM1::TDM1(TComponent* Owner)
: TDataModule(Owner)
{
}
//---------------------------------------------------------------------------
void __fastcall TDM1::tblHoldingsAfterOpen(TDataSet *DataSet)
{
dsMaster->OnDataChange = CalculateTotals;
}
//---------------------------------------------------------------------
void __fastcall TDM1::tblHoldingsAfterPost(TDataSet *DataSet)
{
// TBookmark bmCurrent;
// bmCurrent = tblHoldings->getBookmark(); { save position }
// try
// {
CalculateTotals(0, 0); /* recalc totals */
// tblHoldings->gotoBookmark(bmCurrent); { restore position }
// }
// finally;
// {
// tblHoldings->freeBookmark(bmCurrent); { free memory }
// }
}
//---------------------------------------------------------------------
void __fastcall TDM1::tblHoldingsCalcFields(TDataSet *DataSet)
{
tblHoldingsPUR_COST->AsFloat =
tblHoldingsPUR_PRICE->AsFloat * tblHoldingsSHARES->AsFloat;
}
//---------------------------------------------------------------------
#pragma warn -aus
void __fastcall TDM1::CalculateTotals(TObject * Sender, TField * Field)
{
float flTotalCost = 0; /* Holds total share cost */
float flTotalShares = 0; /* Holds total share count */
float flTotalValue = 0; /* Holds total share value */
float flDifference = 0; /* Holds difference between cost and value */
AnsiString strFormatSpec; /* The Display Format specification */
/* Update the count of stock transactions */
FmCtrlGrid->lPurchase->Caption = IntToStr( tblHoldings->RecordCount );
/* See whether or not its necessary to total the holdings and
(if so) do so and update the result displays; otherwise,
clear the result displays. */
if (tblHoldings->RecordCount == 0)
{
/* Clear the result displays */
FmCtrlGrid->lTotalCost->Caption = "";
FmCtrlGrid->lTotalShares->Caption = "";
FmCtrlGrid->lDifference->Caption = "";
}
else
{
/* let the user know something's going on */
// Screen->Cursor = crHourglass;
/* Initialize the holder variables */
/*
flTotalCost = 0.0;
flTotalShares = 0.0;
flTotalValue = 0.0;
flDifference = 0.0;
*/
/* Calculate the total cost of these holdings. */
tblHoldings->DisableControls(); /* hide this process from the user */
tblHoldings->First();
while (!tblHoldings->Eof)
{
flTotalCost = flTotalCost + tblHoldingsPUR_COST->AsFloat;
flTotalShares = flTotalShares + tblHoldingsSHARES->AsFloat;
tblHoldings->Next();
};
tblHoldings->First();
tblHoldings->EnableControls(); /* restore the display of holdings */
/* Calculate the current value of the shares (by multiplying
the current holdings by the current share price) and the
difference between the cost and the value. */
flTotalValue = flTotalShares * tblMasterCUR_PRICE->AsFloat;
flDifference = flTotalValue - flTotalCost;
/* Use the same format specification as that being used to
display the Current Price field value so it can be used
to display the results */
strFormatSpec = tblMasterCUR_PRICE->DisplayFormat;
/* Update the result displays */
FmCtrlGrid->lTotalCost->Caption =
FormatFloat( strFormatSpec, flTotalCost );
FmCtrlGrid->lTotalShares->Caption =
FormatFloat( strFormatSpec, flTotalValue );
FmCtrlGrid->lDifference->Caption =
FormatFloat( strFormatSpec, flDifference );
/* Update the Font Color of the Diference to
indicate the quality of the investment */
if (flDifference > 0)
{
FmCtrlGrid->lDifference->Font->Color = clGreen;
}
else
{
FmCtrlGrid->lDifference->Font->Color = clRed;
}
FmCtrlGrid->lDifference->Update();
/* let the user know that we're finished */
// Screen->Cursor = crDefault;
}
}
#pragma warn .aus
//---------------------------------------------------------------------