Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2005.08.21;
Скачать: CL | DM;

Вниз

Проверка eidta на наличие цифр   Найти похожие ветки 

 
TDionis   (2005-08-03 11:46) [0]

Вобщем, так. Надо написать код, чтоб в поле ввода телефона нельзя было ввести ничего кроме цифр. Проблема вот в чем: номер телефона (мобилы) больше значения 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 цифры. Как можно обойти это? Заранее спасибо!


 
Ega23 ©   (2005-08-03 11:51) [1]

for i:=1 to Length(Edit1.Text) do
if not (Edit1.Text[i] in ["0".."9"]) then
 begin
  ShowMessage(Edit1.Text[i]+" - не цифра!!!");
  Break;
 end;


 
Eraser ©   (2005-08-03 11:53) [2]

TDionis   (03.08.05 11:46)

Ещё вариант - TryStrToInt.


 
TDionis   (2005-08-03 12:04) [3]

спасибо всем уже разобрался: val() и real - форева!! )))

var a:real;
b:integer;
begin
val(edit1.Text,a,b);
if b = 0 then else 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;


 
DesWind ©   (2005-08-03 12:14) [4]

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


 
DesWind ©   (2005-08-03 12:17) [5]


procedure TForm1.Edit1KeyPress(Sender: TObject; var Key: Char);
begin
if not (Key in ["0".."9"]) then
 Key:=#0;
end;


 
Ega23 ©   (2005-08-03 12:19) [6]

2 DesWind ©   (03.08.05 12:17) [5]

Про такую штуку, как Copy/Paste случайно не забыл?


 
DesWind ©   (2005-08-03 12:23) [7]

забыл...


 
Ольга   (2005-08-03 12:41) [8]

Для вашего случая очень подходит CurrencyEdit1 из RXControl
Там можно настроить формат, задать шаблон и не надо никаких проверок.


 
ECM ©   (2005-08-03 12:48) [9]

ES_NUMBER ?
..не помню уже как это в VCL проще...

SetWindowLong(Edit1.Handle,GWL_STYLE,GetWindowLong(Edit1.Handle,GWL_STYLE) or ES_NUMBER);


 
Macrodens ©   (2005-08-03 12:52) [10]

А не проще в онКейПресс обработку задать:

...
begin
...
  if not (kei in ["0"..."9", #8]) then
     key:=#0;
...
end;

И будут вводиться только цифери!


 
Ega23 ©   (2005-08-03 13:12) [11]

2 Macrodens ©   (03.08.05 12:52) [10]

см. [6]
Через Copy/Paste я смогу туда любую строку вставить


 
SergP.   (2005-08-03 17:03) [12]


> TDionis   (03.08.05 11:46)  
> Вобщем, так. Надо написать код, чтоб в поле ввода телефона
> нельзя было ввести ничего кроме цифр. Проблема вот в чем:
> номер телефона (мобилы) больше значения integer. (89151234567
> > 2147483647). Поэтому этот код:


Если тебе integer мало, то есть int64


 
msguns ©   (2005-08-03 17:18) [13]

>Ольга   (03.08.05 12:41) [8]
>Для вашего случая очень подходит CurrencyEdit1 из RXControl
>Там можно настроить формат, задать шаблон и не надо никаких проверок.

Дадад, а если мне надо будет вводить что-нибудь вроде LXXIV, то Вы посоветуете какой-нибудь RYControl. Из соответствующей библиотеки компонент..
Или RxLib чтал уже стандартом и поставляется с Делфи ?
Не надо советовать "для ленивых", тем более для такой чепуховой проблемы.


 
Ega23 ©   (2005-08-03 17:27) [14]

2 msguns ©   (03.08.05 17:18) [13]
Или RxLib чтал уже стандартом и поставляется с Делфи ?

Ну, по крайней мере, я неоднократно встречал рекомендации пользоваться RxLib от ТВ


 
msguns ©   (2005-08-03 17:55) [15]

>Ega23 ©   (03.08.05 17:27) [14]
>Ну, по крайней мере, я неоднократно встречал рекомендации пользоваться RxLib от ТВ

А ты сам-то его юзаешь ?
Я, к примеру после того, как заморился ходить отладчиком по его "кишкам" при бряке где-нибудь в AfterScroll или OnGetText, выбросил его в мусорку.
И не жалею ни разу


 
Ольга   (2005-08-03 17:56) [16]


> msguns ©

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

А Вы, msguns, по-видимому исключительно на асемблере пишите, т.к. все остальное для ленивых.


 
Ольга   (2005-08-03 18:03) [17]


> [15]

Я на днях с Ораклом заморилась "ходить по его кишкам", решила "выбросить его в мусорку".
Следуя вашей логике, Оракл - дрянь.


 
DVladimir   (2005-08-03 19:37) [18]

Это как с Ораклом можно заморочиться?


 
TStas ©   (2005-08-03 20:05) [19]

А нельзя в onkeyup проверять цифра была последней введена или нет?


 
Leonid Troyanovsky ©   (2005-08-03 20:23) [20]


> TStas ©   (03.08.05 20:05) [19]
> А нельзя в onkeyup проверять цифра была последней введена
> или нет?


Проверять надо все поле, в OnChange.

--
Regards, LVT.


 
TStas ©   (2005-08-03 20:25) [21]

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 будут только одни циферки и вводиться, в т. ч. копирование.


 
TStas ©   (2005-08-03 20:27) [22]

>Leonid Troyanovsky ©  
Согласен, когда ответ писал, сообразил, что так лучше, поскольку ведь из буфера можно вставить. Onkeyup хотел, чтобы лишней проверки не было, так ведь их две получается, скрытая рекурсия: onchange вызывает изменение, а оно onchange.


 
Leonid Troyanovsky ©   (2005-08-03 20:37) [23]


> TStas ©   (03.08.05 20:27) [22]

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


http://rsdn.ru/Forum/?mid=626935

--
Regards, LVT.



Страницы: 1 вся ветка

Текущий архив: 2005.08.21;
Скачать: CL | DM;

Наверх




Память: 0.52 MB
Время: 0.083 c
14-1122458902
ЯВ
2005-07-27 14:08
2005.08.21
Тоже о ГАИ, но по другому вопросу....


3-1120865175
igorek2003
2005-07-09 03:26
2005.08.21
Справочник и Jpeg


1-1122542872
sunsay
2005-07-28 13:27
2005.08.21
Проблема с видимостью полей объекта


14-1122669555
Kerk
2005-07-30 00:39
2005.08.21
Что-то старею.. всего 01-45, а я уже спать хочу...


4-1119960365
chili
2005-06-28 16:06
2005.08.21
Как максимально надежно защитить реестер Windows