Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Компоненты Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Закрытая тема
Ваша тема закрыта, почему это могло произойти? Возможно,
Нет наработок или кода, если нужно готовое решение - создайте тему в разделе Фриланс и оплатите работу.
Название темы включает слова - "Помогите", "Нужна помощь", "Срочно", "Пожалуйста".
Название темы слишком короткое или не отражает сути вашего вопроса.
Тема исчерпала себя, помните, один вопрос - одна тема
Прочитайте правила и заново правильно создайте тему.
 
Опции темы Поиск в этой теме
Старый 15.07.2009, 22:25   #11
Polotenchik
Форумчанин
 
Аватар для Polotenchik
 
Регистрация: 04.12.2008
Сообщений: 260
По умолчанию

Вроде нашел:
В событии Change:

Код:
var
i : integer;
c : char;
s : string;

...

// результирующая строка:
s := '';
// проходим по всем символам исходной строки:
for i:=1 to Length(Edit.Text) do
begin
// берем текущий символ:
c := Edit.Text[i];
// Проверяем его на принадлежность к цифрам:
if (c >= '0') and (c <= '9') then s := s + c;
// Или знакам "точка" или "запятая":
if (c = '.') or (c = ',') then s := s + c;
end;
// Присваеваем полю результирующую строку:
Edit.Text := s;
Я бы изменил мир, но Бог не дает исходники...
Polotenchik вне форума
Старый 15.07.2009, 22:33   #12
Polotenchik
Форумчанин
 
Аватар для Polotenchik
 
Регистрация: 04.12.2008
Сообщений: 260
По умолчанию

Блин! тут тоже косяк! Можно несколько запятых ввести! Надо как-то сделать так:

if c = ',' then
если запятой еще не было then
s := s + c;
Я бы изменил мир, но Бог не дает исходники...
Polotenchik вне форума
Старый 16.07.2009, 10:23   #13
Таптыгин
Пользователь
 
Аватар для Таптыгин
 
Регистрация: 24.04.2009
Сообщений: 14
По умолчанию

попробуй побаловаться с этими функциями TryStrToFloat и TryStrToInt и используй вместо MaskEdit обычный Edit. если ты точно уверен, что вместо запятой не поставят точку в дробных числах то TryStrToFloat сработает
Таптыгин вне форума
Старый 16.07.2009, 11:32   #14
Denager
Москоу
Форумчанин
 
Регистрация: 29.01.2008
Сообщений: 138
По умолчанию

В событии onKeyPress написать следующий код
Код:
case key of //key - передаваемый символ
  '0'..'9',#8,#13:key:=key; //Разрешаем вводить цифры, бэкспэйс, энтер...и т.д
  ',': if pos(',',MaskEdit1.Text)=0 then key:=key else key:=#0; //Если запятая не встречается, то вводим ее, если уже есть, то присваиваем key - chr(0);
  else key:=#0; //В остальных случаях ничего не делаем
end;
Алогично обрабатывайте текст в onChange.

Последний раз редактировалось Denager; 16.07.2009 в 11:36.
Denager вне форума
Старый 16.07.2009, 15:49   #15
DeKot
Участник клуба
 
Аватар для DeKot
 
Регистрация: 12.08.2008
Сообщений: 1,977
По умолчанию

В onKeyPress можно еще следующим образом ограничить ввод цифр
Код:
 if not (Key in ['0'..'9',',']) then Key:= #0;
И не сомневайся даже ... отдых - кайф, работа - лажа!
DeKot вне форума
Старый 16.07.2009, 18:56   #16
Polotenchik
Форумчанин
 
Аватар для Polotenchik
 
Регистрация: 04.12.2008
Сообщений: 260
По умолчанию

