Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Множество set

343
17 августа 2007 года
lena_ki
282 / / 14.04.2005
Как правильно описать множество Set чтобы оно содержало бы цифры от 0 до 9 и клавиши backspase и delete?
Так правильно только для цифр:
Set<char, '0', '9'>Dig;
Dig << '0' << '1' << '2' << '3' << '4' << '5' << '0' << '6' << '7' << '8' << '9';
if(!Dig.Contains(Key))
{Key = 0; Beep();}
309
18 августа 2007 года
el scorpio
1.1K / / 19.09.2006
Отловить дебаггером в обработчике для OnKeyPress коды требуемых клавиш.
 
Код:
TForm1::Edit1KeyPress (TObject *Sender, char &Key)
{
  КАКОЙ_ТО_КОД; // Ставим брекпойнт и смотрим, чему равно Key
}

Правда, управляющие клавиши символьного кода не имеют, и через OnKeyPress не ловятся :(
2.0K
18 августа 2007 года
WidowMaker
212 / / 05.04.2005
Цитата: lena_ki
Как правильно описать множество Set чтобы оно содержало бы цифры от 0 до 9 и клавиши backspase и delete?


В чем проблема то?

 
Код:
Set<char,VK_BACK,'9'> st;
st<<VK_BACK<<VK_DELETE<<'0'<<'1'<<'2'<<'3'<<'4'<<'5'<<'6'<<'7'<<'8'<<'9';

Правда учти что VirtualKey это тупой скан код.
10
19 августа 2007 года
Freeman
3.2K / / 06.03.2004
VK_DELETE не в тему - у него расширенный код, и событие WM_CHAR не генерится.
2.0K
19 августа 2007 года
WidowMaker
212 / / 05.04.2005
А кто сказал, что речь о WM_CHAR, до этого поста о нем речь не шла......
почему не WM_KEYDOWN? в обработчике OnKeyDown?

ЗЫ: имхо, пост вообще про set, т.е. откуда мне знать какием там дальше пляски с этим сетом будут? да, конечно, я понимаю что смешивать транслированные 0-9 с vk не гуд, но......
10
19 августа 2007 года
Freeman
3.2K / / 06.03.2004
Цитата: WidowMaker
А кто сказал, что речь о WM_CHAR, до этого поста о нем речь не шла......


Подобные проверки чаще всего ведутся именно в этом обработчике. Похоже, и в нашем случае так.

Цитата: WidowMaker
почему не WM_KEYDOWN? в обработчике OnKeyDown?


Унаследованный от Дельфи set не может иметь более 256 элементов, поэтому проверки в OnKeyDown пишутся по-другому.

Цитата: WidowMaker
я понимаю что смешивать транслированные 0-9 с vk не гуд, но......


...общепринятого слеш-кода, типа \r, для Backspace нет или мы его не знаем.

343
20 августа 2007 года
lena_ki
282 / / 14.04.2005
Вот так у меня сейчас работает (цифры и клавиша backspase):
 
Код:
void __fastcall TFormInput::EditIPKeyPress(TObject *Sender, char &Key)
{
Set<char, 0, 255> Dig;
Dig << '0' << '1' << '2' << '3' << '4' << '5' << '0' << '6' << '7' << '8' << '9' << VK_BACK;
if( !Dig.Contains(Key) )
  {
  Key = 0;
  Beep();
  }
}

Знаете кого-то, кто может ответить? Поделитесь с ним ссылкой.

Ваш ответ

Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог