Controls панель. "Разъезжаются внутренности" панели при минимизации/максимизации

Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий
Sofiia Butenko
14248
Sofiia Butenko  

Хочу создать панель, точнее это получилось, проблем тут нет.  (не обращайте внимания на кнопки на заднем плане, они не с этой "оперы"). 

Чувствую что что-то просто не учла... 

Вот, появились 2 проблемы: 

1) при минимизации она "прыгает" в другое место

2) при максимизации обратно - разъезжаются внутренности... 

С того что перегружено:

//+------------------------------------------------------------------+
//| Class Scenario  PANEL                                            |
//+------------------------------------------------------------------+
class CPanelDialog : public CAppDialog{
   private:
      CButton    m_butt_rec;                       
      CButton    m_butt_refr;                   
      CButton    m_butt_go;                    
      CListView  m_list_view;                     
   public:
      virtual bool      Create(const long chart,const string name,const int subwin,const int x1,const int y1,const int x2,const int y2);
      virtual bool      OnEvent(const int id,const long &lparam,const double &dparam,const string &sparam);
   protected:
      bool           CreateButtonRec (int x1, int y1, int x2, int y2);
      bool           CreateButtonRefr(int x1, int y1, int x2, int y2);
      bool           CreateButtonGo  (int x1, int y1, int x2, int y2);
      bool           CreateListView  (int x1, int y1, int x2, int y2);
      void           OnClickButton1(void);
      void           OnClickButton2(void);
      void           OnClickButton3(void);};
//+------------------------------------------------------------------+
//| Event Handling                                                   |
//+------------------------------------------------------------------+
EVENT_MAP_BEGIN(CPanelDialog)
ON_EVENT(ON_CLICK,m_butt_rec,OnClickButton1)
ON_EVENT(ON_CLICK,m_butt_refr,OnClickButton2)
ON_EVENT(ON_CLICK,m_butt_go,OnClickButton3)
ON_OTHER_EVENTS(OnDefault)
EVENT_MAP_END(CAppDialog)
//+------------------------------------------------------------------+
//+------------------------------------------------------------------+
bool CPanelDialog::Create(const long chart,const string name,const int subwin,const int x1,const int y1,const int x2,const int y2){
   if(!CAppDialog::Create(chart,name,subwin,x1,y1,x2,y2)) return(false);
   int by1 = 0;
   int bx1 = 0; 
   int bh  = 15;
   int bw  = (int)MathFloor(ClientAreaWidth()/3)-by1*2;
   int lx2 = bw*3; 
   int ly2 = ClientAreaHeight()-by1; 
   
   if(!CreateButtonRec  (bx1+bw*0, by1,    bx1+bw*1,  by1+  bh))  return(false);
   if(!CreateButtonRefr (bx1+bw*1, by1,    bx1+bw*2,  by1+  bh))  return(false);
   if(!CreateButtonGo   (bx1+bw*2, by1,    bx1+bw*3,  by1+  bh))  return(false);
   if(!CreateListView   (bx1+bw*0, by1+bh, bx1+bw*3,  ly2     ))  return(false);
   return(true);}
//+------------------------------------------------------------------+
bool CPanelDialog::CreateButtonRec(int x1, int y1, int x2, int y2){
   if(!this.m_butt_rec.Create(m_chart_id,m_name+"_Rec",m_subwin, x1, y1, x2, y2)) return(false);
   if(!m_butt_rec.Text("Rec")) return(false);
   if(!Add(m_butt_rec))return(false);
   m_butt_rec.Alignment(WND_ALIGN_RIGHT,0,0,0,0);
   return(true);}
bool CPanelDialog::CreateButtonRefr(int x1, int y1, int x2, int y2){
   if(!this.m_butt_refr.Create(m_chart_id,m_name+"_Refr",m_subwin, x1, y1, x2, y2)) return(false);
   if(!m_butt_refr.Text("Refr")) return(false);
   if(!Add(m_butt_refr))return(false);
   m_butt_refr.Alignment(WND_ALIGN_RIGHT,0,0,0,0);
   return(true);}
bool CPanelDialog::CreateButtonGo(int x1, int y1, int x2, int y2){
   if(!this.m_butt_go.Create(m_chart_id,m_name+"_Go",m_subwin, x1, y1, x2, y2)) return(false); 
   if(!m_butt_go.Text("Go")) return(false);
   if(!Add(m_butt_go))return(false);
   m_butt_go.Alignment(WND_ALIGN_RIGHT,0,0,0,0);
   return(true);}
//+------------------------------------------------------------------+
//+------------------------------------------------------------------+
bool CPanelDialog::CreateListView(int x1, int y1, int x2, int y2){
   if(!m_list_view.Create(m_chart_id,m_name+"ListView",m_subwin,x1,y1,x2,y2)) return(false);
   if(!Add(m_list_view)) return(false);
   m_list_view.Alignment(WND_ALIGN_HEIGHT,0,0,0,0);
   
   for(int i=0;i<16;i++)  if(!m_list_view.ItemAdd("Item "+IntegerToString(i))) return(false);
   
   return(true);}

//+------------------------------------------------------------------+
//| Event handler                                                    |
//+------------------------------------------------------------------+
void CPanelDialog::OnClickButton1(void){ Alert(__FUNCTION__); }
void CPanelDialog::OnClickButton2(void){ Alert(__FUNCTION__); }
void CPanelDialog::OnClickButton3(void){ Alert(__FUNCTION__); }


Vladimir Karputov
Модератор
194073
Vladimir Karputov  

  1. Код, пожалуйста вставляйте правильно: Правильно вставляем код на форуме
  2. Всё таки нужен полный код, возможно забыли вставить в главный файл советника эти функции:

//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {
//--- destroy dialog
   ExtDialog.Destroy(reason);
  }
//+------------------------------------------------------------------+
//| Expert chart event function                                      |
//+------------------------------------------------------------------+
void OnChartEvent(const int id,         // event ID  
                  const long& lparam,   // event parameter of the long type
                  const double& dparam, // event parameter of the double type
                  const string& sparam) // event parameter of the string type
  {
   ExtDialog.ChartEvent(id,lparam,dparam,sparam);
  }

(пример кода из [data folder]\MQL5\Experts\Examples\Controls\Controls.mq5)

Sofiia Butenko
14248
Sofiia Butenko  

1) в чем моя ошибка вставки кода

2) все функции что описали - есть, именно по примеру и делала. Разница в том что пример в отдельном окне индикатора, а мне нужно на главном окне графика. 

Sofiia Butenko
14248
Sofiia Butenko  

Сделала тестовую версию, удалила все лишнее чтоб прикрепить файл. 

Всеравно все разъезжается. Не могу сделать в отдельном окне, как в примере, т.к. это советник. Мне нужны Слипы, а в индикаторах это не работает. 

Файлы:
Vasiliy Pushkaryov
7182
Vasiliy Pushkaryov  

Строки с выравниванием (Alignment) закомментируйте, должно помочь.

Sofiia Butenko
14248
Sofiia Butenko  
Vasiliy Pushkaryov:

Строки с выравниванием (Alignment) закомментируйте, должно помочь.


ОГРОМНОЕ СПАСИБО! Помогло

Осталась только первая проблема, чтоб окно не перескакивало при минимизации, но это юзер может и пережить

Vasiliy Pushkaryov
7182
Vasiliy Pushkaryov  
Galina Bobro:

ОГРОМНОЕ СПАСИБО! Помогло

Осталась только первая проблема, чтоб окно не перескакивало при минимизации, но это юзер может и пережить


Переопределите метод Minimize(), добавив в него дополнительно метод ExtDialog.Move() с координатами, которые Вам нужны при минимизации.

Sofiia Butenko
14248
Sofiia Butenko  
Vasiliy Pushkaryov:

Переопределите метод Minimize(), добавив в него дополнительно метод ExtDialog.Move() с координатами, которые Вам нужны при минимизации.


Cпасибо, работает

-----

Если вдруг кому-то нужно - прикрепляю рабочий пример

Файлы:
Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий