Коды символов
и если можно, команду "отлова" кода нажатой клавиши.
спасибо
Edit2->Text = IntToStr(Edit1->Text[1]);
А для получения символа из его кода:
Edit2->Text = char(StrToInt(Edit1->Text));
Обратно
и если можно, команду "отлова" кода нажатой клавиши.
А ты что хочешь "отлавливать": клавиши в отдельном компоненте, своей программе или по всей системе?
А ты что хочешь "отлавливать": клавиши в отдельном компоненте, своей программе или по всей системе?
клавиши в своей программе
т.е. например, цикл до нажатия определенной клавиши (типа Esc), при нажатии любой другой клавиши переменной присваивается ее код (что-то типа ReadKey в старом добром Pascal-е)
спасибо всем ответившим за помощь.
Код символа
Обратно
т.е. в первом случае i присваивается код буковки "а", а во втором переменной а - символ с кодом 97?
(я правильно понял?)
т.е. в первом случае i присваивается код буковки "а", а во втором переменной а - символ с кодом 97?
(я правильно понял?)
Почти. Я про то что нету никакой разницы между символов и его кодом.
Все зависит от того как система воспримет тебя.
можно было бы и просто написать
char a = 97;
int b = 'a';
после этого выполни ShowMessage(a); ShowMessage(b);
Можно так же сделать так.
ShowMessage((int)'a'); и тебе выведетеся код символа а и наоборот
ShowMessage((char)97);
А насчет команды отлова, заюзай АПИ.
char oldkeystate[256],keystate[256];
__fastcall TForm1::TForm1(TComponent* Owner)
: TForm(Owner)
{
GetKeyboardState(oldkeystate);
Application->OnIdle = &IdleHandler;
}
void __fastcall TForm1::IdleHandler(TObject *Sender,bool &Done) {
Done = false;
GetKeyboardState(keystate);
for(int i=0; i<256; i++) if (oldkeystate!=keystate)
{ Label1->Caption = IntToStr(i); break; }
for(int i=0; i<256; i++) oldkeystate = keystate;
}
Для "отлова" клавиш можешь попробовать что-то типа этого:
char oldkeystate[256],keystate[256];
__fastcall TForm1::TForm1(TComponent* Owner)
: TForm(Owner)
{
GetKeyboardState(oldkeystate);
Application->OnIdle = &IdleHandler;
}
void __fastcall TForm1::IdleHandler(TObject *Sender,bool &Done) {
Done = false;
GetKeyboardState(keystate);
for(int i=0; i<256; i++) if (oldkeystate!=keystate)
{ Label1->Caption = IntToStr(i); break; }
for(int i=0; i<256; i++) oldkeystate = keystate;
}
Нихера ты кодик замутил...
За оптимитизацию тебе двойка.
За оптимитизацию тебе двойка.
Ну извини как умею так и пишу, вообще по-моему довольно коротко и работает как надо. Если кто знает как лучше написать - пишите, посмотрим, а придираться всегда легче всего.
Для "отлова" клавиш можешь попробовать что-то типа этого:
__fastcall TForm1::TForm1(TComponent* Owner)
: TForm(Owner)
{
GetKeyboardState(oldkeystate);
Application->OnIdle = &IdleHandler;
}
Чего-то недопонял, а события WM_KEYDOWN уже не катят?
что-то типа ReadKey в старом добром Pascal-е
А технологии "старого-доброго" в новых злых виндах уже не всегда канают, и чаще всего, то что ты привык делать вот эдак, делается принципиально по-другому. В частности, цикл до нажатия определенной клавиши, выполнять лучше в отдельном потоке - если я правильно понял, что ты хочешь цикл тормозить. Если не тормозить, то вообще непонятно в чем заморочка?
Чего-то недопонял, а события WM_KEYDOWN уже не катят?
Во во... я про тоже.
а события WM_KEYDOWN уже не катят?
Я чё-то так и не понял как ими пользоваться, точнее где и как это сообщение перехватывать.
Я чё-то так и не понял как ими пользоваться, точнее где и как это сообщение перехватывать.
В простейшем случае ставишь обработчик на событие OnKeyDown формы.