Здесь по нажатии кнопки элементы бид и аск должны добавляться на график и исчезать с него, но что-то пошло не так...
//+------------------------------------------------------------------+
//| MyPanel.mqh |
//| Copyright © 2013, DeltaTrader |
//| http://www.deltatrader.com.br |
//+------------------------------------------------------------------+
#property copyright "DeltaTrader © 2013"
#property link "www.deltatrader.com.br"
#property version "1.000"
#property description "Test Panel"
#property indicator_plots 0
//+------------------------------------------------------------------+
//| Includes |
//+------------------------------------------------------------------+
#include <Controls\Dialog.mqh>
#include <Controls\Label.mqh>
#include <Controls\Panel.mqh>
#include <Controls\Edit.mqh>
#include <Controls\Defines.mqh>
#include <Controls\Button.mqh>
//+------------------------------------------------------------------+
//| Global parameters |
//+------------------------------------------------------------------+
int panelXX = 200;
int panelYY = 200;
int panelWidth = 600;
int panelHeight = 400;
CAppDialog m_panel;
//--- Bid objects
CPanel m_bidcolor;
CLabel m_bidlabel;
//--- Ask objects
CPanel m_askcolor;
CLabel m_asklabel;
CEdit m_edit;
CButton m_button;
//+------------------------------------------------------------------+
//| On Init |
//+------------------------------------------------------------------+
int OnInit()
{
//--- Panel create
m_panel.Create(0,"blablabla",0,panelXX,panelYY,panelWidth,panelHeight);
//--- Bid label and colors
m_bidcolor.Create(0,"Bid Background Color",0,1,1,panelWidth-30,30);
m_bidcolor.ColorBackground(clrYellow);
m_panel.Add(m_bidcolor);
m_bidlabel.Create(0,"Bid Text",0,5,5,0,0);
m_bidlabel.Text("Bid "+DoubleToString(SymbolInfoDouble(_Symbol,SYMBOL_BID),_Digits));
m_bidlabel.Color(clrBlue);
m_panel.Add(m_bidlabel);
//--- Ask label and colors
m_askcolor.Create(0,"Ask Background Color",0,1,1,panelWidth-30,30);
m_askcolor.ColorBackground(clrAqua);
m_panel.Add(m_askcolor);
m_asklabel.Create(0,"Ask Text",0,5,30,0,0);
m_asklabel.Text("Ask "+DoubleToString(SymbolInfoDouble(_Symbol,SYMBOL_ASK),_Digits));
m_asklabel.Color(clrRed);
m_panel.Add(m_asklabel);
m_edit.Create(0,"Bid Background Color",0,1,1,panelWidth-30,30);
m_panel.Add(m_edit);
m_button.Create(0,"My button",0, 150,5,250,50);
m_button.Text("Show or hide");
m_panel.Add(m_button);
//--- Run panel
m_panel.Run();
return(0);
}
//+------------------------------------------------------------------+
//| On DeInit |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
{
//--- Destroy panel
m_panel.Destroy(reason);
//--- Delete all objects
ObjectsDeleteAll(0,0);
}
//+------------------------------------------------------------------+
//| On Calculate |
//+------------------------------------------------------------------+
int OnCalculate(const int rates_total,
const int prev_calculated,
const int begin,
const double &price[])
{
//--- A very simples bid label
m_bidlabel.Text("Bid "+DoubleToString(SymbolInfoDouble(_Symbol,SYMBOL_BID),_Digits));
//--- A very simples ask label
m_asklabel.Text("Ask "+DoubleToString(SymbolInfoDouble(_Symbol,SYMBOL_ASK),_Digits));
//---
return(rates_total);
}
//+------------------------------------------------------------------+
//| On Chart Event |
//+------------------------------------------------------------------+
void OnChartEvent(const int id,
const long &lparam,
const double &dparam,
const string &sparam)
{
//--- Move the panel with the mouse
m_panel.ChartEvent(id,lparam,dparam,sparam);
if(sparam == "My button")
{
if(m_button.Pressed())
{
m_bidlabel.Destroy();
m_asklabel.Destroy();
}
else
{
m_panel.Add(m_bidlabel);
m_panel.Add(m_asklabel);
}
}
//---
}
//+------------------------------------------------------------------+
Что пошло не так? Не появляются кнопки, не удаляются..... ???
по нажатии кнопки должны удаляться метки, при повторном нажатии появляться опять.. они удаляются но не появляются это раз, во вторых если заново прописать Create при нажатии кнопки, то они появятся, но не будут привязаны к панели, то есть будут перемещаться не синхронно с ней, плюс к этому я вообще не нашел в справке как правильно нужно делать :) Поэтому мне лучше бы просто информацию о том как это нужно правильно делать - удалять а потом снова удалять элементы с панели.
специально для вас разжевал, если вы по коду не видите что я делю )
Скорее никак. По идее надо у формы из массива удалять элемент управления, но нет такого метода, а сам массив объявлен в privte.
Может быть через видимость, но тогда возникнут проблемы при сворачивании/разворачивании формы, тогда может быть создать свой массив и в нем держать данные какой элемент управления видим, какой скрыт. При событии ресайза формы включать/выключать видимость. (но не пробовал такой вариант (по событию формы), и так хватило экспериментов)
Скорее никак. По идее надо у формы из массива удалять элемент управления, но нет такого метода, а сам массив объявлен в privte.
Может быть через видимость, но тогда возникнут проблемы при сворачивании/разворачивании формы, тогда может быть создать свой массив и в нем держать данные какой элемент управления видим, какой скрыт. При событии ресайза формы включать/выключать видимость. (но не пробовал такой вариант, и так хватило экспериментов)
или мб пересоздавать панель просто.. ) не пойму почему удаленные элементы при повторном добавлении в панель криво к ней привязываются и двигаются не синхронно с ней, но двигаются.. что-то накладывается друг на друга, видимо
Попробуйте вот эту версию библиотеки для создания графических интерфейсов: Графические интерфейсы X: Элемент "Время", элемент "Список из чекбоксов" и сортировка таблицы (build 6)
Maxim Dmitrievsky:
1. или мб пересоздавать панель просто.. )
2. не пойму почему удаленные элементы при повторном добавлении в панель криво к ней привязываются и двигаются не синхронно с ней, но двигаются.. что-то накладывается друг на друга, видимо
1. С пересозданием панели возможно будет работать, но уж слишком громоздкий способ.
2. Наверно после удаления элемента управления и его нового создания он снова располагается по тому же адресу в памяти, поэтому, при смещении формы два раза выполняется его смещение.
Попробуйте вот эту версию библиотеки для создания графических интерфейсов: Графические интерфейсы X: Элемент "Время", элемент "Список из чекбоксов" и сортировка таблицы (build 6)
мне придется очень много переделывать, т.к. уже все сделано через стандартные классы )
проблему можно решить, установив для контролов флаг Visible, и отображать или прятать их когда надо. А поверх добавлять другие вместо них, например.. не знаю вкатит такой подход или нет, попробую чуть позже ) По крайней мере они прячутся и снова отображаются без видимых проблем
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Вы принимаете политику сайта и условия использования
Здесь по нажатии кнопки элементы бид и аск должны добавляться на график и исчезать с него, но что-то пошло не так... справки почти нет по этому делу, приходится идти вслепую :)
//+------------------------------------------------------------------+
//| MyPanel.mqh |
//| Copyright © 2013, DeltaTrader |
//| http://www.deltatrader.com.br |
//+------------------------------------------------------------------+
#property copyright "DeltaTrader © 2013"
#property link "www.deltatrader.com.br"
#property version "1.000"
#property description "Test Panel"
#property indicator_plots 0
//+------------------------------------------------------------------+
//| Includes |
//+------------------------------------------------------------------+
#include <Controls\Dialog.mqh>
#include <Controls\Label.mqh>
#include <Controls\Panel.mqh>
#include <Controls\Edit.mqh>
#include <Controls\Defines.mqh>
#include <Controls\Button.mqh>
//+------------------------------------------------------------------+
//| Global parameters |
//+------------------------------------------------------------------+
int panelXX = 200;
int panelYY = 200;
int panelWidth = 600;
int panelHeight = 400;
CAppDialog m_panel;
//--- Bid objects
CPanel m_bidcolor;
CLabel m_bidlabel;
//--- Ask objects
CPanel m_askcolor;
CLabel m_asklabel;
CEdit m_edit;
CButton m_button;
//+------------------------------------------------------------------+
//| On Init |
//+------------------------------------------------------------------+
int OnInit()
{
//--- Panel create
m_panel.Create(0,"blablabla",0,panelXX,panelYY,panelWidth,panelHeight);
//--- Bid label and colors
m_bidcolor.Create(0,"Bid Background Color",0,1,1,panelWidth-30,30);
m_bidcolor.ColorBackground(clrYellow);
m_panel.Add(m_bidcolor);
m_bidlabel.Create(0,"Bid Text",0,5,5,0,0);
m_bidlabel.Text("Bid "+DoubleToString(SymbolInfoDouble(_Symbol,SYMBOL_BID),_Digits));
m_bidlabel.Color(clrBlue);
m_panel.Add(m_bidlabel);
//--- Ask label and colors
m_askcolor.Create(0,"Ask Background Color",0,1,1,panelWidth-30,30);
m_askcolor.ColorBackground(clrAqua);
m_panel.Add(m_askcolor);
m_asklabel.Create(0,"Ask Text",0,5,30,0,0);
m_asklabel.Text("Ask "+DoubleToString(SymbolInfoDouble(_Symbol,SYMBOL_ASK),_Digits));
m_asklabel.Color(clrRed);
m_panel.Add(m_asklabel);
m_edit.Create(0,"Bid Background Color",0,1,1,panelWidth-30,30);
m_panel.Add(m_edit);
m_button.Create(0,"My button",0, 150,5,250,50);
m_button.Text("Show or hide");
m_panel.Add(m_button);
//--- Run panel
m_panel.Run();
return(0);
}
//+------------------------------------------------------------------+
//| On DeInit |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
{
//--- Destroy panel
m_panel.Destroy(reason);
//--- Delete all objects
ObjectsDeleteAll(0,0);
}
//+------------------------------------------------------------------+
//| On Calculate |
//+------------------------------------------------------------------+
int OnCalculate(const int rates_total,
const int prev_calculated,
const int begin,
const double &price[])
{
//--- A very simples bid label
m_bidlabel.Text("Bid "+DoubleToString(SymbolInfoDouble(_Symbol,SYMBOL_BID),_Digits));
//--- A very simples ask label
m_asklabel.Text("Ask "+DoubleToString(SymbolInfoDouble(_Symbol,SYMBOL_ASK),_Digits));
//---
return(rates_total);
}
//+------------------------------------------------------------------+
//| On Chart Event |
//+------------------------------------------------------------------+
void OnChartEvent(const int id,
const long &lparam,
const double &dparam,
const string &sparam)
{
//--- Move the panel with the mouse
m_panel.ChartEvent(id,lparam,dparam,sparam);
if(sparam == "My button")
{
if(m_button.Pressed())
{
m_bidlabel.Destroy();
m_asklabel.Destroy();
}
else
{
m_panel.Add(m_bidlabel);
m_panel.Add(m_asklabel);
}
}
//---
}
//+------------------------------------------------------------------+