Карта сайта Kansoftware
НОВОСТИУСЛУГИРЕШЕНИЯКОНТАКТЫ
KANSoftWare

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

Delphi , Компоненты и Классы , TEdit

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

Приходит программист в библиотеку и говорит:
- Позовите мне архивариуса! Мне надо его спросить!
- Я его отправил в архив. Могу я вам помочь?
- Разархивируйте его, он мне срочно нужен!


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 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;

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.

Это компонент Delphi для создания поля редактирования валюты в графическом пользовательском интерфейсе (GUI). Компонент, называемый TCurrencyEdit, наследуется от класса TCustomMemo и обеспечивает функции форматирования и разбора значений валют.

Вот подробное описание кода:

  1. Первая часть - объявление класса TCurrencyEdit. Она включает в себя приватные поля для хранения строки формата, значения поля и процедур для установки этих полей.
  2. Процедура SetFormat устанавливает строку формата для поля редактирования валюты. Если новая строка формата отличается от текущей, она вызывает процедуру FormatText, чтобы переформатировать текст.
  3. Процедура SetFieldValue устанавливает значение поля для поля редактирования валюты. Если новое значение отличается от текущего, она вызывает процедуру FormatText, чтобы переформатировать текст.
  4. Процедура UnFormatText разформатирует текст в поле редактирования валюты и обновляет значение поля. Она использует временное строковое переменное для хранения разформатированного текста и затем конвертирует его в вещественное значение с помощью функции StrToFloat.
  5. Процедура FormatText форматирует текст в поле редактирования валюты по указанной строке формата и значению поля.
  6. Процедуры CMEnter и CMExit - переопределенные методы, которые обрабатывают события Enter и Exit компонента. В процедуре CMEnter она выбирает все текст в поле редактирования. В процедуре CMExit она разформатирует и переформатирует текст перед выходом.
  7. Процедура KeyPress - переопределенный метод, который обрабатывает событие нажатия клавиши, чтобы ограничить ввод только цифрами (0-9), точками (.) и знаками минус (-). Если нажата нецифровая клавиша, она отправляет ноль в процедуру окна.
  8. Процедура CreateParams - устанавливает стиль поля редактирования на основе его выравнивания.

Процедура RegisterComponents регистрирует компонент TCurrencyEdit в среде Delphi, чтобы он мог использоваться в проектах.

Код обеспечивает базовое реализацию поля редактирования валюты, но может потребоваться расширение или модификация для соответствия конкретным требованиям. Например, вы можете добавить поддержку различных валют, обработку тысячных разделителей или проверку на ошибки ввода.

В статье описывается создание компонента TCurrencyEdit для редактирования денежных значений с использованием форматирования текста и обработкой клавишного ввода.


Комментарии и вопросы

Получайте свежие новости и обновления по Object Pascal, Delphi и Lazarus прямо в свой смартфон. Подпишитесь на наш Telegram-канал delphi_kansoftware и будьте в курсе последних тенденций в разработке под Linux, Windows, Android и iOS




Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.


:: Главная :: TEdit ::


реклама


©KANSoftWare (разработка программного обеспечения, создание программ, создание интерактивных сайтов), 2007
Top.Mail.Ru

Время компиляции файла: 2024-12-22 20:14:06
2025-07-03 11:02:38/0.0065679550170898/0