- Списки наложенных объектов - Дополнительные возможности - Графики котировок, технический и фундаментальный анализ
- Статусная строка - Рабочая область
- Горячие клавиши - Для продвинутых пользователей - Начало работы
Подскажите, пож, как в MT5 организовать реакцию советника на нажатие комбинации клавиш, например, Cntrl+Q. Отдельно каждую клавишу CHARTEVENT_KEYDOWN отрабатывает. А "поймать" комбинацию, не получается. PS: если вопрос не по теме, подскажите, где его можно задать. Спасибо
bool isCtrlKeyPressed(void) {return((TerminalInfoInteger((ENUM_TERMINAL_INFO_INTEGER)1017)&0x80)!=0);}
Большое спасибо, Артем! А как формируются коды для других комбинаций? Где это можно прочитать? Спасибо
Ну насчёт формирования других кодов - не встречал, а посмотреть что возвращается можно так:
//+------------------------------------------------------------------+ //| isKeyPressed.mq4 | //| Copyright 2015, Artem A. Trishkin, Skype artmedia70 | //| https://login.mql5.com/ru/users/artmedia70 | //+------------------------------------------------------------------+ #property copyright "Copyright 2015, Artem A. Trishkin, Skype artmedia70" #property link "https://login.mql5.com/ru/users/artmedia70" #property version "1.00" #property strict //+------------------------------------------------------------------+ //| Expert initialization function | //+------------------------------------------------------------------+ int OnInit() { //--- //--- return(INIT_SUCCEEDED); } //+------------------------------------------------------------------+ //| Expert deinitialization function | //+------------------------------------------------------------------+ void OnDeinit(const int reason) { //--- } //+------------------------------------------------------------------+ //| Expert tick function | //+------------------------------------------------------------------+ void OnTick() { //--- } //+------------------------------------------------------------------+ //| ChartEvent function | //+------------------------------------------------------------------+ void OnChartEvent(const int id, const long &lparam, const double &dparam, const string &sparam) { //--- string ctrl_key_txt=(isCtrlKeyPressed())?"\nCtrl key is pressed":"\nCtrl key is not pressed"; if(id==CHARTEVENT_KEYDOWN) { Alert("Key Code: "+IntegerToString(lparam)+"\nNumPress: "+DoubleToString(dparam,0)+"\nMask: "+sparam+ctrl_key_txt); } } //+------------------------------------------------------------------+ bool isCtrlKeyPressed(void) {return((TerminalInfoInteger((ENUM_TERMINAL_INFO_INTEGER)1017)&0x80)!=0);} //+------------------------------------------------------------------+
Просто выводит все параметры события в окно оповещения.
Ну насчёт формирования других кодов - не встречал, а посмотреть что возвращается можно так:
Просто выводит все параметры события в окно оповещения.
Еще раз спасибо. Если не затруднит, поясните, пож, что означают коды 1017 и шестнадцатиричный 0х80? Будут ли они "работать" для просмотра возвращаемых последовательностей с нажатым шифтом?
Shift, наскольк мне известно, не отслеживается терминалом. По-крайней мере не видел об этом от разработчиков ничего. Функцию эту выкладывали разработчики с пояснением, что нажатие Ctrl так можно отследить, но в справке об этом пока нет ничего, да и идентификатора свойства в перечислении ENUM_TERMINAL_INFO_INTEGER функции TerminalInfoInteger(), возвращающего состояние Ctrl пока нету в справке.
Shift, наскольк мне известно, не отслеживается терминалом. По-крайней мере не видел об этом от разработчиков ничего. Функцию эту выкладывали разработчики с пояснением, что нажатие Ctrl так можно отследить, но в справке об этом пока нет ничего, да и идентификатора свойства в перечислении ENUM_TERMINAL_INFO_INTEGER функции TerminalInfoInteger(), возвращающего состояние Ctrl пока нету в справке.
Для получения состояния клавиши SHIFT - 1016, ALT - 1018
Клавиши Left, Up, Right, Down - 1037,1038,1039,1040 соответственно
Для получения состояния клавиши SHIFT - 1016, ALT - 1018
Клавиши Left, Up, Right, Down - 1037,1038,1039,1040 соответственно

Для получения состояния клавиши SHIFT - 1016, ALT - 1018
Клавиши Left, Up, Right, Down - 1037,1038,1039,1040 соответственно
Такой код не ловит кнопку Alt. Что не так?
//+------------------------------------------------------------------+ //| isKeyPressed.mq4 | //| Copyright 2015, Artem A. Trishkin, Skype artmedia70 | //| https://login.mql5.com/ru/users/artmedia70 | //+------------------------------------------------------------------+ #property copyright "Copyright 2015, Artem A. Trishkin, Skype artmedia70" #property link "https://login.mql5.com/ru/users/artmedia70" #property version "1.00" #property strict //--- //Для получения состояния клавиши SHIFT - 1016, CTRL - 1017, ALT - 1018 //Клавиши Left, Up, Right, Down - 1037,1038,1039,1040 соответственно//--- #define KEY_SHIFT 1016 #define KEY_CTRL 1017 #define KEY_ALT 1018 #define KEY_LEFT 1037 #define KEY_UP 1038 #define KEY_RIGHT 1039 #define KEY_DOWN 1040 //+------------------------------------------------------------------+ //| Expert initialization function | //+------------------------------------------------------------------+ int OnInit() { //--- //--- return(INIT_SUCCEEDED); } //+------------------------------------------------------------------+ //| Expert deinitialization function | //+------------------------------------------------------------------+ void OnDeinit(const int reason) { //--- } //+------------------------------------------------------------------+ //| Expert tick function | //+------------------------------------------------------------------+ void OnTick() { //--- } //+------------------------------------------------------------------+ //| ChartEvent function | //+------------------------------------------------------------------+ void OnChartEvent(const int id, const long &lparam, const double &dparam, const string &sparam) { string control_key_txt=(isCtrlKeyPressed(KEY_SHIFT))?"\nShift key is pressed": (isCtrlKeyPressed(KEY_CTRL))?"\nCtrl key is pressed": (isCtrlKeyPressed(KEY_ALT))?"\nAlt key is pressed": (isCtrlKeyPressed(KEY_LEFT))?"\nLeft key is pressed": (isCtrlKeyPressed(KEY_UP))?"\nUp key is pressed": (isCtrlKeyPressed(KEY_RIGHT))?"\nRight key is pressed": (isCtrlKeyPressed(KEY_DOWN))?"\nDown key is pressed": "\nControl key is not pressed"; if(id==CHARTEVENT_KEYDOWN) { Alert("Key Code: "+IntegerToString(lparam)+"\nNumPress: "+DoubleToString(dparam,0)+"\nMask: "+sparam+control_key_txt); } } //+------------------------------------------------------------------+ bool isCtrlKeyPressed(int key_code) {return((TerminalInfoInteger((ENUM_TERMINAL_INFO_INTEGER)key_code)&0x80)!=0);} //+------------------------------------------------------------------+

- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Вы принимаете политику сайта и условия использования