Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Delphi: Общие вопросы > Какое условие поставит для Edit в Delphi ?


Автор: Алекс 17.11.2002, 06:52
Какое условие поставит для Edit в Delphi чтобы можно было вводить только цифры ?

Автор: December 17.11.2002, 08:41
Цитата(Guest @ 16.11.2002, 21:52)
Какое условие поставит для Edit в Delphi чтобы можно было вводить только цифры ?

if ord(edit1.text[length(edit1.text)]<48)
or ord(edit1.text[length(edit1.text)]>57)
then edit1.text:=copy(edit1.text,1,length(edit1.text)-1);

Автор: Vit 17.11.2002, 09:31
OnKeyPress:

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


Но этого недостаточно, надо обрабатывать ещё и onChange на случай если попытаются внести что-то при помощи Clipboard. А вообще это как раз тот случай когда надо использовать или TSpinEdit или написать свой компонент.

Автор: Song 17.11.2002, 22:03
ES_NUMBER

Автор: Vit 18.11.2002, 00:39
Цитата(Song @ 17.11.2002, 05:03)
ES_NUMBER

Что-то я его в help'e не нашёл, это сообщение? В модуле Windows константа определена в разделе "Control Manager Structures and Definitions" - и как ей пользоваться?

Автор: МММ 18.11.2002, 11:16
А может проще MaskEdit?

Автор: Vit 18.11.2002, 14:37
Цитата
А может проще MaskEdit?

Проще, но не всегда подходит

Автор: Song 18.11.2002, 19:21
Цитата(Vit @ 17.11.2002, 16:39)
Цитата(Song @ 17.11.2002, )
ES_NUMBER

Что-то я его в help'e не нашёл, это сообщение? В модуле Windows константа определена в разделе "Control Manager Structures and Definitions" - и как ей пользоваться?

Это не сообщение, это стиль.
Он появился от IE 4.0. Чтобы его активировать, надо перекрывать CreateParams

Автор: AntonSaburov 18.11.2002, 23:09
А может не изобретать велосипед, а использовать RxLib

Автор: man2002ua 19.11.2002, 00:21
S := GetWindowLong(Edit1.Handle,GWL_STYLE);
S := S OR ES_NUMBER;
SetWindowLong(Edit1.Handle,GWL_STYLE,S);

HO ! ES_NUMBER не поможет при вставке данных из Clipboard.
Тут метод предложенный Vit (OnChange) имеет большую силу.

что-то вроде

procedure TForm1.Edit1Change(Sender: TObject);
var f : Extended;
begin
if (Edit1.Text = '') or (Edit1.Text = '-') then exit;
try
 f := StrTofloat(Edit1.Text);
except on e:exception do
begin
 edit1.text := s;
 edit1.SelStart := length(s);
end;
end;
s := edit1.text;
end;

Автор: Song 19.11.2002, 02:48
Насколько я помню ES_NUMBER нельзя включить через SetWindowLong(). Именно поэтому я не написал этот вариант.

Автор: man2002ua 19.11.2002, 02:49
:)
запросто можно.
я не раз подобное делал, только с другими стилями, заодно попробовал сделать с ES_NUMBER - ok

Автор: алекс 19.11.2002, 07:02
Народ я в программировании полный ноль !!! Сделал на Delphi обычный калькулятор
Типа
procedure TForm1.Button1Click(Sender: TObject);
begin
a:=StrtoInt(Edit1.Text)+StrtoInt(Edit2.Text);
Edit3.Text:=InttoStr(a);
end;

Если можете, объясите какое условие поставить для Edit1 и Edit2,    чтобы можно было вводить только цифры ?

На моём примере покажите PLZ а то я в ваших месагах ничего не понимаю :(

Автор: Vit 19.11.2002, 07:56
Для твоих Edit1 и Edit2 в обработчике события onKeyPress поставь строку:

Код
if not (Key in ['0'..'9']) then Key:=#0;


На твоём примере никак не покажешь, так как при исполнении твоего кода значения в Edit поля уже введены, можно только проверить числа там или нет


Автор: man2002ua 19.11.2002, 18:41
алекс - ты мой код видел?
Поставь для события OnChange обоих Edit этот код (скопируй и вставь).

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)