Форум программистов, компьютерный форум, киберфорум
Наши страницы
C++ Builder
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.59/17: Рейтинг темы: голосов - 17, средняя оценка - 4.59
[XandeR]
29 / 29 / 3
Регистрация: 18.03.2009
Сообщений: 381
Записей в блоге: 2
1

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

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

Подскажите пожл как осуществить подобное действие, в принципе нажатие на клавишу enter я итак знаю как отловить но незнаю какой функцией програмно нажать таб. Знаю что вопрос по програмному нажатию клавиш уже поднимался но я не смог найти ничего путного на форуме. В общем так:
C++
1
if (Key==VK_RETURN){[функция програмного нажатия таб];}
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
26.09.2009, 11:39
Ответы с готовыми решениями:

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

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

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

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

Программное нажатие кнопки
Добрый день! Вопрос знатокам. Как программно нажать кнопку...

6
Lord_Voodoo
Супер-модератор
8609 / 2237 / 133
Регистрация: 07.03.2007
Сообщений: 10,826
Завершенные тесты: 1
26.09.2009, 11:44 2
вам поможет апишная функция:
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]
29 / 29 / 3
Регистрация: 18.03.2009
Сообщений: 381
Записей в блоге: 2
27.09.2009, 14:17  [ТС] 3
эмм, честно говоря мне не понятно как это работает
0
Lord_Voodoo
Супер-модератор
8609 / 2237 / 133
Регистрация: 07.03.2007
Сообщений: 10,826
Завершенные тесты: 1
27.09.2009, 14:42 4
[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 5
keybd_event(VK_TAB,0,1,0);

Добавлено через 2 минуты
Извините,VoodooMan, не увидел Ваш пост, да и написал не то.
0
+1
320 / 153 / 53
Регистрация: 24.08.2010
Сообщений: 1,024
12.02.2013, 09:41 6
Ребят, мне нужно с точностью до наоборот, подменить 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
volvo
Супер-модератор
Эксперт Pascal/DelphiАвтор FAQ
26101 / 17501 / 6943
Регистрация: 22.10.2011
Сообщений: 30,824
Записей в блоге: 6
12.02.2013, 10:45 7
Неправда, для Билдера тоже есть примеры. Например, на оф. форуме Эмбаркадеро. Но даже если и нет, вот дословно с Дельфи:

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);
}
1
12.02.2013, 10:45
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
12.02.2013, 10:45

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

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

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


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

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru