Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

ввод в Edit только дробных чисел [D5, WinXP]


liver ©   (2004-12-20 10:15:00) 

вобщем надо сделать так, чтоб пользователь мог ввести только дробное число:
например 123,34 или 12345,00
обработчик OnKeyPress не очень хочется писать.
как можно выйти из положения ???


KapitanSerg   (2004-12-20 15:46:00) [1]


> liver   (20.12.04 15:36) [12]


> но мне надо, чтоб только десятые были после запятой, или
> сотые, на разных эдитах по-разному...

Тогда в событии OnExit используй Edit1.Text := FloatToStrF(r, ffFifed, 15, 2), если надо два знака или Edit1.Text := FloatToStrF(r, ffFifed, 15, 15), если - 15,
где ессесно типа real (double, extended);


begin...end   (2004-12-20 15:39:00) [2]

> [11] KapitanSerg ©   (20.12.04 15:33)

> Да чем же лучше? Событие OnKeyPress как раз и предназначено
> для проверки корректности ввода!

А лучше тем, что обработчик OnKeyPress не сработает, если текст в edit вставится из буфера. А предназначен обработчик OnKeyPress для обработки нажатия алфавитно-цифровых клавиш.


liver   (2004-12-20 15:36:00) [3]

не ну вариант нормальный...
но мне надо, чтоб только десятые были после запятой, или сотые, на разных эдитах по-разному...


KapitanSerg   (2004-12-20 15:33:00) [4]


> begin...end ©   (20.12.04 15:29) [10]
> И всё же OnChange и OnExit лучше, чем OnKeyPress, ведь текст
> может вставляться из буфера.

Да чем же лучше? Событие OnKeyPress как раз и предназначено для проверки корректности ввода!


begin...end   (2004-12-20 15:29:00) [5]

И всё же OnChange и OnExit лучше, чем OnKeyPress, ведь текст может вставляться из буфера.

{$J+}

procedure TForm1.Edit1Change(Sender: TObject);
const
 Old: String = '';
begin
 with Sender as TEdit do
   try
     StrToFloat(Text);
     Old := Text
   except
     Text := Old
   end
end.


KapitanSerg   (2004-12-20 15:14:00) [6]


> KSergey ©   (20.12.04 15:09) [8]

Точки точно вводится не будут!
А проверить наличие запятой в уже введенном тексте, например, в поле Text как два пальца...


KSergey   (2004-12-20 15:09:00) [7]

> [7] KapitanSerg ©   (20.12.04 14:59)
> А почему не написать обработчик?

2.3.4,5,6


KapitanSerg   (2004-12-20 14:59:00) [8]


> обработчик OnKeyPress не очень хочется писать.

А почему не написать обработчик?
Например

Begin
 if not (Key in [',', '0'..'9']) then Key := #0;
end;

Вот и весь обработчик!!!!


begin...end   (2004-12-20 14:41:00) [9]

> [2] liver   (20.12.04 10:26)

> ну а какую маску тогда использовать

Например, такую:

MaskEdit.EditMask := '#999990\,99'

> хотя на форме уже понатыкано куча Edit-ов

Может быть, всё же лучше назначить каждому из этих Edit'ов один и тот же обработчик OnChange или OnExit, в котором и производить необходимые проверки?


liver   (2004-12-20 10:38:00) [10]

подойдет.
только причем тут консерватория ?


Sergey_Masloff   (2004-12-20 10:32:00) [11]

а 12345 вместо 12345.00 не пойдет? Если да то в консерватории проблема


ocean   (2004-12-20 10:29:00) [12]

А если обработать OnExit:
if Pos(',', Edit1.Text) = 0 then Edit1.SetFocus;


liver   (2004-12-20 10:26:00) [13]

возможно. хотя на форме уже понатыкано куча Edit-ов
ну а какую маску тогда использовать.
чтоб наверняка пользователь ввел верное значение ?


begin...end   (2004-12-20 10:16:00) [14]

> liver   (20.12.04 10:15)

Может быть, TMaskEdit использовать?


Наверх

Титульная страница Поиск, карта сайта Написать письмо