Вопрос экспертам, всё же как совместить нажатие ЛКМ и кнопки клавиатуры? - страница 2

 

подправил блок

void OnChartEvent(const int id,
                  const long &lparam,
                  const double &dparam,
                  const string &sparam)
  {
//---
     if(id==CHARTEVENT_MOUSE_MOVE)
      Comment("POINT: ",(int)lparam,",",(int)dparam,"\n",MouseState((uint)sparam)); 
      Print("sparam= ", sparam);
  }
Метод тыка - наше все.
 
Denis Vasyutin #:
Хотя нет, все дали, дальше я не докурил доки

Спасибо большое что ответили, это самое близкое что могло быть, я столько информации перерыл но нигде такое не смог найти, могли бы вы еще код упростить чтобы по нажатию на лкм и контр(например) что-то происходило
Пробывал так:

void OnChartEvent(const int id,
                  const long &lparam,
                  const double &dparam,
                  const string &sparam)
  {
//---
     if(id==CHARTEVENT_MOUSE_MOVE) {
      	if (((uint)sparam & 9)==9) {
               PutButton("BUTON2",33,103,"BUTON2", true); // тут я просто показываю кнопку
      	}
      }
  }

Но ничего не работает, а точнее работает только при условии что нажат CNTR + ЛКМ

 
vebster005 #:

Спасибо большое что ответили, это самое близкое что могло быть, я столько информации перерыл но нигде такое не смог найти, могли бы вы еще код упростить чтобы по нажатию на лкм и контр(например) что-то происходило
Пробывал так:

Но ничего не работает, а точнее работает только при условии что нажат CNTR + ЛКМ

То  есть вы считаете что я изначально знаю больше вашего.

Далее методом тыка

//+------------------------------------------------------------------+
//|                                                   MOUSE_MOVE.mq4 |
//|                        Copyright 2022, MetaQuotes Software Corp. |
//|                                             https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2022, MetaQuotes Software Corp."
#property link      "https://www.mql5.com"
#property version   "1.00"
#property strict


uint state;
//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit()
  {
//---
  //--- включение сообщений о перемещении мыши по окну чарта
   ChartSetInteger(0,CHART_EVENT_MOUSE_MOVE,1);
//--- отключаем контекстное меню чарта (по правой кнопке)   
   ChartSetInteger(0,CHART_CONTEXT_MENU,0);     
//--- отключаем перекрестие (по средней кнопке)      
   ChartSetInteger(0,CHART_CROSSHAIR_TOOL,0); 
//--- принудительное обновление свойств графика гарантирует готовность к обработке событий
   ChartRedraw(); 
//---
   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)
  {
//---
     if(id==CHARTEVENT_MOUSE_MOVE)
        {
        state=(uint)sparam;
        if ((state& 8)== 8)
            {
            Print("sparam= ", sparam);
            }
        if ((state& 4)== 4)
            {
            Print("sparam= ", sparam);
            }
       }        
       
  }
//+------------------------------------------------------------------+

Человек передо мной вам дал тот же ответ, но менее развернутый,

и дал возможность его докрутить.

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

 

откуда берется и что такое (state& 4) или (state& 8) и т.д. - понятия не имею

взято из доков

https://www.mql5.com/ru/docs/event_handlers/onchartevent

по логике ссылки на клавиши shift  и control 

Документация по MQL5: Обработка событий / OnChartEvent
Документация по MQL5: Обработка событий / OnChartEvent
  • www.mql5.com
OnChartEvent - Обработка событий - Справочник MQL5 - Справочник по языку алгоритмического/автоматического трейдинга для MetaTrader 5
 
