Chapter 04 - Project EuroConv |
Project Structure
| EuroConv.dpr |
program EuroConv;
uses
Forms,
EuroForm in 'EuroForm.pas' ,
EuroConvConst in 'EuroConvConst.pas';
begin
Application.Initialize;
Application.CreateForm(TForm1, Form1);
Application.Run;
end.
| EuroForm.pas |
unit EuroForm;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;
type
TForm1 = class(TForm)
Button1: TButton;
EditValue: TEdit;
EditResult: TEdit;
ListTypes: TListBox;
ListTypes2: TListBox;
Label1: TLabel;
Label2: TLabel;
procedure Button1Click(Sender: TObject);
procedure FormCreate(Sender: TObject);
private
public
end;
var
Form1: TForm1;
implementation
uses
EuroConvConst, ConvUtils, Math;
procedure TForm1.Button1Click(Sender: TObject);
var
nConverted: Double;
BaseType, DestType: TConvType;
begin
DescriptionToConvType(cbEuroCurrency,
ListTypes.Items [ListTypes.ItemIndex], BaseType);
DescriptionToConvType(cbEuroCurrency,
ListTypes2.Items [ListTypes2.ItemIndex], DestType);
nConverted := EuroConvert (StrToFloat (EditValue.Text),
BaseType, DestType, 4);
EditResult.Text := FloatToStrF (nConverted, ffNumber, 15, 4);
end;
procedure TForm1.FormCreate(Sender: TObject);
var
ATypes: TConvTypeArray;
i: Integer;
begin
GetConvTypes(cbEuroCurrency, ATypes);
for i := Low(aTypes) to High(aTypes) do
ListTypes.Items.Add (
ConvTypeToDescription (aTypes[i]));
ListTypes2.Items := ListTypes.Items;
ListTypes.ItemIndex := 0;
ListTypes2.ItemIndex := 0;
end;
end.
| EuroConvConst.pas |
unit EuroConvConst;
interface
uses
ConvUtils;
var
cbEuroCurrency: TConvFamily;
cuEUR: TConvType;
cuDEM: TConvType;
cuESP: TConvType;
cuFRF: TConvType;
cuIEP: TConvType;
cuITL: TConvType;
cuBEF: TConvType;
cuNLG: TConvType;
cuATS: TConvType;
cuPTE: TConvType;
cuFIM: TConvType;
cuGRD: TConvType;
cuLUF: TConvType;
type
TEuroDecimals = 3..6;
function EuroConvert (const AValue: Double; const AFrom, ATo: TConvType;
const Decimals: TEuroDecimals = 3): Double;
implementation
uses
Math;
const
DEMPerEuros = 1.95583;
ESPPerEuros = 166.386;
FRFPerEuros = 6.55957;
IEPPerEuros = 0.787564;
ITLPerEuros = 1936.27;
BEFPerEuros = 40.3399;
NLGPerEuros = 2.20371;
ATSPerEuros = 13.7603;
PTEPerEuros = 200.482;
FIMPerEuros = 5.94573;
GRDPerEuros = 340.750;
LUFPerEuros = 40.3399;
function EuroConvert (const AValue: Double; const AFrom, ATo: TConvType;
const Decimals: TEuroDecimals = 3): Double;
begin
if AFrom = ATo then
Result := AValue
else
begin
Result := ConvertFrom (AFrom, AValue);
Result := RoundTo (Result, -Decimals);
Result := ConvertTo (Result, ATo);
Result := RoundTo (Result, -Decimals);
end;
end;
initialization
cbEuroCurrency := RegisterConversionFamily('EuroCurrency');
cuEUR := RegisterConversionType(cbEuroCurrency, 'Euro (�)', 1);
cuDEM := RegisterConversionType(cbEuroCurrency, 'German Marks (DEM)', 1 / DEMPerEuros);
cuESP := RegisterConversionType(cbEuroCurrency, 'Spanish Pesetas (ESP)', 1 / ESPPerEuros);
cuFRF := RegisterConversionType(cbEuroCurrency, 'French Francs (FRF)', 1 / FRFPerEuros);
cuIEP := RegisterConversionType(cbEuroCurrency, 'Irish Pounds (IEP)', 1 / IEPPerEuros);
cuITL := RegisterConversionType(cbEuroCurrency, 'Italian Lire (ITL)', 1 / ITLPerEuros);
cuBEF := RegisterConversionType(cbEuroCurrency, 'Belgian Francs (BEF)', 1 / BEFPerEuros);
cuNLG := RegisterConversionType(cbEuroCurrency, 'Dutch Guilders (NLG)', 1 / NLGPerEuros);
cuATS := RegisterConversionType(cbEuroCurrency, 'Austrian Schillings (ATS)', 1 / ATSPerEuros);
cuPTE := RegisterConversionType(cbEuroCurrency, 'Portuguese Escudos (PTE)', 1 / PTEPerEuros);
cuFIM := RegisterConversionType(cbEuroCurrency, 'Finnish Marks (FIM)', 1 / FIMPerEuros);
cuGRD := RegisterConversionType(cbEuroCurrency, 'Greek Drachmas (GRD)', 1 / GRDPerEuros);
cuLUF := RegisterConversionType(cbEuroCurrency, 'Luxembourg Francs (LUF)', 1 / LUFPerEuros);
end.
| EuroForm.dfm |
object Form1: TForm1
Left = 195
Top = 108
Width = 414
Height = 250
Caption = 'Euro Conversion'
Color = clBtnFace
Font.Charset = DEFAULT_CHARSET
Font.Color = clWindowText
Font.Height = -11
Font.Name = 'MS Sans Serif'
Font.Style = []
OldCreateOrder = False
OnCreate = FormCreate
PixelsPerInch = 96
TextHeight = 13
object Label1: TLabel
Left = 8
Top = 196
Width = 30
Height = 13
Caption = 'Value:'
end
object Label2: TLabel
Left = 214
Top = 196
Width = 33
Height = 13
Caption = 'Result:'
end
object Button1: TButton
Left = 168
Top = 8
Width = 75
Height = 177
Caption = 'Convert'
TabOrder = 0
OnClick = Button1Click
end
object EditValue: TEdit
Left = 40
Top = 192
Width = 145
Height = 21
TabOrder = 1
Text = '120'
end
object EditResult: TEdit
Left = 256
Top = 192
Width = 145
Height = 21
TabOrder = 2
end
object ListTypes: TListBox
Left = 8
Top = 8
Width = 153
Height = 177
ItemHeight = 13
TabOrder = 3
end
object ListTypes2: TListBox
Left = 248
Top = 5
Width = 153
Height = 180
ItemHeight = 13
TabOrder = 4
end
end
|
|