Цитата:
Сообщение от Denager Посмотреть сообщение
В событии onKeyPress написать следующий код
Код:
case key of //key - передаваемый символ
  '0'..'9',#8,#13:key:=key; //Разрешаем вводить цифры, бэкспэйс, энтер...и т.д
  ',': if pos(',',MaskEdit1.Text)=0 then key:=key else key:=#0; //Если запятая не встречается, то вводим ее, если уже есть, то присваиваем key - chr(0);
  else key:=#0; //В остальных случаях ничего не делаем
end;
Алогично обрабатывайте текст в onChange.
Все правильно и код рабочий, но одна и та же проблема: можно скопировать текст из любого редактора и вставить в этот edit.
Я бы изменил мир, но Бог не дает исходники...
Polotenchik вне форума
Старый 17.07.2009, 04:54   #17
Denager
Москоу
Форумчанин
 
Регистрация: 29.01.2008
Сообщений: 138
По умолчанию

Тогда как вариант, в том же onChange можно очищать буфер обмена
Код:
clipboard.AsText:='';
В Uses добавить clipbrd
Denager вне форума
Старый 17.07.2009, 09:49   #18
Таптыгин
Пользователь
 
Аватар для Таптыгин
 
Регистрация: 24.04.2009
Сообщений: 14
По умолчанию

блин да я апсолютно не вижу проблемы, зачемотслеживать ввод символов если проверку можно сделать всего Edit'а, на форму кидаешь эдит и баттон после ввода текста в эдит считываешь его по нажатию кнопки и сколько запятых ты не вводи, сколько букаф, ты точноотследишь целое число или дробное

Код:
procedure TForm1.Button1Click(Sender: TObject);
var
 i: Integer;
 j: Extended;
begin
 if not TryStrToInt(Edit1.Text, i) and not TryStrToFloat(Edit1.Text, j) then
  begin
   Application.MessageBox('Введите число!', '', MB_ICONWARNING + MB_OK);
   Edit1.Text:='';
  end;
end;
Таптыгин вне форума
Старый 17.07.2009, 13:42   #19
Polotenchik
Форумчанин
 
Аватар для Polotenchik
 
Регистрация: 04.12.2008
Сообщений: 260
По умолчанию

Цитата:
Сообщение от Denager Посмотреть сообщение
Тогда как вариант, в том же onChange можно очищать буфер обмена
Код:
clipboard.AsText:='';
В Uses добавить clipbrd
Да, но надо чтобы нельзя было копировать только текст, а цифры та должны копироваться.

Таптыгин, ну хотелось бы разобраться именно с едит.
Я бы изменил мир, но Бог не дает исходники...
Polotenchik вне форума
Старый 17.07.2009, 17:41   #20
Denager
Москоу
Форумчанин
 
Регистрация: 29.01.2008
Сообщений: 138
По умолчанию

Цитата:
Сообщение от Polotenchik Посмотреть сообщение
Да, но надо чтобы нельзя было копировать только текст, а цифры та должны копироваться.
Тогда такой вариант могу предложить
В onChange пиши
Код:
begin
If ClipBoard.HasFormat(CF_TEXT) then
  if not AllIsFloat(clipboard.AsText) then
    clipboard.AsText:='';
end;
Функция AllIsFloat:
Код:
Function AllIsFloat (const S : String) : Boolean;
var i : Extended;
Begin
 Result := TryStrToFloat(S, I);
End;
Denager вне форума
Закрытая тема


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Подскажите пожалуйста, как сделать, чтобы в Edit можно было ввести цифры от 0 до 12. ciev Общие вопросы Delphi 6 14.05.2016 17:45
Как в Edit вводить только цифры subsonic Общие вопросы Delphi 5 29.03.2010 23:39
Сортирует цифры по строкам, а надо чтобы сортировала цифры , записанные через пробелы Алексей_xXx Помощь студентам 14 06.05.2009 17:42
Как сделать, чтобы форму можно было перемещать только внутри главной формы SeregaKo Общие вопросы Delphi 7 26.03.2009 12:48
Как сделать так, чтобы форму можно было тостать не только за заголовок? Никки Общие вопросы Delphi 1 04.09.2008 14:34