Source Code for TCurrencyEdit 
Unit CurrEdit;Interfaceuses  SysUtils, WinTypes, WinProcs, Messages, Classes, Graphics, Controls,  Menus, Forms, Dialogs, StdCtrls;type  TCurrencyEdit = class(TCustomMemo)  private    DispFormat: string;    FieldValue: Extended;    procedure SetFormat(A: string);    procedure SetFieldValue(A: Extended);    procedure CMEnter(var Message: TCMEnter);           message CM_ENTER;    procedure CMExit(var Message: TCMExit);             message CM_EXIT;    procedure FormatText;    procedure UnFormatText;  protected    procedure KeyPress(var Key: Char); override;    procedure CreateParams(var Params: TCreateParams); override;  public    constructor Create(AOwner: TComponent); override;  published    property Alignment default taRightJustify;    property AutoSize default True;    property BorderStyle;    property Color;    property Ctl3D;    property DisplayFormat: string read DispFormat write SetFormat;    property DragCursor;    property DragMode;    property Enabled;    property Font;    property HideSelection;    property MaxLength;    property ParentColor;    property ParentCtl3D;    property ParentFont;    property ParentShowHint;    property PopupMenu;    property ReadOnly;    property ShowHint;    property TabOrder;    property Value: Extended read FieldValue write SetFieldValue;    property Visible;    property OnChange;    property OnClick;    property OnDblClick;    property OnDragDrop;    property OnDragOver;    property OnEndDrag;    property OnEnter;    property OnExit;    property OnKeyDown;    property OnKeyPress;    property OnKeyUp;    property OnMouseDown;    property OnMouseMove;    property OnMouseUp;  end;procedure Register;implementationprocedure Register;begin  RegisterComponents('Additional', [TCurrencyEdit]);end;constructor TCurrencyEdit.Create(AOwner: TComponent);begin  inherited Create(AOwner);  AutoSize := True;  Alignment := taRightJustify;  Width := 121;  Height := 25;  DispFormat := '$,0.00;($,0.00)';  FieldValue := 0.0;  AutoSelect := False;  WantReturns := False;  WordWrap := False;  FormatText;end;procedure TCurrencyEdit.SetFormat(A: String);begin  if DispFormat <> A then    begin      DispFormat:= A;      FormatText;    end;end;procedure TCurrencyEdit.SetFieldValue(A: Extended);begin  if FieldValue <> A then    begin      FieldValue := A;      FormatText;    end;end;procedure TCurrencyEdit.UnFormatText;var  TmpText : String;  Tmp     : Byte;  IsNeg   : Boolean;begin  IsNeg := (Pos('-',Text) > 0) or (Pos('(',Text) > 0);  TmpText := '';  For Tmp := 1 to Length(Text) do    if Text[Tmp] in ['0'..'9','.'] then      TmpText := TmpText + Text[Tmp];  try    FieldValue := StrToFloat(TmpText);    if IsNeg then FieldValue := -FieldValue;  except    MessageBeep(mb_IconAsterisk);  end;end;procedure TCurrencyEdit.FormatText;begin  Text := FormatFloat(DispFormat,FieldValue);end;procedure TCurrencyEdit.CMEnter(var Message: TCMEnter);begin  SelectAll;  inherited;end;procedure TCurrencyEdit.CMExit(var Message: TCMExit);begin  UnformatText;  FormatText;  Inherited;end;procedure TCurrencyEdit.KeyPress(var Key: Char);begin  if Not (Key in ['0'..'9','.','-']) Then Key := #0;  inherited KeyPress(Key);end;procedure TCurrencyEdit.CreateParams(var Params: TCreateParams);begin  inherited CreateParams(Params);  case Alignment of    taLeftJustify  : Params.Style := Params.Style or ES_LEFT and Not ES_MULTILINE;    taRightJustify : Params.Style := Params.Style or ES_RIGHT and Not ES_MULTILINE;    taCenter       : Params.Style := Params.Style or ES_CENTER and Not ES_MULTILINE;  end;end;End.