Обсуждение статьи "Графические интерфейсы X: Обновления для библиотеки Easy And Fast (build 2)" - страница 3

 
Alexey Oreshkin:
А когда ждать обновление ?

Если нужно срочно, то можете сами добавить следующие изменения:

1. В файл Defines.mqh добавьте новый идентификатор:

#define ON_CLICK_TAB               (26) // Переключение вкладки

//--- 

2. В классы CTabs и CIconTabs (файлы Tabs.mqh и IconTabs.mqh) в метод ShowTabElements() нужно добавить строчку, как показано в листинге ниже:

//+------------------------------------------------------------------+
//| Показывает элементы только выделенной вкладки                    |
//+------------------------------------------------------------------+
void CTabs::ShowTabElements(void)
  {
//--- Выйти, если вкладки скрыты
   if(!CElement::IsVisible())
      return;
//--- Проверка индекса выделенной вкладки
   CheckTabIndex();
//---
   for(int i=0; i<m_tabs_total; i++)
     {
      //--- Получим количество элементов присоединённых к вкладке
      int tab_elements_total=::ArraySize(m_tab[i].elements);
      //--- Если выделена эта вкладка
      if(i==m_selected_tab)
        {
         //--- Показать элементы вкладки
         for(int j=0; j<tab_elements_total; j++)
            m_tab[i].elements[j].Show();
        }
      //--- Скрыть элементы неактивных вкладок
      else
        {
         for(int j=0; j<tab_elements_total; j++)
            m_tab[i].elements[j].Hide();
        }
     }
//--- Отправить сообщение об этом
   ::EventChartCustom(m_chart_id,ON_CLICK_TAB,CElement::Id(),m_selected_tab,"");
  }

//---

3. Теперь событие с идентификатором ON_CLICK_TAB можно принимать в обработчике пользовательского класса. 

Пример: 

//+------------------------------------------------------------------+
//| Обработчик событий графика                                       |
//+------------------------------------------------------------------+
void CProgram::OnEvent(const int id,const long &lparam,const double &dparam,const string &sparam)
  {
//--- Событие нажатия на вкладке
   if(id==CHARTEVENT_CUSTOM+ON_CLICK_TAB)
     {
      //--- Если нажали на радио-кнопку
      if(m_tabs.SelectedTab()==0)
        {
         switch(m_radio_buttons1.SelectedButtonIndex()){
            case  0:
               m_canvas_table1.Show();
               m_canvas_table11.Hide();
               m_canvas_table111.Hide();
               ModifyCanvasTable1(0);
            break;
            case  1:
               m_canvas_table1.Hide();
               m_canvas_table11.Show();
               m_canvas_table111.Hide();
               ModifyCanvasTable1(1);                
            break;
            case  2:
               m_canvas_table1.Hide();
               m_canvas_table11.Hide();
               m_canvas_table111.Show();
               ModifyCanvasTable1(2);               
            break;                        
         }       
         return;
        }
      return;
     }
  }
 
Благодарю, работает.
Нашёл ещё одну ошибку - запускаем индюк, отодвигаем панель и начинаем жать радиокнопки. Когда отрисовывается таблица, вначале она начинает рисоваться с левого края, а потом как бы подтягивается к нужным координатам.
 
Alexey Oreshkin:
Благодарю, работает.
Нашёл ещё одну ошибку - запускаем индюк, отодвигаем панель и начинаем жать радиокнопки. Когда отрисовывается таблица, вначале она начинает рисоваться с левого края, а потом как бы подтягивается к нужным координатам.

Да, есть такое. На примере таблиц этого типа, добавьте в метод CCanvasTable::Show() в файле CanvasTable.mqh строку, как показано ниже:

//+------------------------------------------------------------------+
//| Показывает элемент                                               |
//+------------------------------------------------------------------+
void CCanvasTable::Show(void)
  {
//--- Выйти, если элемент уже видим
   if(CElement::IsVisible())
      return;
//--- Сделать видимыми все объекты
   m_area.Timeframes(OBJ_ALL_PERIODS);
   m_canvas.Timeframes(OBJ_ALL_PERIODS);
   m_scrollv.Show();
   m_scrollh.Show();
//--- Состояние видимости
   CElement::IsVisible(true);
//--- Перемещение элемента
   Moving(m_wnd.X(),m_wnd.Y());
  }

 //---

Если такая проблема будет с другими элементами добавляйте в их метод Show() такую же строчку. В следующем обновлении во всех классах элементов будет это исправление.

 
Привет, я слежу за вашей работой, и я очень благодарен.

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

Мне нужно изменить издания после того, как я вставляю один ввод в один CEdit или CSpinEdit и нажимаю Enter или TAB, я хочу перейти к следующему Edit, для лучшего удобства в моей программе.

Можете ли вы мне помочь или подсказать, где искать?

Большое спасибо за ваш вклад в развитие сообщества.
 
RODRIGO CAMPOS FIDELIS:

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

Мне нужно изменить издания после того, как я вставляю один ввод в один CEdit или CSpinEdit и нажимаю Enter или TAB, я хочу перейти к следующему Edit, для лучшего удобства использования в моей программе.

На данный момент это невозможно. Я подумаю, как это реализовать.
 
Anatoli Kazharski:
На данный момент это невозможно. Я подумаю, как это реализовать.
Анатолий Кажарский, я думаю над этим. Есть ли способ активировать режим редактирования кодом, например, когда они не ReadOnly и мы делаем двойной клик на CEdit и они становятся синими и выделенными.
Или, есть ли способ, чтобы я мог запросить ввод сплешем, окном сообщения или любым окном, автоматически запрашиваемым при выполнении кода.

Я думаю о некоторых возможностях, и я действительно не хочу использовать DLL, я еще не настолько профессионал. Но у меня есть желание. Если у вас есть для меня некоторые направления или идеи, я могу действительно улучшить наш код.
 

Уважаемый Анатолий, большое спасибо за ваши усилия!

Хочу обратить Ваше внимание на то, что в строке 237 файла MenuItem.mqh есть опечатка, из-за которой он не может быть успешно скомпилирован:

" > The type of the menu item can be set using the CMenuItem::TypeMenuItem()") method");

вместо этого следует читать

" > The type of the menu item can be set using the CMenuItem::TypeMenuItem() method");

правильно?

 
Это последняя версия MT4?
 

Edit постоянно мерцает.

https://www.mql5.com/en/forum/274301

 
Как создать только этикетку?