Форум программистов, компьютерный форум, киберфорум
C/С++ под Linux
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 5.00/8: Рейтинг темы: голосов - 8, средняя оценка - 5.00
 Аватар для programina
2062 / 619 / 41
Регистрация: 23.10.2011
Сообщений: 4,468
Записей в блоге: 2

Не правильно работает событие KeyRelease

12.05.2012, 06:00. Показов 1592. Ответов 9
Метки x11, xlib (Все метки)

Студворк — интернет-сервис помощи студентам
Почему программа закрывается не когда я отжимаю клавишу, а через секунду после нажатия? Причем если нажать клавишу выхода "w", а потом быстро нажать какую-нибудь другую клавишу, программа закрывается нормально, т.е. когда отжимается "w"...
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
    int i = 0;
    
    XEvent  event;
    KeySym  key;    
    char        ch;
        
    while( i != 1 )                                         // пока i не равно единице
    {       
        XNextEvent( display, &event );                  
                    
        if ( event.type == KeyRelease )                     // если событие - отжатие клавиши
        {
            XLookupString( &event.xkey, &ch, 1, &key, 0 );  // символ нажатой клавиши ch
            if ( ch == 'w' ) i = 1;                         // если отжата "w", тогда i = 1
        }   
    }
1
Лучшие ответы (1)
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
12.05.2012, 06:00
Ответы с готовыми решениями:

Как правильно выполнить событие?
Доброго времени суток народ! Очередная задача моего извращенного мозга :D допустим есть таймер или цикл! Допустим таймер проверяет...

Как правильно вызвать событие ?
Добрый день. Использую контрол типа TCSpinEdit в связке с кнопкой TButton. После ввода или изменения числа в SpinEdit, по нажатию...

Как правильно организовать событие
Добрый день. Подскажите пожалуйста, как правильно организовать событие. Существует основной модуль в нем прописано обработка полей в...

9
 Аватар для programina
2062 / 619 / 41
Регистрация: 23.10.2011
Сообщений: 4,468
Записей в блоге: 2
27.05.2012, 14:59  [ТС]
Никто не знает?
0
1259 / 650 / 44
Регистрация: 06.02.2011
Сообщений: 1,654
04.07.2012, 12:04
programina, не понятно, что именно у Вас происходит.
Поздно приходит/не приходит KeyRelease? XLookupString() возвращает не то, что ожидается? Так происходит всегда или иногда? xev показывает тоже самое что и Ваш код?
1
 Аватар для programina
2062 / 619 / 41
Регистрация: 23.10.2011
Сообщений: 4,468
Записей в блоге: 2
04.07.2012, 12:54  [ТС]
Есть цикл while, в нем каждый раз опрашивается возможное событие, внутри цикла есть проверка на KeyRelease, т.е. когда нажатая клавиша отпускается должно что-то произойти, а на самом деле происходит не когда я отпускаю клавишу, а через секунду после нажатия
0
1259 / 650 / 44
Регистрация: 06.02.2011
Сообщений: 1,654
04.07.2012, 13:09
Цитата Сообщение от programina Посмотреть сообщение
Есть цикл while, в нем каждый раз опрашивается возможное событие, внутри цикла есть проверка на KeyRelease, т.е. когда нажатая клавиша отпускается должно что-то произойти, а на самом деле происходит не когда я отпускаю клавишу, а через секунду после нажатия
Вам в политики надо не на один мой вопрос не ответили...
1
Evg
Эксперт CАвтор FAQ
 Аватар для Evg
21281 / 8305 / 637
Регистрация: 30.03.2009
Сообщений: 22,660
Записей в блоге: 30
04.07.2012, 13:28
programina, нарисуй полный исходник (со всеми инклюдами) и как его компиляить. Чисто ради интереса проверю, такой эффект будет или нет. Ибо по описанию в данном фрагменте кода непонятно, откуда оно может быть.
1
 Аватар для programina
2062 / 619 / 41
Регистрация: 23.10.2011
Сообщений: 4,468
Записей в блоге: 2
04.07.2012, 17:09  [ТС]
Вот, программа закрывается не когда я отпускаю Escape, а через секунду после ее нажатия:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
#include <X11/Xlib.h>
#include <X11/Xutil.h>
 
