Форум программистов, компьютерный форум, киберфорум
C++ Builder
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.91/32: Рейтинг темы: голосов - 32, средняя оценка - 4.91
 Аватар для [XandeR]
31 / 31 / 3
Регистрация: 18.03.2009
Сообщений: 381
Записей в блоге: 2

Отловить нажатие клавиши tab и выполнить программное нажатие enter

26.09.2009, 11:39. Показов 6680. Ответов 6
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Подскажите пожл как осуществить подобное действие, в принципе нажатие на клавишу enter я итак знаю как отловить но незнаю какой функцией програмно нажать таб. Знаю что вопрос по програмному нажатию клавиш уже поднимался но я не смог найти ничего путного на форуме. В общем так:
C++
1
if (Key==VK_RETURN){[функция програмного нажатия таб];}
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
26.09.2009, 11:39
Ответы с готовыми решениями:

Отловить нажатие клавиши Fn
Привет друзья. Встала задача написать свой обработчик события возникающего при нажатии клавиши Fn Смысл: На ноутах Lenovo клавиша...

Как отловить нажатие правой клавиши мыши в новом компоненте?
Помогите с проблемой. Создаю новый компонент на основе TImage. Хочу отловить на нем нажатие правой клавиши. Пихаю прототип в protected:...

Отловить нажатие Ctrl+C и выполнить действие паралельно с системой
Всем доброго времени суток. Я ставил хук с помощью компонента ApplicationEvents. Но при этом выполняеться только то что я написал, а мне...

6
Почетный модератор
 Аватар для Lord_Voodoo
8785 / 2538 / 144
Регистрация: 07.03.2007
Сообщений: 11,873
26.09.2009, 11:44
вам поможет апишная функция:
C++
1
2
3
4
5
6
7
VOID keybd_event(
 
    BYTE bVk,    // virtual-key code
    BYTE bScan,    // hardware scan code
    DWORD dwFlags,    // flags specifying various function options
    DWORD dwExtraInfo     // additional data associated with keystroke
   );
0
 Аватар для [XandeR]
31 / 31 / 3
Регистрация: 18.03.2009
Сообщений: 381
Записей в блоге: 2
27.09.2009, 14:17  [ТС]
эмм, честно говоря мне не понятно как это работает
0
Почетный модератор
 Аватар для Lord_Voodoo
8785 / 2538 / 144
Регистрация: 07.03.2007
Сообщений: 11,873
27.09.2009, 14:42
[XandeR],

C++
1
2
3
4
  keybd_event(VkKeyScan ('-'), 0, 0, 0);
  Sleep(50);
  keybd_event(VkKeyScan('-'), 0, KEYEVENTF_KEYUP, 0);
  Sleep(50);
0
Отдыхающий:)
 Аватар для <Norton>
94 / 91 / 22
Регистрация: 05.04.2009
Сообщений: 188
27.09.2009, 14:52
keybd_event(VK_TAB,0,1,0);

Добавлено через 2 минуты
Извините,VoodooMan, не увидел Ваш пост, да и написал не то.
0
+1
345 / 178 / 53
Регистрация: 24.08.2010
Сообщений: 1,028
12.02.2013, 09:41
Ребят, мне нужно с точностью до наоборот, подменить Enter на Tab.
Только я в этой теме вообще ничего не понял, куда эту функцию прописать?
А поиском везде примеры на делфи, там я тоже нифига не соображаю:

Как подменить нажатия ENTER на нажатия TAB
Существует множество методов решения этой проблемы, но самый быстрый способ, это перехват нажатия клавиш, перед тем как их получит форма:
В секции формы PRIVATE добавьте:
Delphi
1
Procedure CMDialogKey(Var Msg:TWMKey); message CM_DIALOGKEY;
В секции IMPLEMENTATION добавьте:
Delphi
1
2
3
4
5
6
7
    Procedure TForm1.CMDialogKey(Var Msg: TWMKey); 
    Begin 
       If NOT (ActiveControl Is TButton) Then 
          If Msg.Charcode = 13 Then 
             Msg.Charcode := 9; 
       inherited; 
    End;
Тем самым мы исключаем срабатывания нашей подмены, если фокус находится на кнопке.
Чтобы ускорить работу приложения, не надо активизировать свойство формы KEYPREVIEW.
0
Супер-модератор
Эксперт Pascal/DelphiАвтор FAQ
 Аватар для volvo
33399 / 21509 / 8236
Регистрация: 22.10.2011
Сообщений: 36,907
Записей в блоге: 12
12.02.2013, 10:45
Неправда, для Билдера тоже есть примеры. Например, на оф. форуме Эмбаркадеро. Но даже если и нет, вот дословно с Дельфи:

Header-файл:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
class TForm1 : public TForm // твой класс формы
{
__published:    // IDE-managed Components
 
        // Тут все контролы
 
private:    // User declarations
 
protected: // Добавляем это
    void __fastcall CMDialogKey(TCMDialogKey& msg);
    BEGIN_MESSAGE_MAP
        MESSAGE_HANDLER(CM_DIALOGKEY, TCMDialogKey, CMDialogKey)
    END_MESSAGE_MAP(TForm);
 
public:     // User declarations
    __fastcall TForm1(TComponent* Owner);
};
// ...
// и реализация в CPP-файле:
C++
1
2
3
4
5
6
7
8
void __fastcall TForm1::CMDialogKey(TCMDialogKey& msg)
{
    if(!dynamic_cast<TButton*>(ActiveControl))
    {
        if(msg.CharCode == 13) msg.CharCode = 9;
    }
    TForm::Dispatch(&msg);
}
2
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
12.02.2013, 10:45
Помогаю со студенческими работами здесь

Программное нажатие кнопок
Здравствуйте, уважаемые форумчане! Пришла в голову мысль сделать программу, которая могла бы программно нажимать книпки, например...

Программное нажатие кнопок
Доброе время суток. У меня проблема. Необходимо чтоб программа в некоторых случаях сама нажимала кнопки (программно) имеющиеся на форме. В...

Программное нажатие кнопки
Добрый день! Вопрос знатокам. Как программно нажать кнопку (Button1-&gt;Clik) 3 раза с интервалом в 1 секунду. Компонент...

Программное нажатие кнопок другой программы
Извините за измусоленную тему, но не получается сделать: нужно нажать кнопку в окне другой программы, пишу код: AnsiString as =...

Программное нажатие на Button, в Groupbox чужой программы
Помогите разобраться... Я создал 2 пробных программки, в первой поместил один button на форму, другой button в groupbox, из второй...


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

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
Новые блоги и статьи
Переходник USB-CAN-GPIO
Eddy_Em 20.03.2026
Достаточно давно на работе возникла необходимость в переходнике CAN-USB с гальваноразвязкой, оный и был разработан. Однако, все меня терзала совесть, что аж 48-ногий МК используется так тупо: просто. . .
Оттенки серого
Argus19 18.03.2026
Оттенки серого Нашёл в интернете 3 прекрасных модуля: Модуль класса открытия диалога открытия/ сохранения файла на Win32 API; Модуль класса быстрого перекодирования цветного изображения в оттенки. . .
SDL3 для Desktop (MinGW): Рисуем цветные прямоугольники с помощью рисовальщика SDL3 на Си и C++
8Observer8 17.03.2026
Содержание блога Финальные проекты на Си и на C++: finish-rectangles-sdl3-c. zip finish-rectangles-sdl3-cpp. zip
Символические и жёсткие ссылки в Linux.
algri14 15.03.2026
Существует два типа ссылок — символические и жёсткие. Ссылка в Linux — это запись в каталоге, которая может указывать либо на inode «файла-ИСТОЧНИКА», тогда это будет «жёсткая ссылка» (hard link),. . .
[Owen Logic] Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора
ФедосеевПавел 14.03.2026
Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора ВВЕДЕНИЕ Выполняя задание на управление насосной группой заполнения резервуара,. . .
делаю науч статью по влиянию грибов на сукцессию
anaschu 13.03.2026
прикрепляю статью
SDL3 для Desktop (MinGW): Создаём пустое окно с нуля для 2D-графики на SDL3, Си и C++
8Observer8 10.03.2026
Содержание блога Финальные проекты на Си и на C++: hello-sdl3-c. zip hello-sdl3-cpp. zip Результат:
Установка CMake и MinGW 13.1 для сборки С и C++ приложений из консоли и из Qt Creator в EXE
8Observer8 10.03.2026
Содержание блога MinGW - это коллекция инструментов для сборки приложений в EXE. CMake - это система сборки приложений. Здесь описаны базовые шаги для старта программирования с помощью CMake и. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru