Последняя версия DataExpress 3 beta от 1 сентября 2019 года.
Изображение Скачать | Изображение Что нового?
См. также: Энциклопедия DX | Форум на develop-soft | Песочница
ИзображениеИзображениеИзображение

Текстовое поле для чисел (срабатывание функции походу ввода?)

Аватара пользователя
Иван
Интересующийся
Сообщения: 68
Зарегистрирован: Сб дек 22, 2018 2:16 pm
Благодарил (а): 4 раза
Поблагодарили: 2 раза

Текстовое поле для чисел (срабатывание функции походу ввода?)

Сообщение Иван » Ср сен 04, 2019 2:39 pm

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

Прикрепил пример базы
Вложения
ТЕСТ_ТЕКСТОВЫЕ_ПОЛЯ_ДЛЯ_ЧИСЕЛ.rar
(41.05 КБ) 12 скачиваний

Аватара пользователя
Develop-Soft
Сообщения: 709
Зарегистрирован: Вт мар 05, 2019 6:09 pm
Благодарил (а): 35 раз
Поблагодарили: 162 раза
Контактная информация:

Текстовое поле для чисел (срабатывание функции походу ввода?)

Сообщение Develop-Soft » Ср сен 04, 2019 4:16 pm

Сюда копать:

Код: Выделить всё

function NFS(v:variant):string;
  var r,s: String; i,c:integer;
begin
  s:=VarToStr(v);
  r := '';
  if Length(s)<>0 then
  for i := 1 to Length(s) do
  begin
    if s[i] in ['0','1','2','3','4','5','6','7','8','9',',']
    then
    begin
    if s[i] = ',' then inc(c);
    if c<=1 then
    r := r + s[i];
    end;
  end;
  result:=r;
end;

procedure OKD(Sender: TObject);
var s:string;
begin
  if not (Self.State in [dsEdit,dsInsert]) then exit;
  s := VarToStr(dxEdit1.Field.Value);
  dxEdit1.Field.Value :=  NFS(dxEdit1.Text);
  if s = NFS(dxEdit1.Text) then
  dxEdit1.SelStart := Utf8Length(dxEdit1.Text);
  dxEdit1.SelLength := 0;
end;

procedure Form_Create;
begin
   dxEdit1.OnChange:=@OKD;
end;


Вернуться в «Разработка расширений»