MQL5Book/Indicators/p5/EventMouseWheel.mq5
super.admin 1c8e83ce31 convert
2025-05-30 16:09:41 +02:00

82 lines
2.8 KiB
MQL5

//+------------------------------------------------------------------+
//| EventMouseWheel.mq5 |
//| Copyright 2021, MetaQuotes Ltd. |
//| https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "2021, MetaQuotes Ltd."
#property link "https://www.mql5.com"
#property description "Intercept and log mouse wheel events."
#property indicator_chart_window
#property indicator_buffers 0
#property indicator_plots 0
#define KEY_FLAG_NUMBER 7
const string keyNameByBit[KEY_FLAG_NUMBER] =
{
"[Left Mouse] ",
"[Right Mouse] ",
"(Shift) ",
"(Ctrl) ",
"[Middle Mouse] ",
"[Ext1 Mouse] ",
"[Ext2 Mouse] ",
};
bool mouseWheel;
//+------------------------------------------------------------------+
//| Custom indicator initialization function |
//+------------------------------------------------------------------+
void OnInit()
{
mouseWheel = (bool)ChartGetInteger(0, CHART_EVENT_MOUSE_WHEEL);
ChartSetInteger(0, CHART_EVENT_MOUSE_WHEEL, true);
}
//+------------------------------------------------------------------+
//| Custom indicator iteration function |
//| (dummy here, required for indicator) |
//+------------------------------------------------------------------+
int OnCalculate(const int rates_total,
const int prev_calculated,
const int begin,
const double &price[])
{
return rates_total;
}
//+------------------------------------------------------------------+
//| Chart event handler |
//+------------------------------------------------------------------+
void OnChartEvent(const int id, const long &lparam, const double &dparam, const string &sparam)
{
if(id == CHARTEVENT_MOUSE_WHEEL)
{
const int keymask = (int)(lparam >> 32);
const short x = (short)lparam;
const short y = (short)(lparam >> 16);
const short delta = (short)dparam;
string message = "";
for(int i = 0; i < KEY_FLAG_NUMBER; ++i)
{
if(((1 << i) & keymask) != 0)
{
message += keyNameByBit[i];
}
}
PrintFormat("X=%d Y=%d D=%d %s", x, y, delta, message);
}
}
//+------------------------------------------------------------------+
//| Finalization handler |
//+------------------------------------------------------------------+
void OnDeinit(const int)
{
ChartSetInteger(0, CHART_EVENT_MOUSE_WHEEL, mouseWheel);
}
//+------------------------------------------------------------------+