int main(int argc, char *argv[])
{
    Display *dpy;
    Window  win;
    int     scr;
    XEvent  ev;
    KeySym  keysym;
    
    int     loop = 1;
   
    dpy = XOpenDisplay(NULL);
    scr = XDefaultScreen(dpy);
    win = XCreateSimpleWindow(dpy, XRootWindow(dpy, scr), 10, 10, 200, 200, 1, XBlackPixel(dpy, scr), XWhitePixel(dpy, scr));
 
    XSelectInput(dpy, win, KeyPressMask);
 
    XMapWindow(dpy, win);
    XFlush(dpy);
 
  
    while (loop == 1)
    {
        XNextEvent(dpy, &ev);
    
        switch (ev.type)
        {
            case KeyRelease:
                keysym = XLookupKeysym(&(ev.xkey), 0);
                if (keysym == XK_Escape) loop = 0;
                break;
                
            default:
                loop = 1;
                break;
        }
    }
    
    XDestroyWindow(dpy, win);
    XCloseDisplay(dpy);
    return 1;
}
1
1259 / 650 / 44
Регистрация: 06.02.2011
Сообщений: 1,654
04.07.2012, 18:06
Цитата Сообщение от programina Посмотреть сообщение
Вот, программа закрывается не когда я отпускаю Escape, а через секунду после ее нажатия:
А у меня сразу, как отжимаю Esc...
Я правильно понимаю: Вы держите не отпуская клавишу Esc и программа в течении секунды закрывается? Если так, то это автоповтор, проверить можно сравнив время у событий.
1
 Аватар для programina
2062 / 619 / 41
Регистрация: 23.10.2011
Сообщений: 4,468
Записей в блоге: 2
04.07.2012, 18:38  [ТС]
Цитата Сообщение от g_u_e_s_t Посмотреть сообщение
Я правильно понимаю
Да.
Цитата Сообщение от g_u_e_s_t Посмотреть сообщение
автоповтор
Я подозревала его, но как его вообще отключить?
0
1259 / 650 / 44
Регистрация: 06.02.2011
Сообщений: 1,654
04.07.2012, 18:48
Лучший ответ Сообщение было отмечено как решение

Решение

Цитата Сообщение от programina Посмотреть сообщение
Я подозревала его
Вы не подозревайте, а проверьте Я вас 3й раз уже выхлоп xev прошу, а Вы все подземные стуки описываете. Такое впечатление, что это мне надо, а не Вам.
Цитата Сообщение от programina Посмотреть сообщение
как его вообще отключить?
Вообще - XAutoRepeatOff(), но на месте пользователя Вашей программы я б на такое обиделся.
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
04.07.2012, 18:48
Помогаю со студенческими работами здесь

Как правильно записать событие?
Доброго времени суток!!! Такой вопрос не получается правильно записать событие вообщем: через апи проверят запущен ли такой-то такой-то...

Как правильно создать событие
Моя программа соединяется по удаленному рабочему столу с другим пк. Добавлен модуль MSTSCLib_TLB(без этого не работает). Соединяется но...

Правильно ли подписываться на событие в декларативном коде?
Всем привет!! Я имею очень маленький опыт программирования в asp.net поэтому постоянно возникают вопросы. Недавно начал разрабатывать...

Как правильно обработать событие DataError?
Здравствуйте ! Хочу обработать исключение DataError для двух случаев: 1) Значение столбца равно nulls 2) Входная строка имела...

Событие: Удаление. Как правильно написать?
Добрый день! Хотел сделать в форме подтверждение на удаление записи. Таблица у меня одна и форма тоже. Удаление данных в этой таблице...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
10
Ответ Создать тему
Новые блоги и статьи
Уведомление о неверно выбранном значении справочника
Maks 06.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "НарядПутевка", разработанного в конфигурации КА2. Задача: уведомлять пользователя, если в документе выбран неверный склад. . .
Установка Qt Creator для C и C++: ставим среду, CMake и MinGW без фреймворка Qt
8Observer8 05.04.2026
Среду разработки Qt Creator можно установить без фреймворка Qt. Есть отдельный репозиторий для этой среды: https:/ / github. com/ qt-creator/ qt-creator, где можно скачать установщик, на вкладке Releases:. . .
AkelPad-скрипты, структуры, и немного лирики..
testuser2 05.04.2026
Такая программа, как AkelPad существует уже давно, и также давно существуют скрипты под нее. Тем не менее, прога живет, периодически что-то не спеша дополняется, улучшается. Что меня в первую очередь. . .
Отображение реквизитов в документе по условию и контроль их заполнения
Maks 04.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеСпецтехники", разработанного в конфигурации КА2. Данный документ берёт данные из другого нетипового документа. . .
Фото всей Земли с борта корабля Orion миссии Artemis II
kumehtar 04.04.2026
Это первое подобное фото сделанное человеком за 50 лет. Снимок называют новым вариантом легендарной фотографии «The Blue Marble» 1972 года, сделанной с борта корабля «Аполлон-17». Новое фото. . .
Вывод диалогового окна перед закрытием, если документ не проведён
Maks 04.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: реализовать программный контроль на предмет проведения документа. . .
Программный контроль заполнения реквизитов табличной части документа
Maks 02.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: 1. Реализовать контроль заполнения реквизита. . .
wmic не является внутренней или внешней командой
Maks 02.04.2026
Решение: DISM / Online / Add-Capability / CapabilityName:WMIC~~~~ Отсюда: https:/ / winitpro. ru/ index. php/ 2025/ 02/ 14/ komanda-wmic-ne-naydena/
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru