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

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

Проверка eidta на наличие цифр [D7, WinXP]


Страницы:   1 2

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]

Надо написать код, чтоб в поле ввода телефона нельзя было ввести ничего кроме цифр.
Логичнее была бы маска. Или глушить все вводимые символы кроме циферок.


Страницы:   1 2

Наверх

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