В первую очередь пример был написан, чтобы показать как изменить параметры форм и окон диалогов, для которых сейчас нет методов.
Если нужно, чтобы форма реагировала на смену входных параметров - нужно каждый раз убивать и создавать форму заново.
ControlsBmpButton.mq5 version "1.002"
Кстати, если создавать панель на базе CAppDialog в индикаторе, то undef, затем входной параметр и define позволяет применять изменения без принудительного пересоздания панели:
Вопрос от чайника. Если правильно понимаю по дефолту панель имеет привязку к левому
верхнему углу активного графика. Хотелось бы привязать к правому нижнему. Надеялся что есть что-то типа ENUM_BASE_CORNER
CORNER_RIGHT_LOWER как для объектов. Такой возможности не нашел. Тогда сделал привязку через координаты правого нижнего угла. Вот так.
#property strict#include <Controls\Dialog.mqh>
#include <Controls\Button.mqh>
//+------------------------------------------------------------------+//| Expert initialization function |//+------------------------------------------------------------------+intOnInit() {
int pos_right =(int)ChartGetInteger(0,CHART_WIDTH_IN_PIXELS,0);
int pos_bottom=(int)ChartGetInteger(0,CHART_HEIGHT_IN_PIXELS,0); int width=340;
int height=80;
//--- create application dialogif(!ExtDialog.Create(0,"Close Buttons",0,pos_right-width,pos_bottom-height,pos_right,pos_bottom))
return(INIT_FAILED);
//--- run application
ExtDialog.Run();
//--- succeedreturn(INIT_SUCCEEDED);
}
//+------------------------------------------------------------------+//| Expert deinitialization function |//+------------------------------------------------------------------+voidOnDeinit(constint reason) {
//--- clear commentsComment("");
//--- destroy dialog
ExtDialog.Destroy(reason);
}
//+------------------------------------------------------------------+//| Expert tick function |//+------------------------------------------------------------------+voidOnTick() {
}
//+------------------------------------------------------------------+//+------------------------------------------------------------------+//| ControlsButton.mq5 |//+------------------------------------------------------------------+//--- indents and gaps#define INDENT_LEFT (11) // indent from left (with allowance for border width)#define INDENT_TOP (11) // indent from top (with allowance for border width)#define INDENT_RIGHT (11) // indent from right (with allowance for border width)#define INDENT_BOTTOM (11) // indent from bottom (with allowance for border width)#define CONTROLS_GAP_X (5) // gap by X coordinate#define CONTROLS_GAP_Y (5) // gap by Y coordinate//--- for buttons#define BUTTON_WIDTH (100) // size by X coordinate#define BUTTON_HEIGHT (20) // size by Y coordinate//--- for the indication area#define EDIT_HEIGHT (0) // size by Y coordinate//+------------------------------------------------------------------+//| Class CControlsDialog |//| Usage: main dialog of the Controls application |//+------------------------------------------------------------------+class CControlsDialog : public CAppDialog
{
private:
CButton m_button1; // the button objectpublic:
CControlsDialog(void);
~CControlsDialog(void);
//--- createvirtualbool Create(constlong chart,conststring name,constint subwin,constint x1,constint y1,constint x2,constint y2);
//--- chart event handlervirtualbool OnEvent(constint id,constlong &lparam,constdouble &dparam,conststring &sparam);
protected:
//--- create dependent controlsbool CreateButton1(void);
//--- handlers of the dependent controls eventsvoid OnClickButton1(void);
};
//+------------------------------------------------------------------+//| Event Handling |//+------------------------------------------------------------------+
EVENT_MAP_BEGIN(CControlsDialog)
ON_EVENT(ON_CLICK,m_button1,OnClickButton1)
EVENT_MAP_END(CAppDialog)
//+------------------------------------------------------------------+//| Constructor |//+------------------------------------------------------------------+
CControlsDialog::CControlsDialog(void)
{
}
//+------------------------------------------------------------------+//| Destructor |//+------------------------------------------------------------------+
CControlsDialog::~CControlsDialog(void)
{
}
//+------------------------------------------------------------------+//| Create |//+------------------------------------------------------------------+bool CControlsDialog::Create(constlong chart,conststring name,constint subwin,constint x1,constint y1,constint x2,constint y2)
{
if(!CAppDialog::Create(chart,name,subwin,x1,y1,x2,y2))
return(false);
//--- create dependent controlsif(!CreateButton1())
return(false);
//--- succeedreturn(true);
}
//+------------------------------------------------------------------+//| Create the "Cl-Buy" button |//+------------------------------------------------------------------+bool CControlsDialog::CreateButton1(void)
{
//--- coordinatesint x1=INDENT_RIGHT;
int y1=INDENT_TOP+(EDIT_HEIGHT+CONTROLS_GAP_Y);
int x2=x1+BUTTON_WIDTH;
int y2=y1+BUTTON_HEIGHT;
//--- create
m_button1.ColorBackground(clrLime);
if(!m_button1.Create(m_chart_id,m_name+"Cl-Buy",m_subwin,x1,y1,x2,y2))
return(false);
if(!m_button1.Text("Cl-Buy"))
return(false);
if(!Add(m_button1))
return(false);
//--- succeedreturn(true);
}
//+------------------------------------------------------------------+//+------------------------------------------------------------------+//| Event handler |//+------------------------------------------------------------------+void CControlsDialog::OnClickButton1(void)
{
Comment("Button Buy was pressed.");
}
//+------------------------------------------------------------------+//+------------------------------------------------------------------+//| Global Variables |//+------------------------------------------------------------------+
CControlsDialog ExtDialog;
//+------------------------------------------------------------------+//| Expert chart event function |//+------------------------------------------------------------------+voidOnChartEvent(constint id, // event ID constlong& lparam, // event parameter of the long typeconstdouble& dparam, // event parameter of the double typeconststring& sparam) // event parameter of the string type
{
ExtDialog.ChartEvent(id,lparam,dparam,sparam);
}
//+------------------------------------------------------------------+
Работает. Панель переместилась в правый нижний угол. Но проблема в том что если уменьшаю размеры окна активного графика, то панель уходит за его
пределы.
Подскажите пожалуйста:
Есть ли возможность более простой привязки правому нижнему или любому другому кроме дефолтного углу графика без вычисления его
координат?
Как сделать чтобы панель сохраняла привязку и не уходила за пределы графика при его сжатии?
Графические объекты Text, Label, Bitmap и Bitmap Label (OBJ_TEXT, OBJ_LABEL, OBJ_BITMAP и OBJ_BITMAP_LABEL) могут иметь один из 9 различных способов привязки своих координат, задаваемых свойством OBJPROP_ANCHOR. – объекты имеет ширину и высоту. Если указано "только для чтения", то это означает, что значения ширины и высоты...
Вопрос от чайника. Если правильно понимаю по дефолту панель имеет привязку к левому
верхнему углу активного графика. Хотелось бы привязать к правому нижнему. Надеялся что есть что-то типа
ENUM_BASE_CORNER CORNER_RIGHT_LOWER как для объектов. Такой возможности не нашел. Тогда сделал привязку через координаты правого
нижнего угла. Вот так.
Работает. Панель переместилась в правый нижний угол. Но проблема в том что если уменьшаю размеры окна активного графика, то панель уходит за
его пределы.
Подскажите пожалуйста:
Есть ли возможность более простой привязки правому нижнему или любому другому кроме дефолтного углу графика без вычисления его
координат?
Как сделать чтобы панель сохраняла привязку и не уходила за пределы графика при его сжатии?
Спасибо за оперативный ответ. Сделал вот так, но к желаемому результату не привело. Подскажите пожалуйста в чем ошибка.
Попробуйте в такой последовательности (в подробности реализации переменных не вникал)
//+------------------------------------------------------------------+//| Expert chart event function |//+------------------------------------------------------------------+voidOnChartEvent(constint id, // event ID constlong& lparam, // event parameter of the long typeconstdouble& dparam, // event parameter of the double typeconststring& sparam) // event parameter of the string type
{
if(id == CHARTEVENT_CHART_CHANGE)
{
pos_right =(int)ChartGetInteger(0,CHART_WIDTH_IN_PIXELS,0);
pos_bottom=(int)ChartGetInteger(0,CHART_HEIGHT_IN_PIXELS,0);
}
ExtDialog.ChartEvent(id,lparam,dparam,sparam);
ChartRedraw();
}
//+------------------------------------------------------------------+
Спасибо. Все попробовал, но проблему решить таким способом не удалось.
Панель по-прежнему уходит за пределы окна при уменьшении его размеров. Вот так.
Там есть метод Move()
Вот так должно работать.
//+------------------------------------------------------------------+//| Expert chart event function |//+------------------------------------------------------------------+voidOnChartEvent(constint id, // event ID constlong& lparam, // event parameter of the long typeconstdouble& dparam, // event parameter of the double typeconststring& sparam) // event parameter of the string type
{
ExtDialog.ChartEvent(id,lparam,dparam,sparam);
pos_right =(int)ChartGetInteger(0,CHART_WIDTH_IN_PIXELS,0);
pos_bottom=(int)ChartGetInteger(0,CHART_HEIGHT_IN_PIXELS,0);
Width=340;
Height=80;
ExtDialog.Move(pos_right-Width,pos_bottom-Height);
ChartRedraw();
}
Для авторизации и пользования сайтом MQL5.com необходимо разрешить использование файлов Сookie.
Пожалуйста, включите в вашем браузере данную настройку, иначе вы не сможете авторизоваться.
Вы вошли в аккаунт. Двухфакторная аутентификация отключена. Настройте её заново и отсканируйте новый QR-код или продолжите с отключённой двухфакторной аутентификацией.
И это работает при изменении значения через окно входных параметров??
В первую очередь пример был написан, чтобы показать как изменить параметры форм и окон диалогов, для которых сейчас нет методов.
Если нужно, чтобы форма реагировала на смену входных параметров - нужно каждый раз убивать и создавать форму заново.
ControlsBmpButton.mq5
version "1.002"
В первую очередь пример был написан, чтобы показать как изменить параметры форм и окон диалогов, для которых сейчас нет методов.
Если нужно, чтобы форма реагировала на смену входных параметров - нужно каждый раз убивать и создавать форму заново.
ControlsBmpButton.mq5
version "1.002"
Кстати, если создавать панель на базе CAppDialog в индикаторе, то undef, затем входной параметр и define позволяет применять изменения без принудительного пересоздания панели:
а всё потому, что при смене входных параметров индикаторы загружаются заново. Справка Выполение программ
Загрузка и выгрузка индикаторов
Индикаторы загружаются в следующих случаях:
Индикатор
ControlsBmpButton INDICATOR.mq5 |
version "1.000"
Цвет, шрифт ... это понятно.
Вопрос от чайника. Если правильно понимаю по дефолту панель имеет привязку к левому верхнему углу активного графика. Хотелось бы привязать к правому нижнему. Надеялся что есть что-то типа ENUM_BASE_CORNER CORNER_RIGHT_LOWER как для объектов. Такой возможности не нашел. Тогда сделал привязку через координаты правого нижнего угла. Вот так.
Работает. Панель переместилась в правый нижний угол. Но проблема в том что если уменьшаю размеры окна активного графика, то панель уходит за его пределы.
Подскажите пожалуйста:
Цвет, шрифт ... это понятно.
Вопрос от чайника. Если правильно понимаю по дефолту панель имеет привязку к левому верхнему углу активного графика. Хотелось бы привязать к правому нижнему. Надеялся что есть что-то типа ENUM_BASE_CORNER CORNER_RIGHT_LOWER как для объектов. Такой возможности не нашел. Тогда сделал привязку через координаты правого нижнего угла. Вот так.
Работает. Панель переместилась в правый нижний угол. Но проблема в том что если уменьшаю размеры окна активного графика, то панель уходит за его пределы.
Подскажите пожалуйста:
Пересчитывайте координаты в OnChartEvent()
Спасибо за оперативный ответ. Сделал вот так, но к желаемому результату не привело. Подскажите пожалуйста в чем ошибка.
Спасибо за оперативный ответ. Сделал вот так, но к желаемому результату не привело. Подскажите пожалуйста в чем ошибка.
Координаты пересчитывать нужно когда id==CHARTEVENT_CHART_CHANGE.
А вот куда их записывать в панели - тут не подскажу - не работал никогда со стандартными. Мне проще со своими.
Спасибо за оперативный ответ. Сделал вот так, но к желаемому результату не привело. Подскажите пожалуйста в чем ошибка.
Попробуйте в такой последовательности (в подробности реализации переменных не вникал)
Координаты пересчитывать нужно когда id==CHARTEVENT_CHART_CHANGE.
А вот куда их записывать в панели - тут не подскажу - не работал никогда со стандартными. Мне проще со своими.
Попробуйте в такой последовательности (в подробности реализации переменных не вникал)
Спасибо. Все попробовал, но проблему решить таким способом не удалось.
Панель по-прежнему уходит за пределы окна при уменьшении его размеров. Вот так.
Спасибо. Все попробовал, но проблему решить таким способом не удалось.
Панель по-прежнему уходит за пределы окна при уменьшении его размеров. Вот так.
Там есть метод Move()
Вот так должно работать.
Там есть метод Move()
Вот так должно работать.
ОГРОМНОЕ СПАСИБО тебе, добрый и умный человек!!!
Работает отлично. Как-то я упустил метод Move().