Обсуждение статьи "Как создать графическую панель любой сложности и как это работает" - страница 5

 
@Vladimir Karputov
Владимир почему при закрытии одной панели закрываются обе? как этого избежать?
#include <Controls\Dialog.mqh>

CAppDialog AppWindow;
CAppDialog AppWindow2;

int OnInit()
  {
//--- create application dialog
   if(!AppWindow.Create(0,"AppWindow",0,20,20,360,324))
      return(INIT_FAILED);
   if(!AppWindow2.Create(0,"AppWindow",0,20+400,20,360+400,324))
      return(INIT_FAILED);
//--- run application
   AppWindow.Run();
   AppWindow2.Run();
   return(INIT_SUCCEEDED);
  }

void OnDeinit(const int reason)
  {
//--- destroy dialog
   AppWindow.Destroy(reason);
   AppWindow2.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
  {
   AppWindow.ChartEvent(id,lparam,dparam,sparam);
   AppWindow2.ChartEvent(id,lparam,dparam,sparam);
  }
//+------------------------------------------------------------------+
Vladimir Karputov
Vladimir Karputov
  • www.mql5.com
Люди. Граждане! Огромная просьба - заполняйте свой профиль на сайте и пользуйтесь стандартными программами - устанавливайте Skype. У Skype есть очень полезная функция - показ рабочего стола. В таком случае можно оперативно подсказать по возникшей проблеме. Помните - время - деньги! Древняя народная мудрость гласит: если хочешь помочь...
 
Ruslan Khasanov:
Задайте разные имена для каждого окна - AppWindow и AppWindow1 и т.д.

так у них и так разные имена 

скрин

изменение строки 

if(!AppWindow2.Create(0,"AppWindow2",0,20+400,20,360+400,324))

ничего не дает.
Или вы имеете ввиду что-то другое?

 
Да действительно, ошибся...
 
peterlogin:
*** как этого избежать?

Один советник - одна панель.

 
Как заставить панель быть поверх объектов созданных позже создания самой панели?

Например поверх линии:
пример
 
peterlogin:
Как заставить панель быть поверх объектов созданных позже создания самой панели?

Например поверх линии:

Не создавать графических объектов после создания панели.

Или свернуть/развернуть панель.
Документация по MQL5: Графические объекты / ObjectCreate
Документация по MQL5: Графические объекты / ObjectCreate
  • www.mql5.com
[in]  Номер подокна графика. 0 означает главное окно графика. Указанное подокно должно существовать, в противном случае функция возвращает false. Возвращает true при успешной постановке команды в очередь указанного графика, иначе false. Если объект был уже создан ранее, то производится попытка изменить его координаты. При вызове ObjectCreate...
 
Комментарии, не относящиеся к этой теме, были перенесены в "Вопросы от начинающих MQL5 MT5 MetaTrader 5".
 

Привет, ребята,

вопрос от самоучки!

Когда мы создаем панели с помощью библиотеки, как поместить панель в угол, который отличается от левого?

Я возился с OBJ_PROP_Corner, но думаю, что есть лучший способ, используя Panel.Align и Panel.Alignment. Я поиграл, но как не программист не знаю, какие параметры и как передавать. Например, Panel.Alignment(CRect &rect) что означают эти Rect?

Любой свет очень ценен


спасибо

Диего

 
Diego :

Привет, ребята,

Вопрос от самоучки!

Когда мы создаем панели с помощью библиотеки, как мы помещаем панель в угол, который отличается от топлефта?

Я возился с OBJ_PROP_Corner, но мне кажется, что есть лучший способ - использовать Panel.Align и Panel.Alignment. Я поиграл, но как не программист не знаю, какие параметры и как передавать. Например, Panel.Alignment(CRect &rect) что означают эти Rect?

За любой свет буду благодарен


спасибо

Диего

При создании панели мы указываем координаты. Пример для файла AppWindowEditDefine.mq5

//+------------------------------------------------------------------+
//| Функция инициализации эксперта|
//+------------------------------------------------------------------+
int OnInit()
  {
   
***
//--- создайте диалог приложения
   if(!ExtDialog.Create(0,"AppWindow Edit Define",0,40,40,380,344))
      return(INIT_FAILED);
//--- запустите приложение
 

Я заметил, что часто функция *.Destroy() просто не работает. Она оставляет объекты на графике после вызова функции Expert Deinit(), особенно при быстрой смене таймфреймов.

Простым обходным решением является использование указателей вместо прямого создания, изменения и уничтожения объекта CAppDialog.

CAppDialog AppWindow;		//Declare CAppDialog object

AppWindow.Destroy(...);		//Destroy Window object(s)

Теперь приведенные выше функции выглядят следующим образом:

CAppDialog *AppWindow;		//Declare CAppDialog pointer
AppWindow = new CAppDialog();	//Create new CAppDialog object at ptr address

AppWindow.Destroy(...);		//Destroy Window object(s)
delete AppWindow;		//Set the "delete" flag for objects at the ptr address (in case *.Destroy() fails)
AppWindow = NULL;		//Set the ptr address to NULL

После создания моего пользовательского класса окна я также создаю и уничтожаю все кнопки, панели и другие объекты подобным образом. Работает просто замечательно!


*Примечание: установка флага удаления и указателя на NULL может быть излишней, но у меня не было остатков объектов после реализации.

Documentation on MQL5: Checkup / Point
Documentation on MQL5: Checkup / Point
  • www.mql5.com
Checkup / Point - Reference on algorithmic/automated trading language for MetaTrader 5