146 行
6.9 KiB
MQL5
146 行
6.9 KiB
MQL5
|
|
//+------------------------------------------------------------------+
|
||
|
|
//| iTestTable.mq5 |
|
||
|
|
//| Copyright 2025, MetaQuotes Ltd. |
|
||
|
|
//| https://www.mql5.com |
|
||
|
|
//+------------------------------------------------------------------+
|
||
|
|
#property copyright "Copyright 2025, MetaQuotes Ltd."
|
||
|
|
#property link "https://www.mql5.com"
|
||
|
|
#property version "1.00"
|
||
|
|
#property indicator_separate_window
|
||
|
|
#property indicator_buffers 0
|
||
|
|
#property indicator_plots 0
|
||
|
|
|
||
|
|
//+------------------------------------------------------------------+
|
||
|
|
//| Включаемые библиотеки |
|
||
|
|
//+------------------------------------------------------------------+
|
||
|
|
#include "Controls\Controls.mqh" // Библиотека элементов управления
|
||
|
|
|
||
|
|
//--- Указатель на объект CTableControl
|
||
|
|
CTableControl *table_ctrl;
|
||
|
|
|
||
|
|
//+------------------------------------------------------------------+
|
||
|
|
//| Custom indicator initialization function |
|
||
|
|
//+------------------------------------------------------------------+
|
||
|
|
int OnInit()
|
||
|
|
{
|
||
|
|
//--- Ищем подокно графика
|
||
|
|
int wnd=ChartWindowFind();
|
||
|
|
|
||
|
|
//--- Создаём данные для таблицы
|
||
|
|
//--- Объявляем и заполняем массив заголовков столбцов с размерностью 4
|
||
|
|
string captions[]={"Column 0","Column 1","Column 2","Column 3"};
|
||
|
|
|
||
|
|
//--- Объявляем и заполняем массив данных с размерностью 15x4
|
||
|
|
//--- Тип массива может быть double, long, datetime, color, string
|
||
|
|
long array[15][4]={{ 1, 2, 3, 4},
|
||
|
|
{ 5, 6, 7, 8},
|
||
|
|
{ 9, 10, 11, 12},
|
||
|
|
{13, 14, 15, 16},
|
||
|
|
{17, 18, 19, 20},
|
||
|
|
{21, 22, 23, 24},
|
||
|
|
{25, 26, 27, 28},
|
||
|
|
{29, 30, 31, 32},
|
||
|
|
{33, 34, 35, 36},
|
||
|
|
{37, 38, 39, 40},
|
||
|
|
{41, 42, 43, 44},
|
||
|
|
{45, 46, 47, 48},
|
||
|
|
{49, 50, 51, 52},
|
||
|
|
{53, 54, 55, 56},
|
||
|
|
{57, 58, 59, 60}};
|
||
|
|
|
||
|
|
//--- Создаём графический элемент управления таблицами
|
||
|
|
table_ctrl=new CTableControl("TableControl0",0,wnd,30,30,460,184);
|
||
|
|
if(table_ctrl==NULL)
|
||
|
|
return INIT_FAILED;
|
||
|
|
|
||
|
|
//--- На графике обязательно должен быть один главный элемент
|
||
|
|
table_ctrl.SetAsMain();
|
||
|
|
|
||
|
|
//--- Можно установить параметры элемента управления таблицами
|
||
|
|
table_ctrl.SetID(0); // Идентификатор
|
||
|
|
table_ctrl.SetName("Table Control 0"); // Наименование
|
||
|
|
|
||
|
|
//--- Создаём объект таблицы 0 (компонент Model + View) из вышесозданного long-массива array 15x4 и string-массива заголовков столбцов
|
||
|
|
if(table_ctrl.TableCreate(array,captions)==NULL)
|
||
|
|
return INIT_FAILED;
|
||
|
|
|
||
|
|
//--- Дополнительно установим для столбцов 1,2,3 вывод текста по центру ячейки, а для столбца 0 - по левому краю
|
||
|
|
table_ctrl.ColumnSetTextAnchor(0,0,ANCHOR_LEFT,true,false);
|
||
|
|
table_ctrl.ColumnSetTextAnchor(0,1,ANCHOR_CENTER,true,false);
|
||
|
|
table_ctrl.ColumnSetTextAnchor(0,2,ANCHOR_CENTER,true,false);
|
||
|
|
table_ctrl.ColumnSetTextAnchor(0,3,ANCHOR_CENTER,true,false);
|
||
|
|
|
||
|
|
//--- Нарисуем таблицу
|
||
|
|
table_ctrl.Draw(true);
|
||
|
|
|
||
|
|
//--- Получим таблицу с индексом 0 и распечатаем в журнале
|
||
|
|
CTable *table=table_ctrl.GetTable(0);
|
||
|
|
table.Print();
|
||
|
|
|
||
|
|
//--- Успешно
|
||
|
|
return(INIT_SUCCEEDED);
|
||
|
|
}
|
||
|
|
//+------------------------------------------------------------------+
|
||
|
|
//| Custom deindicator initialization function |
|
||
|
|
//+------------------------------------------------------------------+
|
||
|
|
void OnDeinit(const int reason)
|
||
|
|
{
|
||
|
|
//--- Удаляем элемент управления таблицами и уничтожаем менеджер общих ресурсов библиотеки
|
||
|
|
delete table_ctrl;
|
||
|
|
CCommonManager::DestroyInstance();
|
||
|
|
}
|
||
|
|
//+------------------------------------------------------------------+
|
||
|
|
//| Custom indicator iteration function |
|
||
|
|
//+------------------------------------------------------------------+
|
||
|
|
int OnCalculate(const int rates_total,
|
||
|
|
const int prev_calculated,
|
||
|
|
const datetime &time[],
|
||
|
|
const double &open[],
|
||
|
|
const double &high[],
|
||
|
|
const double &low[],
|
||
|
|
const double &close[],
|
||
|
|
const long &tick_volume[],
|
||
|
|
const long &volume[],
|
||
|
|
const int &spread[])
|
||
|
|
{
|
||
|
|
//---
|
||
|
|
|
||
|
|
//--- return value of prev_calculated for next call
|
||
|
|
return(rates_total);
|
||
|
|
}
|
||
|
|
//+------------------------------------------------------------------+
|
||
|
|
//| ChartEvent function |
|
||
|
|
//+------------------------------------------------------------------+
|
||
|
|
void OnChartEvent(const int id,
|
||
|
|
const long &lparam,
|
||
|
|
const double &dparam,
|
||
|
|
const string &sparam)
|
||
|
|
{
|
||
|
|
//--- Вызываем обработчик OnChartEvent элемента управления таблицами
|
||
|
|
table_ctrl.OnChartEvent(id,lparam,dparam,sparam);
|
||
|
|
|
||
|
|
//--- Если событие - перемещение курсора мышки
|
||
|
|
if(id==CHARTEVENT_MOUSE_MOVE)
|
||
|
|
{
|
||
|
|
//--- получаем координаты курсора
|
||
|
|
int x=table_ctrl.CursorX();
|
||
|
|
int y=table_ctrl.CursorY();
|
||
|
|
|
||
|
|
//--- значение координаты X устанавливаем в ячейку 0 строки 1
|
||
|
|
table_ctrl.CellSetValue(0,1,0,x,false);
|
||
|
|
|
||
|
|
//--- значение координаты Y устанавливаем в ячейку 1 строки 1
|
||
|
|
//--- цвет текста в ячейке зависит от знака координаты Y (при отрицательном значении - красный текст)
|
||
|
|
table_ctrl.CellSetForeColor(0,1,1,(y<0 ? clrRed : table_ctrl.ForeColor()),false);
|
||
|
|
table_ctrl.CellSetValue(0,1,1,y,true);
|
||
|
|
}
|
||
|
|
}
|
||
|
|
//+------------------------------------------------------------------+
|
||
|
|
//| Таймер |
|
||
|
|
//+------------------------------------------------------------------+
|
||
|
|
void OnTimer(void)
|
||
|
|
{
|
||
|
|
//--- Вызываем обработчик OnTimer элемента управления таблицами
|
||
|
|
table_ctrl.OnTimer();
|
||
|
|
}
|
||
|
|
//+------------------------------------------------------------------+
|