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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 23.11.2008, 16:29   #1
SNUPY
Форумчанин
 
Регистрация: 15.02.2008
Сообщений: 621
Вопрос Edit + Буфер обмена

Приветсвую всех!!! Возникла такая проблема.... В Edit'e должны быть только числовые значения. В принципе я воткнул фильтр символов на событие OnKeyPress, но возникает одно но....: а что если пользователь вставит текст, который будет содержать по мимо цифр буквы, знаки пунктуации и т.д. Как быть товарищи? Заранее спасибо
Помог? Ну так нажми на весы!
SNUPY вне форума Ответить с цитированием
Старый 23.11.2008, 20:20   #2
VVM
Форумчанин
 
Аватар для VVM
 
Регистрация: 06.06.2007
Сообщений: 282
По умолчанию

Я бы сделал так: на OnChange проверять посимвольно. Если символ не цифра, выдаем сообщение и чистим Edit.
Не важно, как часто вы падаете. Важно, как часто вы поднимаетесь. Винс Ломбарди.
VVM вне форума Ответить с цитированием
Старый 23.11.2008, 21:07   #3
новый образ
 
Регистрация: 22.11.2008
Сообщений: 3
По умолчанию

лучше процедурой кейпресс. все нажатые клавиши попадают в переменную key вот ее то и проверяй. удачи
новый образ вне форума Ответить с цитированием
Старый 23.11.2008, 21:34   #4
Terran
Участник клуба
 
Аватар для Terran
 
Регистрация: 28.11.2007
Сообщений: 1,521
По умолчанию

Цитата:
Сообщение от новый образ Посмотреть сообщение
лучше процедурой кейпресс. все нажатые клавиши попадают в переменную key вот ее то и проверяй. удачи
KeyPress тут не поможет т.к. можно нажать Ctrl+V или нажать второй кнопкой мыши и "вставить".
Всегда рад помочь!
Terran вне форума Ответить с цитированием
Старый 23.11.2008, 21:41   #5
Квэнди
Старожил
 
Аватар для Квэнди
 
Регистрация: 13.12.2006
Сообщений: 3,859
По умолчанию

onchange и анализируйте текст в чем проблема- то ?
ICQ не для вопросов, а для предложений. Для вопросов используйте форум
IRC канал клуба программистов|Мои статьи
Квэнди вне форума Ответить с цитированием
Старый 23.11.2008, 21:45   #6
0nni
Форумчанин
 
Аватар для 0nni
 
Регистрация: 24.07.2008
Сообщений: 279
По умолчанию

Можно еще обрабатывать WM_PASTE
Сказал и загрустил от бесспорности своей правоты.
0nni вне форума Ответить с цитированием
Старый 23.11.2008, 21:59   #7
SNUPY
Форумчанин
 
Регистрация: 15.02.2008
Сообщений: 621
По умолчанию

OnChange в принципе катит, но хочеться как-то по грамотному =).

Цитата:
Можно еще обрабатывать WM_PASTE
Извините пожалуйста.... Если вас конечно не затруднит, не могли вы подкинуть простенький пример как с этим работать? =)))
Помог? Ну так нажми на весы!
SNUPY вне форума Ответить с цитированием
Старый 23.11.2008, 22:07   #8
VVM
Форумчанин
 
Аватар для VVM
 
Регистрация: 06.06.2007
Сообщений: 282
По умолчанию

Цитата:
OnChange в принципе катит, но хочеться как-то по грамотному =).
Хм... куда еще грамотнее и практичнее, чем OnChange ?
Не важно, как часто вы падаете. Важно, как часто вы поднимаетесь. Винс Ломбарди.
VVM вне форума Ответить с цитированием
Старый 23.11.2008, 22:16   #9
0nni
Форумчанин
 
Аватар для 0nni
 
Регистрация: 24.07.2008
Сообщений: 279
По умолчанию

Код:
tnpEdit = class(Tedit)
  private
    procedure wmpaste(var msg : TWMPaste); message WM_PASTE;
  end;
Вот пример компонента, который вообще не реагирует на попытки вставки из буфера обмена (в wmpaste ничего писать не надо).
Но все же пользуйтесь методом продолженным Квэнди.

Если же вам нужно вводить только целые числа, то у стандартного tedit есть такая возможность -
Код:
SetWindowLong(Edit1.Handle, GWL_STYLE, GetWindowLong(edit1.Handle, GWL_STYLE) or ES_NUMBER)
После этого в tEdit будет возможно ввести только цифры.
Сказал и загрустил от бесспорности своей правоты.
0nni вне форума Ответить с цитированием
Старый 23.11.2008, 22:30   #10
SNUPY
Форумчанин
 
Регистрация: 15.02.2008
Сообщений: 621
По умолчанию

в OnChange всё красиво ^_^, но есть один не айсный момент: если срабатывает фильтр на не пропуск символа, то курсор переходит в крайнее левое положение =(
Код:
Код:
procedure TWorkForm.Edit1Change(Sender: TObject);
var
  i:Integer;
  s:String;
begin
  s:=TEdit(Sender).Text;
  for i:=Length(s) downto 1 do
  begin
    if not(s[i] in ['0'..'9']) then
    delete(s, i, 1);
  end;
  TEdit(Sender).Text:=s;
end;
Может как-нибудь по другому тогда это надо реализовать?
Помог? Ну так нажми на весы!
SNUPY вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Копирование данных в буфер обмена? ArcticBear Общие вопросы .NET 4 27.11.2009 14:27
Как очистить буфер обмена? StasSv Microsoft Office Excel 2 11.08.2008 17:38
Как скопировать текст в буфер обмена с одного edit-a и вставить в другой SeRhy Общие вопросы Delphi 2 26.07.2008 23:02
Скопировать в буфер обмена Dj_smart JavaScript, Ajax 8 15.05.2008 19:16
Копирование структуры в буфер обмена bill Общие вопросы Delphi 14 20.11.2007 17:22