Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Отключение задержки клавиатуры 
:(
    Опции темы
KostX
Дата 15.4.2012, 18:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 14
Регистрация: 30.4.2011

Репутация: нет
Всего: нет



Христос Воскрес!!!


Народ, помогите. Такая проблема: нужно отключить задержку клавиатуры перед повтором, как в играх. Как это можно реализовать? Пробовал в событии OnKeyDown при нажатии ставить проверочную переменную в true (кнопка нажата)(допустим Pressed = true;) и переменную в которой будет содержаться код нажатой клавиши  приравнять к Key (допустим KeyKode = Key;) , а в событие OnKeyUp -  проверочную переменную в false. (допустим Pressed = false;). Потом в отдельной функции выполнять действия соответствующие нажатым клавишам. И ничего не получается. Может кто подскажет, как отключение задержки вообще осуществляется? В нете искал, переписывал свой код в соответствии, вроде логика есть, но ничего не работает.
PM MAIL   Вверх
volatile
Дата 16.4.2012, 00:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2107
Регистрация: 7.1.2011

Репутация: 3
Всего: 85



KostX, дам один совет. В задержку клавиатуры лучше не лезть. Это разделяемый ресурс, и менять там что-то - совсем не красиво.
Предлагаю сделать так:
По ки-даун включать таймер, по ки-ап выключать таймер.
Сообщения таймера обрабатывать как вы собирались обрабатывать события от клавиатуры.
А задержку на таймер можете выставить вообще какую заблагорассудится.
Ну в общем немножко фантазии и логики,  и все будет чики-пуки.  smile 
PM MAIL   Вверх
KostX
Дата 16.4.2012, 14:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 14
Регистрация: 30.4.2011

Репутация: нет
Всего: нет



Идея хорошая. Но:
1. Нужно четко отстраивать интервал таймера (это не беда;)
2. При зажатии теперь вообще движения нет. Действия выполняются только при нажатии. Таймер при нажатии отключается, почему? Как это можно исправить?
PM MAIL   Вверх
Ampelia913
Дата 16.4.2012, 14:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 3
Регистрация: 16.4.2012

Репутация: нет
Всего: нет



Всех с праздником! Прошу Вас о помощи. Я не знаю как пропинговать сервер  через С++ или Delphi

Это исходники: #include <stdio.h>
#include <conio.h>
#include <math.h>
main ();
float #A(192.168.1.9);
float #B(194.28.176.6);
HACKING SERVER stat.kuznetsovsk.net.ua
gast ping ip-adress 194.28.176.0;
else ip adtess error config -
ip adress configured 192.168.1.1
my.ukrtelekom.ua;
name hacked server (BANAN.COM);
{end;

А это адрес сервера stat.kuznetsovsk.net.ua

Прошу помогите, это очень важно!
PM MAIL   Вверх
KostX
Дата 16.4.2012, 19:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 14
Регистрация: 30.4.2011

Репутация: нет
Всего: нет



Ampelia913, прости мужик. Ничем помочь не могу.


volatile, а если в этот разделяемый ресурс все-таки полезть? Ведь если игры делают без задержки клавиатуры, значит выход из ситуации точно есть.
Не могли-бы вы мне дать пример (ну или ссылку на литературу), как пользоваться этой задержкой?  Я уже весь интернет обшарил, ни одного работающего варианта не нашел. Как говорится "все средства  хороши!"=)
PM MAIL   Вверх
volatile
Дата 16.4.2012, 23:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2107
Регистрация: 7.1.2011

Репутация: 3
Всего: 85



Цитата(KostX @  16.4.2012,  19:27 Найти цитируемый пост)
а если в этот разделяемый ресурс все-таки полезть? 

Кроме вашей програмы у пользователя еще есть куча других программ. Ради какой-то игры менять системные настройки? я не люблю такие программы. Писать их тоже не хочу.
Кроме того, на многих системах, просто не будет прав менять что-то там.

Цитата(KostX @  16.4.2012,  14:11 Найти цитируемый пост)
1. Нужно четко отстраивать интервал таймера 

Поверьте что таймер можно настроить гораздо точнее чем задержку клавиатуры.  smile 

Цитата(KostX @  16.4.2012,  14:11 Найти цитируемый пост)
2. При зажатии теперь вообще движения нет. Действия выполняются только при нажатии. Таймер при нажатии отключается, почему? Как это можно исправить? 

ну я не телепат. кода не вижу.
Таймер походу можно вообще не отключать. Просто при нажатии клавиши заносить код в ячейку. при отжатии заносить ноль.
Короче вариантов куча
Цитата(volatile @  16.4.2012,  00:21 Найти цитируемый пост)
общем немножко фантазии и логики,  и все будет чики-пуки.



Это сообщение отредактировал(а) volatile - 16.4.2012, 23:21
PM MAIL   Вверх
KostX
Дата 18.4.2012, 19:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 14
Регистрация: 30.4.2011

Репутация: нет
Всего: нет



Цитата

Таймер походу можно вообще не отключать. Просто при нажатии клавиши заносить код в ячейку. при отжатии заносить ноль.

Я его и не отключаю. Просто на время зажатия кнопки, таймер сам приостанавливается. Когда я кнопку отпускаю - таймер тикает дальше и все работает замечательно.
Цитата

Короче вариантов куча


Если-бы из этой кучи хоть один нормально работал... .

Это сообщение отредактировал(а) KostX - 18.4.2012, 19:36
PM MAIL   Вверх
KostX
Дата 18.4.2012, 19:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 14
Регистрация: 30.4.2011

Репутация: нет
Всего: нет



bool KeyPressed; int Key_id; - глобальные переменные. Интервал таймера 100мс

Код

// Нажатие кнопки
void __fastcall TMainWin::FormKeyDown(TObject *Sender, WORD &Key,
      TShiftState Shift)
{
     KeyPressed = true;
     Key_id = Key;
}



// Отпускание кнопки
void __fastcall TMainWin::FormKeyUp(TObject *Sender, WORD &Key,
      TShiftState Shift)
{
     KeyPressed = false;
}


// Функция обработки
void TMainWin::Direction()
{
     if (KeyPressed)
     {
          switch(Key_id)
          {
          case VK_LEFT :        // движемся влево
               if(a[x/step-1][y/step] != 1)
               {
                    if(a[x/step-1][y/step] == 2)
                    {
                         a[x/step-1][y/step] = 0;
                         HighScores++;
                         Catched(100);
                    }
                    if(a[x/step-1][y/step] == 3)
                    {
                         a[x/step-1][y/step] = 0;
                         Lives++;
                         LivesCatched(100);
                    }
                    x -= step;
               }
          break;

          case VK_UP :       // движемся вверх
               if(a[x/step][y/step-1] !=1 )
               {
                    if(a[x/step][y/step-1] == 2)
                    {
                    a[x/step][y/step-1] = 0;
                         HighScores++;
                         Catched(100);
                    }
                    if(a[x/step][y/step-1] == 3)
                    {
                         a[x/step][y/step-1] = 0;
                         Lives++;
                         LivesCatched(100);
                    }
                    y-=step;
               }
          break;

          case VK_RIGHT :  // движемся вправо
               if(a[x/step+1][y/step] != 1)
               {
                    if(a[x/step+1][y/step] == 2)
                    {
                         a[x/step+1][y/step] = 0;
                         HighScores++;
                         Catched(100);
                    }
                    if(a[x/step+1][y/step] == 3)
                    {
                         a[x/step+1][y/step] = 0;
                         Lives++;
                         LivesCatched(100);
                    }
                    x+=step;
               }
          break;

          case VK_DOWN :   // движемся вниз
               if(a[x/step][y/step+1]!= 1)
               {
                    if(a[x/step][y/step+1] == 2)
                    {
                         a[x/step][y/step+1] = 0;
                         HighScores++;
                         Catched(100);
                    }
                    if(a[x/step][y/step+1] == 3)
                    {
                         a[x/step][y/step+1] = 0;
                         Lives++;
                         LivesCatched(100);
                    }
                    y+=step;
               }
          break;
          }
     }
}


 
// Выполнение функции обработки
void __fastcall TMainWin::KeyTimerTimer(TObject *Sender)
{
     Direction();
}
//---------------------------------------------------------------------------


PM MAIL   Вверх
volatile
Дата 18.4.2012, 23:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2107
Регистрация: 7.1.2011

Репутация: 3
Всего: 85



Цитата(KostX @  18.4.2012,  19:29 Найти цитируемый пост)
Просто на время зажатия кнопки, таймер сам приостанавливается


KostX, Из кода что вы привели не ясно почему это происходит. Делаю предположение что билдер что-то там делает.
(я не знаток д'Билдера)

Могу вам предложить сделать следующее
Код

UINT hTimer = 0;
VOID CALLBACK TimerProc (HWND hwnd, UINT uMsg, UINT idEvent, DWORD dwTime)
{
     Direction();
}

void set_timer ()
{
   if (!hTimer)
      hTimer = SetTimer (0, 0, 100, TimerProc);
}
void kill_timer ()
{
   if (hTimer)
   {
      KillTimer (0, hTimer);
      hTimer = 0;
   }
}


В Инициализации формы вызовите set_timer ();
В закрытии  kill_timer ();

Это, имхо, должно работать.

PM MAIL   Вверх
KostX
Дата 19.4.2012, 15:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 14
Регистрация: 30.4.2011

Репутация: нет
Всего: нет



volatile, спасибо огромное! Работает smile
PM MAIL   Вверх
Dem_max
Дата 21.4.2012, 05:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1780
Регистрация: 12.4.2007

Репутация: 14
Всего: 39



В играх задержка клавиатуры не влияет по той простой причине что игра хватает нажатия кнопок из DirectInput


--------------------
Американские программисты долго не могли понять, почему русские при зависании Windоws всё время повторяют "Твой зайка написал" ("Yоur bunnу wrоte")
PM MAIL   Вверх
Ampelia913
Дата 22.4.2012, 13:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 3
Регистрация: 16.4.2012

Репутация: нет
Всего: нет



Я наверное не там где нужно написала, и я не мужик. Мне просто нужна помощь, ну неужели никто не знает как пропинговать сервер через С++ или Delphi? Знаю что мое предыдущее сообщение вашей темы не касается, но я считаю, что если не KostX то хотя бы кто-нибудь другой должен знать. Народ подумайте, прошу!

Добавлено через 1 минуту и 14 секунд
volatile, вы не сможете разобраться?
PM MAIL   Вверх
volatile
Дата 22.4.2012, 17:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2107
Регистрация: 7.1.2011

Репутация: 3
Всего: 85



Цитата(Ampelia913 @  22.4.2012,  13:44 Найти цитируемый пост)
Я наверное не там где нужно написала

Это точно, создайте топик с соответствующей темой.


Цитата(Ampelia913 @  22.4.2012,  13:44 Найти цитируемый пост)
как пропинговать сервер через С++ или Delphi? 

Код

system ("ping www.server.com");
 smile 

Это сообщение отредактировал(а) volatile - 22.4.2012, 17:24
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++ Builder"
Rrader

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по С++ Builder обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Настоятельно рекомендуем заглянуть в DRKB (Delphi Russian Knowledge Base) - крупнейший в рунете сборник материалов по Дельфи


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Rrader.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C++ Builder | Следующая тема »


 




[ Время генерации скрипта: 0.0904 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.