Поиск:

Ответ в темуСоздание новой темы Создание опроса
> управления передвижения компонента при помощи клав 
:(
    Опции темы
Nikosss
Дата 13.1.2007, 13:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 22
Регистрация: 9.1.2007
Где: Литва

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



Вопрос по поводу управления передвижения компонента при помощи клавиш клавиатуры (вверх, вниз, вправо, влево).  Существуют ли какие-то константы управления этими клавишами? Как это можно реализовать?

К примеру

switch (Key) {

case ... :MoveUp();
case ... :MoveDown();
case ... :MoveRight();
case ... :MoveLeft();
}
PM MAIL   Вверх
CatOleg
Дата 13.1.2007, 14:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 20
Регистрация: 14.7.2005
Где: Запорожье

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



VK_LEFT 
VK_UP
VK_RIGHT
VK_DOWN
PM MAIL WWW   Вверх
Nikosss
Дата 13.1.2007, 17:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 22
Регистрация: 9.1.2007
Где: Литва

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



Описал вот так функцию, но компонент не реагирует на нажатие клавиш.
Или надо делать вызов функции? Что здесь нетак?
Код

int x=340;
int y=380;

void __fastcall TForm1::FormKeyDown(TObject *Sender, WORD &Key,
      TShiftState Shift)
{
   if (Key == VK_UP)   { y=y-48;
                         Image54->Top=y; }
   if (Key == VK_DOWN) { y=y+48;
                         Image54->Top=y; }
   if (Key == VK_LEFT) { x=x-48;
                         Image54->Left=x;   }
   if (Key == VK_RIGHT) {  x=x+48;
                           Image54->Left=x;   }
}

PM MAIL   Вверх
codelord
Дата 13.1.2007, 19:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 777
Регистрация: 7.5.2005
Где: ты моя темноглаза я где?!

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



А где находится фокус ввода?.
Пиши это в событии компонента на котором находится фокус ввода.
Если это кнопка значит в ней и т.д.


--------------------
Доступен поиск по исходным кодам в GOOGLE.
http://www.google.com/codesearch
PM MAIL   Вверх
Nikosss
Дата 13.1.2007, 20:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 22
Регистрация: 9.1.2007
Где: Литва

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



В данной ситуации есть Form1 по которой должен двигаться Image54.
Цитата(codelord @  13.1.2007,  19:28 Найти цитируемый пост)
Пиши это в событии компонента на котором находится фокус ввода.


Я понимаю нужно написать Form1->SetFocus(); 
Это, как я понимаю, Form1 будет настроена на ввод с клавиатуры. В функции
Код

__fastcall TForm1::TForm1(TComponent* Owner)
        : TForm(Owner)


или нет?
PM MAIL   Вверх
Link90
Дата 14.1.2007, 09:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


"Битый" пиксель
*


Профиль
Группа: Участник
Сообщений: 214
Регистрация: 25.11.2005
Где: Иркутск - середин а земли!

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



Надо у формы поставить свойство KeyPreview=true !!!
PM MAIL ICQ   Вверх
Nikosss
Дата 14.1.2007, 14:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 22
Регистрация: 9.1.2007
Где: Литва

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



Цитата(Link90 @  14.1.2007,  09:07 Найти цитируемый пост)
Надо у формы поставить свойство KeyPreview=true !!! 


То есть Form1->KeyPreview=true; Пробовал закидывать эту строчку в функцию 
Код

__fastcall TForm1::TForm1(TComponent* Owner)
        : TForm(Owner)
 , а также в 
Код

void __fastcall TForm1::FormKeyDown(TObject *Sender, WORD &Key,
      TShiftState Shift)

, но тем не менее компонент не реагирует на нажатие клавиш. 
PM MAIL   Вверх
Nikosss
Дата 14.1.2007, 14:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 22
Регистрация: 9.1.2007
Где: Литва

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



Разобрался с Form1->KeyPreview=true; , но с этой опцией получается сделать только управление через Numpad клавиши. Для стрелок она не действует. 
PM MAIL   Вверх
segmentation_fault
Дата 14.1.2007, 16:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Попробуй так:

Код

void __fastcall TfrmMain::FormKeyPress(TObject *Sender, char &Key)
{
   try
   {
      int key = (int)Key;
      //Application->MessageBox(IntToStr(key).c_str(), "", MB_OK);
         switch(key)
        {
             case 97:
             {
                   //твой код
             } break;
             case 113:
        }

 и.т.д. 

стрелка вверх вроде бы 97, вниз 113, влево-вправо не помню, разкомментируй строчку:
Код

Application->MessageBox(IntToStr(key).c_str(), "", MB_OK);

в коде, тогда узнаешь. 


PM MAIL   Вверх
Nikosss
Дата 14.1.2007, 18:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 22
Регистрация: 9.1.2007
Где: Литва

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



Попробовал раскоментировать, показывает коды клавиш с цифрами, буквами, но стрелок как и ентера не показывает.
PM MAIL   Вверх
segmentation_fault
Дата 14.1.2007, 18:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Цитата(Nikosss @ 14.1.2007,  18:10)
Попробовал раскоментировать, показывает коды клавиш с цифрами, буквами, но стрелок как и ентера не показывает.

странно, у меня показывал. Щас посмотрю, может быть еще какие-то настройки нужны.

Добавлено @ 18:30 
Прошу прощения, забыл, у меня там управление было через буквы A и Q (вниз и вверх соотв.), стрелок действительно не ловит. 
PM MAIL   Вверх
segmentation_fault
Дата 14.1.2007, 18:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



В общем посмотрел, твой первоначальный код:
Код

int x=340;
int y=380;

void __fastcall TForm1::FormKeyDown(TObject *Sender, WORD &Key,
      TShiftState Shift)
{
   if (Key == VK_UP)   { y=y-48;
                         Image54->Top=y; }
   if (Key == VK_DOWN) { y=y+48;
                         Image54->Top=y; }
   if (Key == VK_LEFT) { x=x-48;
                         Image54->Left=x;   }
   if (Key == VK_RIGHT) {  x=x+48;
                           Image54->Left=x;   }
}



 должен работать нормально, только как тут другие советовали, поставь KeyPreview = true, и еще включи NumLock на своей клавиатуре.
PM MAIL   Вверх
Nikosss
Дата 14.1.2007, 23:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 22
Регистрация: 9.1.2007
Где: Литва

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



да работает! Спасибо!
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++ Builder"
Rrader

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

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

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

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


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

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


 




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


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

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