Обсуждение статьи "Графические интерфейсы X: Выделение текста в многострочном поле ввода (build 13)" - страница 5

 
Pavel Kolchin:
@Pavel Kolchin, чтобы стрелки от сделок не висели над панелью используйте метод CWndEvents::ResetWindow().
 
Anatoli Kazharski:

да, но есть одна проблема, при долгом использовании появляется ошибка без всяких причин, удаление подокна эксперта приводит к удалению эксперта

img

 
Pavel Kolchin:

да, но есть одна проблема, при долгом использовании появляется ошибка без всяких причин, удаление подокна эксперта приводит к удалению эксперта

В файле Defines.mqh значение параметра EXPERT_IN_SUBWINDOW поставьте в false:

//+------------------------------------------------------------------+
//|                                                      Defines.mqh |
//|                        Copyright 2015, MetaQuotes Software Corp. |
//|                                              http://www.mql5.com |
//+------------------------------------------------------------------+
//--- Режим "Эксперт в окне"
#define EXPERT_IN_SUBWINDOW false

//---

Для экспертов, графический интерфейс которых находится в главном окне графика значение этого параметра должно быть false.

 
Anatoli Kazharski:

В файле Defines.mqh значение параметра EXPERT_IN_SUBWINDOW поставьте в false:


это понятно, есть функция, которая работает работает (несколько дней) а потом берет и вылетает


//+------------------------------------------------------------------+
//| Проверка и обновление номера окна эксперта                       |
//+------------------------------------------------------------------+
void CWndEvents::CheckExpertSubwindowNumber(void)
  {
//--- Выйти, если это не эксперт
   if(PROGRAM_TYPE!=PROGRAM_EXPERT)
      return;
//--- Получим количество подокон на графике
   int subwindows_total=(int)::ChartGetInteger(m_chart_id,CHART_WINDOWS_TOTAL);
//--- Выйти, если количество подокон и количество индикаторов не изменилось
   if(subwindows_total==m_subwindows_total)
      return;
//--- Сохраним текущее количество подокон
   m_subwindows_total=subwindows_total;
//--- Для проверки наличия подокна эксперта
   bool is_subwindow=false;
//--- Найдём подокно эксперта
   for(int sw=0; sw<subwindows_total; sw++)
     {
      //--- Остановить цикл, если подокно эксперта есть
      if(is_subwindow)
         break;
      //--- Сколько индикаторов в данном окне/подокне
      int indicators_total=::ChartIndicatorsTotal(m_chart_id,sw);
      //--- Переберём все индикаторы в окне 
      for(int i=0; i<indicators_total; i++)
        {
         //--- Получим короткое имя индикатора
         string indicator_name=::ChartIndicatorName(m_chart_id,sw,i);
         //--- Если это не подокно эксперта, перейти к следующему
         if(indicator_name!=m_subwindow_shortname)
            continue;
         //--- Отметим, что подокно эксперта есть
         is_subwindow=true;
         //--- Если номер подокна изменился, то 
         //    нужно сохранить новый номер во всех элементах главной формы
         if(sw!=m_subwin)
           {
            //--- Сохраним номер подокна
            m_subwin=sw;
            //--- Сохраним его также во всех элементах главной формы интерфейса
            int elements_total=CWndContainer::ElementsTotal(0);
            for(int e=0; e<elements_total; e++)
               m_wnd[0].m_elements[e].SubwindowNumber(m_subwin);
           }
         //---
         break;
        }
     }
//--- Если подокно эксперта не обнаружено, удалим эксперта
   if(!is_subwindow)
     {
      ::Print(__FUNCTION__," > Удаление подокна эксперта приводит к удалению эксперта!");
      //--- Удаление эксперта с графика
      ::ExpertRemove();
     }
  }
 
Pavel Kolchin:


это понятно, есть функция, которая работает работает (несколько дней) а потом берет и вылетает.

Вы используете не последнюю версию библиотеки или вносили в неё правки. В начале этого метода должно быть вот такое условие:

//--- Выйти, если (1) это не эксперт или (2) графический интерфейс эксперта в главном окне
   if(PROGRAM_TYPE!=PROGRAM_EXPERT || !EXPERT_IN_SUBWINDOW)
      return;

//---

А у Вас:

//--- Выйти, если это не эксперт
   if(PROGRAM_TYPE!=PROGRAM_EXPERT)
      return;
 
Anatoli Kazharski:

Вы используете не последнюю версию библиотеки или вносили в неё правки. В начале этого метода должно быть вот такое условие:

да, думаю так будет лучше)

версия 10.2, так там есть все необходимые для меня элементы меню и поддержка mt4

с тех пор есть еще какие-нибудь критические правки которые могут повлиять на работу?

 
Pavel Kolchin:

...

с тех пор есть еще какие-нибудь критические правки которые могут повлиять на работу?

Сложно так сразу сказать. Постоянно что-то дополняется и исправляется.
 

Желательно в форму добавить механизм добавления объектов по принципу "фабрики", как в Qt, либо что то подобное и желательно с ориентацией относительно друг-друга:

- справа

- слева

- сверху

- снизу

 
Konstantin:

Желательно в форму добавить механизм добавления объектов по принципу "фабрики", как в Qt, либо что то подобное и желательно с ориентацией относительно друг-друга:

- справа

- слева

- сверху

- снизу

Подробнее опишите. Не знаю, как в Qt.

Сейчас элементы можно позиционировать относительно формы: справа, слева, сверху, снизу. Родительским элементом может быть только форма. В следующей версии будет возможно в качестве родительского элемента установить любой другой элемент. Так управление элементами и их позиционирование станет ещё проще.

 
Anatoli Kazharski:

Подробнее опишите. Не знаю, как в Qt.

Сейчас элементы можно позиционировать относительно формы: справа, слева, сверху, снизу. Родительским элементом может быть только форма. В следующей версии будет возможно в качестве родительского элемента установить любой другой элемент. Так управление элементами и их позиционирование станет ещё проще.


в Qt фабричная функция:

QWidgetAction *createWidget();

а так проводятся проверки по созданию виджетов:

QWidget * widget() {
   static QWidget * inst = new QWidget;
   return inst;
}

а вообще про QWidget тут вся инфа.

Сейчас элементы можно позиционировать относительно формы: справа, слева, сверху, снизу.

Тут не совсем понял, это позиционирование элемента относительно границ и их можно разместить как за формой так и внутри формы?

Например есть форма, мы позиционируем элемент относительно левой границы формы дальше влево?

Причина обращения: