Телефон: +7 (926) 245-03-63

Денежное поле редактирования в TEdit

Следующая статья: Использование опции MultiSelect в DBGrid.

Решение

unit CurrEdit;
interface
uses
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 DisplayFormat: string read DispFormat write SetFormat;
property Value: Extended read FieldValue write SetFieldValue;
end;

procedure register;

implementation
procedure 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.
Интересное в интернете: жалюзи горизонтальные деревянные