Форум: "Основная";
Текущий архив: 2005.08.21;
Скачать: [xml.tar.bz2];
Вниз
Проверка 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;
Скачать: [xml.tar.bz2];
Память: 0.49 MB
Время: 0.037 c