Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 23.01.2012, 23:32   #1
liquidon
 
Регистрация: 12.01.2012
Сообщений: 7
По умолчанию Как убрать задержку после нажатия на клавишу

Всех приветствую.
Использую в программе "TForm1.FormKeyDown" для перемещения изображения по форме, но после нажатия на кнопку (не отпуская ее), изображение двигается на 1 пиксель, потом небольшая задержка, и уже дальше перемещается нормально, с постоянной скоростью.
Отключить только у себя эту задержку не составит труда, но как сделать так, чтобы задержки не было на любом пк, с которого запускается программа?

Заранее благодарен.
liquidon вне форума Ответить с цитированием
Старый 23.01.2012, 23:36   #2
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

а может лучше переработать приложение что оно на систему не надеялось?
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Старый 23.01.2012, 23:42   #3
liquidon
 
Регистрация: 12.01.2012
Сообщений: 7
По умолчанию

Других способов перемещать объекты по форме с помощью клавиш на клавиатуре я, увы, не знаю. Мал еще Может посоветуете что-нибудь?
liquidon вне форума Ответить с цитированием
Старый 23.01.2012, 23:57   #4
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

События объекта OnMouseUp, OnMouseDown, OnMouseMove
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 24.01.2012, 00:02   #5
liquidon
 
Регистрация: 12.01.2012
Сообщений: 7
По умолчанию

Цитата:
События объекта OnMouseUp, OnMouseDown, OnMouseMove
Спасибо за предложение, но мышка в моем случае не подходит. Может быть через WinApi как-нибудь удастся отключить задержку курсора когда программа запущена, а при закрытии вернуть в начальное положение? Я с WinApi еще ни разу не работал, это всего лишь предположения.
________________upd________________ __

Вот нашел обсуждение похожей проблемы, но там С++ (если не ошибаюсь)
Решили эту проблему следующим образом:
Цитата:
bool gKeys[256];

//...

case WM_KEYDOWN:
gKeys[(BYTE)wParam] = true;
return 0;
case WM_KEYUP:
gKeys[(BYTE)wParam] = false;
return 0;
На Delphi подобное кто-нибудь сможет помочь организовать?
Заранее благодарен.

Последний раз редактировалось liquidon; 24.01.2012 в 00:24.
liquidon вне форума Ответить с цитированием
Старый 24.01.2012, 01:59   #6
Человек_Борща
Старожил
 
Аватар для Человек_Борща
 
Регистрация: 30.12.2009
Сообщений: 11,426
По умолчанию

Кнопки для перемещения изображения для формы? Что за извращение над юзером?

используйте Drag'n'Drop.... у Timage есть все события. Примеров уйма.. не с изображения но смысл будет ясен.
Человек_Борща вне форума Ответить с цитированием
Старый 24.01.2012, 09:13   #7
liquidon
 
Регистрация: 12.01.2012
Сообщений: 7
По умолчанию

Цитата:
Кнопки для перемещения изображения для формы? Что за извращение над юзером?
Это небольшая игра. Поэтому нужны только кнопки на клавиатуре. Картинка - это игрок, перемещения которого нужно сделать ровными.
liquidon вне форума Ответить с цитированием
Старый 24.01.2012, 11:11   #8
x128
Форумчанин
 
Регистрация: 03.02.2010
Сообщений: 178
По умолчанию

После KeyDown перемещай картинку (например в таймере), по KeyUp прекращай, при повторном KeyDown просто игнорируй пока работает обработка перемещения.
Код:
procedure KeyDown...
if Timer.Enabled then exit else 
begin
  ...
  Timer.Enatled:=true;
end;
.....
procedure KeyUp...
Timer.Enatled:=false;
Можно придумать много вариантов, смысл один, используй флаг признака нажата/отпущена кнопка и не привязывайся к клавиатурным событиям напрямую.
x128 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как убрать в ячеиках типа char(255) после моеи строки пробелы ArtGrek БД в Delphi 4 02.05.2011 09:46
Как сделать, чтобы после нажатия кнопки выводилось нужное мне окно? phantasmagoria Помощь студентам 5 28.04.2011 23:43
Событие нажатия на клавишу клавиатуры Bayazet Общие вопросы Delphi 2 03.02.2009 16:17