Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 06.04.2012, 19:27   #1
DeveloPerchik
Пользователь
 
Регистрация: 06.04.2012
Сообщений: 78
Вопрос Как в полях для ввода сумм разделять тысячи?

Как в полях для ввода цифр (сумм) сделать, чтобы сразу во время ввода разделялись тысячи знаком вида 1'000'000.00 ?
DeveloPerchik вне форума Ответить с цитированием
Старый 06.04.2012, 20:13   #2
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Либо в OnKeyPressed заменять:
Код:
if key=',' then key:='.'
Либо поставь MaskEdit

P.S. Я предпочитаю первое.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 07.04.2012, 11:15   #3
DeveloPerchik
Пользователь
 
Регистрация: 06.04.2012
Сообщений: 78
По умолчанию

Не как запятую-точку заменять, а как тысячи апострофом разделять???
DeveloPerchik вне форума Ответить с цитированием
Старый 07.04.2012, 11:28   #4
Прик
Форумчанин
 
Регистрация: 08.09.2010
Сообщений: 880
По умолчанию

В каких полях? TEdit, TMaskEdit, ячейках таблиц DBGrid, TStringGrid?

В TEdit никак, если только самому не изловчится, например, в событии OnChange или сделать наследника от TEdit.
В TMaskEdit такое разделение задается маской (см. справку).
В TStringGrid есть событие OnGetEditMask, где как и в TMaskEdit можно указать нужную маску.
Для DBGrid в полях Dataset, связанного с гридой, задают DisplayFormat.
Прик вне форума Ответить с цитированием
Старый 07.04.2012, 11:59   #5
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
например, в событии OnChange
Изврат:
Код:
procedure TForm1.Edit1Change(Sender: TObject);
begin
 ThousandSeparator:='`';
 TEdit(sender).Text:=format('%n',[StrTofloat(StringReplace(TEdit(sender).Text,
  ThousandSeparator,'',[rfreplaceall]))]);
end;
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 07.04.2012, 12:13   #6
Прик
Форумчанин
 
Регистрация: 08.09.2010
Сообщений: 880
По умолчанию

Stilet, здОрово.
+1
Прик вне форума Ответить с цитированием
Старый 07.04.2012, 12:15   #7
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
Прик
А получилось -1
Причем в буквальном смысле. Кстати - код с потолка, так что его если использовать то стоит на баги просмотреть.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 07.04.2012, 12:20   #8
Прик
Форумчанин
 
Регистрация: 08.09.2010
Сообщений: 880
По умолчанию

Цитата:
Сообщение от Stilet Посмотреть сообщение
А получилось -1
Уже повинился Промашка вышла.
Цитата:
Сообщение от Stilet Посмотреть сообщение
Кстати - код с потолка, так что его если использовать то стоит на баги просмотреть.
Уже использовано.
Работает, собака, как часы. В реальной жизни добавить обработку исключения на не цифры и все ОК.
Прик вне форума Ответить с цитированием
Старый 07.04.2012, 14:03   #9
phomm
personality
Старожил
 
Аватар для phomm
 
Регистрация: 28.04.2009
Сообщений: 2,882
По умолчанию

Я вот такое писал:
Код:
procedure TMainForm.EditChange(Sender: TObject);
var
  Edt : TEdit;
  function PrintThSep (inp : string): string;
  var
    i, j: Integer;
    s: string;
  begin
    ThousandSeparator := '''';
    SetLength(s, Length(inp)); // using non-realloc string
    j := 1;
    for i := 1 to Length(inp) do
      if inp[i] in ['0'..'9', '-', DecimalSeparator]  then
      begin
        s[j] := inp[i];
        Inc(j);
      end;
    SetLength(s, j-1);
    Result := FormatFloat('#,###.###', StrToFloat(s));
  end;

begin
  Edt := Sender as TEdit;
  if Edt.Text <> '' then
    Edt.Text := PrintThSep(Edt.Text);
  Edt.SelStart := Length(Edt.Text);
end;
Хотя у Stilet дюже добрый код, плюсую )
phomm вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Написать рекурсивную процедуру для ввода с клавиатуры последовательности чи-сел (конец ввода – 0) и вывода её на экран в обратном netiv Паскаль, Turbo Pascal, PascalABC.NET 1 17.02.2012 18:14
Хочу сделать форму для ввода паролей! Для этого текст должен быть зашифрован в (*****) ! Как сделать vitaaly Visual C++ 2 12.02.2011 12:29
как создать класс для ввода времени kireev Помощь студентам 0 18.01.2010 17:14
Как сделать запрет ввода букв в поле для ввода input zvezda_t PHP 1 27.12.2009 22:02