Продолжаем в развитии темы - мышку то зачем мучать, когда есть
//+------------------------------------------------------------------+
//|                                                   MOUSE_MOVE.mq4 |
//|                        Copyright 2022, MetaQuotes Software Corp. |
//|                                             https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2022, MetaQuotes Software Corp."
#property link      "https://www.mql5.com"
#property version   "1.00"
#property strict
//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit()
  {
//---
  //--- включение сообщений о перемещении мыши по окну чарта
   ChartSetInteger(0,CHART_EVENT_MOUSE_MOVE,1);
//--- отключаем контекстное меню чарта (по правой кнопке)   
   ChartSetInteger(0,CHART_CONTEXT_MENU,0);     
//--- отключаем перекрестие (по средней кнопке)      
   ChartSetInteger(0,CHART_CROSSHAIR_TOOL,0); 
//--- принудительное обновление свойств графика гарантирует готовность к обработке событий
   ChartRedraw(); 
//---
   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)
  {
//---
     if(id==CHARTEVENT_KEYDOWN)
     {
      Print("lparam= ", lparam);
      switch((int)lparam)
        {      
         case 49:  Print("Нажата клавиша 1");   break;
         case 50:  Print("Нажата клавиша 2");   break;
         case 51:  Print("Нажата клавиша 3");   break;
         case 52:  Print("Нажата клавиша 4");   break;
         case 53:  Print("Нажата клавиша 5");   break;
         case 54:  Print("Нажата клавиша 6");   break;
         case 55:  Print("Нажата клавиша 7");   break;
         case 56:  Print("Нажата клавиша 8");   break;
         case 57:  Print("Нажата клавиша 9");   break;
         case 48:  Print("Нажата клавиша 0");   break;
         
         case 97:  Print("Нажата клавиша 1");   break;
         case 98:  Print("Нажата клавиша 2");   break;
         case 99:  Print("Нажата клавиша 3");   break;
         case 101:  Print("Нажата клавиша 4");   break;
         case 102:  Print("Нажата клавиша 5");   break;
         case 103:  Print("Нажата клавиша 6");   break;
         case 104:  Print("Нажата клавиша 7");   break;
         case 105:  Print("Нажата клавиша 8");   break;
         case 106:  Print("Нажата клавиша 9");   break;
         case 96:  Print("Нажата клавиша 0");   break;
                  
         default:  Print("Нажата какая-то неперечисленная клавиша");
         
         
        }
      
     }
  }
//+------------------------------------------------------------------+
 

Вводим последовательно цифры 1 5 7 2

//+------------------------------------------------------------------+
//|                                                NO_MOUSE_MOVE.mq4 |
//|                        Copyright 2022, MetaQuotes Software Corp. |
//|                                             https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2022, MetaQuotes Software Corp."
#property link      "https://www.mql5.com"
#property version   "1.00"
#property strict

int num1=1;
int num2=5;
int num3=7;
int num4=2;

int num=0;

int status=0;

//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit()
  {
//---
  //--- включение сообщений о перемещении мыши по окну чарта
   ChartSetInteger(0,CHART_EVENT_MOUSE_MOVE,1);
//--- отключаем контекстное меню чарта (по правой кнопке)   
   ChartSetInteger(0,CHART_CONTEXT_MENU,0);     
//--- отключаем перекрестие (по средней кнопке)      
   ChartSetInteger(0,CHART_CROSSHAIR_TOOL,0); 
//--- принудительное обновление свойств графика гарантирует готовность к обработке событий
   ChartRedraw(); 
//---
   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)
  {
//---
     if(id==CHARTEVENT_KEYDOWN)
     {
      Print("lparam= ", lparam);
      switch((int)lparam)
        {      
         case 49:  Print("Нажата клавиша 1"); num=1;  break;
         case 50:  Print("Нажата клавиша 2"); num=2;  break;
         case 51:  Print("Нажата клавиша 3"); num=3;  break;
         case 52:  Print("Нажата клавиша 4"); num=4;  break;
         case 53:  Print("Нажата клавиша 5"); num=5;  break;
         case 54:  Print("Нажата клавиша 6"); num=6;  break;
         case 55:  Print("Нажата клавиша 7"); num=7;  break;
         case 56:  Print("Нажата клавиша 8"); num=8;  break;
         case 57:  Print("Нажата клавиша 9"); num=9;  break;
         case 48:  Print("Нажата клавиша 0"); num=0;  break;
         
         case 97:  Print("Нажата клавиша 1"); num=1;  break;
         case 98:  Print("Нажата клавиша 2"); num=2;  break;
         case 99:  Print("Нажата клавиша 3"); num=3;  break;
         case 101:  Print("Нажата клавиша 4"); num=4;  break;
         case 102:  Print("Нажата клавиша 5"); num=5;  break;
         case 103:  Print("Нажата клавиша 6"); num=6;  break;
         case 104:  Print("Нажата клавиша 7"); num=7;  break;
         case 105:  Print("Нажата клавиша 8"); num=8;  break;
         case 106:  Print("Нажата клавиша 9"); num=9;  break;
         case 96:  Print("Нажата клавиша 0"); num=0;  break;
                  
         default:  Print("Нажата какая-то неперечисленная клавиша");
        }
      
      if ((status==0)&&(num==num1))
         {
            status=1; Print("status= ", status); return;
         }
      if ((status==1)&&(num==num2))
         {
            status=2; Print("status= ", status);  return;
         }
      if ((status==2)&&(num==num3))
         {
            status=3; Print("status= ", status);  return;
         }         
      if ((status==3)&&(num==num4))
         {
            status=0; Print("status= ", status);  
            MessageBox("вотоносчастьето","Задача решена"); return;
         }         
               
     }
  }
//+------------------------------------------------------------------+

и нефиг маяться ерундой.

Уродский код получился, упростить не удалось, не умею я по ссылке передавать

Причина обращения: