TForm1::Edit1KeyPress (TObject *Sender, char &Key)
{
КАКОЙ_ТО_КОД; // Ставим брекпойнт и смотрим, чему равно Key
}
Множество set
Так правильно только для цифр:
Set<char, '0', '9'>Dig;
Dig << '0' << '1' << '2' << '3' << '4' << '5' << '0' << '6' << '7' << '8' << '9';
if(!Dig.Contains(Key))
{Key = 0; Beep();}
Код:
Правда, управляющие клавиши символьного кода не имеют, и через OnKeyPress не ловятся :(
Цитата: 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';
st<<VK_BACK<<VK_DELETE<<'0'<<'1'<<'2'<<'3'<<'4'<<'5'<<'6'<<'7'<<'8'<<'9';
Правда учти что VirtualKey это тупой скан код.
VK_DELETE не в тему - у него расширенный код, и событие WM_CHAR не генерится.
почему не WM_KEYDOWN? в обработчике OnKeyDown?
ЗЫ: имхо, пост вообще про set, т.е. откуда мне знать какием там дальше пляски с этим сетом будут? да, конечно, я понимаю что смешивать транслированные 0-9 с vk не гуд, но......
Цитата: WidowMaker
А кто сказал, что речь о WM_CHAR, до этого поста о нем речь не шла......
Подобные проверки чаще всего ведутся именно в этом обработчике. Похоже, и в нашем случае так.
Цитата: WidowMaker
почему не WM_KEYDOWN? в обработчике OnKeyDown?
Унаследованный от Дельфи set не может иметь более 256 элементов, поэтому проверки в OnKeyDown пишутся по-другому.
Цитата: WidowMaker
я понимаю что смешивать транслированные 0-9 с vk не гуд, но......
...общепринятого слеш-кода, типа \r, для Backspace нет или мы его не знаем.
Код:
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();
}
}
{
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();
}
}