![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Проверка eidta на наличие цифр [D7, WinXP]
TDionis © (2005-08-03 11:46:00)Вобщем, так. Надо написать код, чтоб в поле ввода телефона нельзя было ввести ничего кроме цифр. Проблема вот в чем: номер телефона (мобилы) больше значения integer. (89151234567 > 2147483647). Поэтому этот код:
a := strtointdef(edit1.Text,0);
if a = 0 then begin
beep;
With Edit1 Do Text:=Copy(Text,1,Length(Text)-1);
edit1.SelStart := length(edit1.text);
listbox1.Items.Add(' > Неправильный ввод телефона! Только числа!');
listbox1.Perform(wm_vscroll,1,0);
end;
Будет лагать после 10 цифры. Как можно обойти это? Заранее спасибо!
Leonid Troyanovsky (2005-08-03 20:37:00) [1]
> TStas © (03.08.05 20:27) [22]
> проверки не было, так ведь их две получается, скрытая рекурсия:
> onchange вызывает изменение, а оно onchange.
http://rsdn.ru/Forum/?mid=626935
--
Regards, LVT.
TStas (2005-08-03 20:27:00) [2]>Leonid Troyanovsky ©
Согласен, когда ответ писал, сообразил, что так лучше, поскольку ведь из буфера можно вставить. Onkeyup хотел, чтобы лишней проверки не было, так ведь их две получается, скрытая рекурсия: onchange вызывает изменение, а оно onchange.
TStas (2005-08-03 20:25:00) [3]procedure TForm1.Edit1Change(Sender: TObject);
const numStr='0123456789';
var
i:Integer;
c:Char;
str:String;
begin
str:=(Sender As TEdit).Text;
i:=1;
while i<=Length(str) do
begin
c:=str[i];
if Pos(c, numStr)=0 then Delete(str, i, 1);
inc(i);
end;
(Sender As TEdit).Text:=str;
(Sender As TEdit).SelStart:=Length(str);
(Sender As TEdit).SelLength:=0;
(Sender As TEdit).SetFocus;
end;
у любого едита, у котрого это назначено в onchange будут только одни циферки и вводиться, в т. ч. копирование.
Leonid Troyanovsky (2005-08-03 20:23:00) [4]
> TStas © (03.08.05 20:05) [19]
> А нельзя в onkeyup проверять цифра была последней введена
> или нет?
Проверять надо все поле, в OnChange.
--
Regards, LVT.
TStas (2005-08-03 20:05:00) [5]А нельзя в onkeyup проверять цифра была последней введена или нет?
DVladimir (2005-08-03 19:37:00) [6]Это как с Ораклом можно заморочиться?
Ольга (2005-08-03 18:03:00) [7]
> [15]
Я на днях с Ораклом заморилась "ходить по его кишкам", решила "выбросить его в мусорку".
Следуя вашей логике, Оракл - дрянь.
Ольга (2005-08-03 17:56:00) [8]
> msguns ©
А зачем велосипед изобретать, тратить время на чепуховые задачки.
А Вы, msguns, по-видимому исключительно на асемблере пишите, т.к. все остальное для ленивых.
msguns (2005-08-03 17:55:00) [9]>Ega23 © (03.08.05 17:27) [14]
>Ну, по крайней мере, я неоднократно встречал рекомендации пользоваться RxLib от ТВ
А ты сам-то его юзаешь ?
Я, к примеру после того, как заморился ходить отладчиком по его "кишкам" при бряке где-нибудь в AfterScroll или OnGetText, выбросил его в мусорку.
И не жалею ни разу
Ega23 (2005-08-03 17:27:00) [10]2 msguns © (03.08.05 17:18) [13]
Или RxLib чтал уже стандартом и поставляется с Делфи ?
Ну, по крайней мере, я неоднократно встречал рекомендации пользоваться RxLib от ТВ
msguns (2005-08-03 17:18:00) [11]>Ольга (03.08.05 12:41) [8]
>Для вашего случая очень подходит CurrencyEdit1 из RXControl
>Там можно настроить формат, задать шаблон и не надо никаких проверок.
Дадад, а если мне надо будет вводить что-нибудь вроде LXXIV, то Вы посоветуете какой-нибудь RYControl. Из соответствующей библиотеки компонент..
Или RxLib чтал уже стандартом и поставляется с Делфи ?
Не надо советовать "для ленивых", тем более для такой чепуховой проблемы.
SergP. (2005-08-03 17:03:00) [12]
> TDionis (03.08.05 11:46)
> Вобщем, так. Надо написать код, чтоб в поле ввода телефона
> нельзя было ввести ничего кроме цифр. Проблема вот в чем:
> номер телефона (мобилы) больше значения integer. (89151234567
> > 2147483647). Поэтому этот код:
Если тебе integer мало, то есть int64
Ega23 (2005-08-03 13:12:00) [13]2 Macrodens © (03.08.05 12:52) [10]
см. [6]
Через Copy/Paste я смогу туда любую строку вставить
Macrodens (2005-08-03 12:52:00) [14]А не проще в онКейПресс обработку задать:
...
begin
...
if not (kei in ['0'...'9', #8]) then
key:=#0;
...
end;
И будут вводиться только цифери!
ECM (2005-08-03 12:48:00) [15]ES_NUMBER ?
..не помню уже как это в VCL проще...
SetWindowLong(Edit1.Handle,GWL_STYLE,GetWindowLong(Edit1.Handle,GWL_STYLE) or ES_NUMBER);
Ольга (2005-08-03 12:41:00) [16]Для вашего случая очень подходит CurrencyEdit1 из RXControl
Там можно настроить формат, задать шаблон и не надо никаких проверок.
DesWind (2005-08-03 12:23:00) [17]забыл...
Ega23 (2005-08-03 12:19:00) [18]2 DesWind © (03.08.05 12:17) [5]
Про такую штуку, как Copy/Paste случайно не забыл?
DesWind (2005-08-03 12:17:00) [19]
procedure TForm1.Edit1KeyPress(Sender: TObject; var Key: Char);
begin
if not (Key in ['0'..'9']) then
Key:=#0;
end;
DesWind (2005-08-03 12:14:00) [20]Надо написать код, чтоб в поле ввода телефона нельзя было ввести ничего кроме цифр.
Логичнее была бы маска. Или глушить все вводимые символы кроме циферок.