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

 

В ходе выполнения задачи по динамическому добавлению /удалению вкладок и добавлению / удалению в массив вкладок чартов, столкнулся с проблемой невозможности получения имени вкладок в классе CTabs. В связи с этим предлагаю разработчику дополнить данный класс методом получения имени вкладки:

   //--- Устанавливает (1) текст (имя вкладки) по указанному индексу (2) получает текст (имя вкладки) по указанному индексу
   void              Text(const uint index,const string text);                     // этот метод есть
   string            Text(const uint index) { return m_tab[index].text; }  // этого не хватает
Добавление данного метода необходимо в связи с тем, что даже наследуясь от класса CTabs с целью дополнить отсутствующими методами, будет невозможно реализовать перегруженный метод Text, т.к. объект m_tab[] находится в защищенной области класса. А править класс под себя нарушает принцип ООП.
 
Konstantin:

...

Сделаю всё, о чём Вы написали в предыдущих сообщениях.
 
дополните в библиотеку EasyAndFastGUI/MQL5/Images/EasyAndFastGUI/Icons/bmp16 картинки. Для "двуногих" арбитражников пригодятся не только мне ))
Файлы:
 
Anatoli Kazharski:
@Pavel Kolchin, чтобы стрелки от сделок не висели над панелью используйте метод CWndEvents::ResetWindow().
куда его вставить?
 
Pavel Kolchin:
куда его вставить?
В OnTrade() попробуйте. 
 
Anatoli Kazharski:
В OnTrade() попробуйте. 


не могу, ругается

в файле меню нет такого события, а если вставить в основной файл то ругается

 
Pavel Kolchin:


не могу, ругается

в файле меню нет такого события, а если вставить в основной файл то ругается

В пользовательском классе приложения нужно создать метод CProgram::OnTradeEvent().

А в главном файле его нужно вызывать в функции OnTrade():

//+------------------------------------------------------------------+
//| Trade function                                                   |
//+------------------------------------------------------------------+
void OnTrade(void)
  {
   program.OnTradeEvent();
  }

//---

Например, у меня такое содержание метода CProgram::OnTradeEvent():

//+------------------------------------------------------------------+
//| Событие торговой операции                                        |
//+------------------------------------------------------------------+
void CProgram::OnTradeEvent(void)
  {
//--- Отправка торгового события всем графикам
   m_events.SendEventToAllCharts(0,ON_TRADE_EVENT,0,0.0,m_program_name);
//--- Установим сделки последней позиции
   if(m_show_deals.CheckButtonState())
      if(m_vdeals.ShowDealsLastPosition())
         ResetWindow();
//--- Проверка расстояния стоп-лосса
   if(m_trailing_stop.CheckButtonState())
      m_ctrade.CheckStopLossSize(::Symbol());
//--- Обнуление переменных для торговых операций
   m_ctrade.ZeroCalcPositionVariables();
//--- Инициализация массива баланса и обновление серии на графике
   InitBalanceArray();
   m_line_chart.SeriesUpdate(0,m_balance_data,"Balance",clrCornflowerBlue);
  }
 
Anatoli Kazharski:


Еще сверху приписать
public:
   //--- Трейд
   void              OnTradeEvent(void);
и все работает )
 
Не могу сообразить как привязать элемент_2, например таблицу к нижнему краю элемент_1, например так же таблицы, т.е. элемент_1 находятся над элемент_2. В результате нужно, что бы при изменении размеров чарта, нижняя граница элемент_1 смещалась и за ней смещалась бы верхняя граница элемент_2. Реализацию смещения нижних границ в библиотеке есть, методы AutoYResizeMode и AutoYResizeBottomOffset, а вот как реализовать смещение верхних границ не могу сообразить.
 
Konstantin:
Не могу сообразить как привязать элемент_2, например таблицу к нижнему краю элемент_1, например так же таблицы, т.е. элемент_1 находятся над элемент_2. В результате нужно, что бы при изменении размеров чарта, нижняя граница элемент_1 смещалась и за ней смещалась бы верхняя граница элемент_2. Реализацию смещения нижних границ в библиотеке есть, методы AutoYResizeMode и AutoYResizeBottomOffset, а вот как реализовать смещение верхних границ не могу сообразить.

Есть ещё методы для привязки элементов:

   //--- Режим (получение/установка) привязки элемента к (1) правому и (2) нижнему краю окна
   bool              AnchorRightWindowSide(void)               const { return(m_anchor_right_window_side);   }
   void              AnchorRightWindowSide(const bool flag)          { m_anchor_right_window_side=flag;      }
   bool              AnchorBottomWindowSide(void)              const { return(m_anchor_bottom_window_side);  }
   void              AnchorBottomWindowSide(const bool flag)         { m_anchor_bottom_window_side=flag;     }

//---

В сочетании с этими свойствами попробуйте решить задачу.