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

 
Anatoli Kazharski:

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

//---

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


да пробовал, но уже голову сломал, я так понял, что методы X(...) и Y(...) жестко привязывают элементы к координатам X и Y и при получении событий по изменению размеров главного окна формы, уже ни как не реагируют на расположение по координатам X и Y
 
Konstantin:

да пробовал, но уже голову сломал, я так понял, что методы X(...) и Y(...) жестко привязывают элементы к координатам X и Y и при получении событий по изменению размеров главного окна формы, уже ни как не реагируют на расположение по координатам X и Y

Можете показать аналог того, что Вам нужно, на примере, какого-то готового Windows-приложения? А то я не уверен, что правильно понимаю то, что Вам нужно. Или изобразите это как-нибудь графически.

Если понял правильно, то элемент_2 нужно привязать к нижнему краю формы, а у элемент_1 нужно сделать авто-ресайз по вертикали с отступом на высоту элемент_2.

 
Anatoli Kazharski:

Можете показать аналог того, что Вам нужно, на примере, какого-то готового Windows-приложения? А то я не уверен, что правильно понимаю то, что Вам нужно. Или изобразите это как-нибудь графически.

Если понял правильно, то элемент_2 нужно привязать к нижнему краю формы, а у элемент_1 нужно сделать авто-ресайз по вертикали с отступом на высоту элемент_2.


Вы все правильно поняли, т.е. когда меняется размер окна, то элемент_1 меняет размер по Y, и нужно что бы элемент_2 следовал за этим уменьшением, т.е. обычное масштабирование элементов внутри формы. Я пока вбил костыль, что бы элемент_1 не масштабировался )) Потом займусь этим моментом.
 
в библиотеке не хватает выставления приоритетов отображения, а то значки от открытых ордеров/позиций имеют приоритет выше и соответственно располагаются поверх всех графических элементов библиотеки, думаю, что реализовать это можно при создании графических объектов в "ядре" библиотеки
 
Konstantin:
в библиотеке не хватает выставления приоритетов отображения, а то значки от открытых ордеров/позиций имеют приоритет выше и соответственно располагаются поверх всех графических элементов библиотеки, думаю, что реализовать это можно при создании графических объектов в "ядре" библиотеки

Попробуйте вот так:

Форум по трейдингу, автоматическим торговым системам и тестированию торговых стратегий

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

Anatoli Kazharski, 2017.05.08 21:40

В пользовательском классе приложения нужно создать метод 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:

Попробуйте вот так:


я это видел, но думаю, что в "ядре" библиотеки, т.е. при создании графических объектов, нужно дополнить использование:

bool  ObjectSetInteger( 
   long                             chart_id,      // идентификатор графика 
   string                           name,          // имя 
   ENUM_OBJECT_PROPERTY_INTEGER     prop_id,       // свойство 
   long                             prop_value     // значение 
   );

свойства: 

OBJPROP_BACK

 
Konstantin:

я это видел, но думаю, что в "ядре" библиотеки, т.е. при создании графических объектов, нужно дополнить использование:

свойства: 

OBJPROP_BACK

Тогда графики будут над графическими объектами интерфейса.

//---

Делайте пока ResetWindow(). Попробую потом в ядро встроить, чтобы автоматом обновлялось.

 
Anatoli Kazharski:

Тогда графики будут над графическими объектами интерфейса.

//---

Делайте пока ResetWindow(). Попробую потом в ядро встроить, чтобы автоматом обновлялось.


не совсем так, нужно выставлять всем графическим объектам приоритет на передний план, тогда графики будут позади, я это не раз реализовывал на своей графической библиотеке ))
 
Konstantin:

не совсем так, нужно выставлять всем графическим объектам приоритет на передний план, тогда графики будут позади, я это не раз реализовывал на своей графической библиотеке ))

Я не знаю, что Вы и как делали, но по умолчанию они и так на переднем плане. Сверху оказываются последние созданные. Сменить приоритет после создания можно только скрыв и показав объекты снова, кроме тех, которые должны быть снизу. 

 

В метод класса CTabs:

void CTabs::CalculatingPatch(int &x,int &y,int &x_size,int &y_size)
  {
   if(ArraySize(m_tabs) == 0)
      return;

   if(m_position_mode==TABS_TOP)
     {
      x      =m_tabs[m_selected_tab].X()+1;
      y      =m_tabs[m_selected_tab].Y2()-1;
      x_size =m_tabs[m_selected_tab].XSize()-2;
      y_size =1;
     }
   else if(m_position_mode==TABS_BOTTOM)
     {
      x      =m_tabs[m_selected_tab].X()+1;
      y      =m_tabs[m_selected_tab].Y();
      x_size =m_tabs[m_selected_tab].XSize()-2;
      y_size =1;
     }
   else if(m_position_mode==TABS_LEFT)
     {
      x      =m_tabs[m_selected_tab].X2()-1;
      y      =m_tabs[m_selected_tab].Y()+1;
      x_size =1;
      y_size =m_tabs[m_selected_tab].YSize()-2;
     }
   else if(m_position_mode==TABS_RIGHT)
     {
      x      =m_tabs[m_selected_tab].X();
      y      =m_tabs[m_selected_tab].Y()+1;
      x_size =1;
      y_size =m_tabs[m_selected_tab].YSize()-2;
     }
  }

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