Обсуждение статьи "Графические интерфейсы XI: Интеграция графической стандартной библиотеки (build 16)"
Отличная библиотека!
Congrantulations again! Nice job!
Добрый день.
Проблема возникла откуда не ждали...
Была программа - одно основное окно, одно диалоговое. Все нормально. Добавил еще одно диалоговое окно.
Теперь вот как они себя ведут. Открываем одно диалоговое окно - все нормально, работает. Закрываем. Открываем второе, элементы в нем не реагируют на нажатия, точнее как-то странно реагируют (на скриншоте). Пока не кликнешь на заголовок окна, после все нормально с этим окном. Но такая же проблема теперь с первым окном, пока не кликнешь на заголовок.
Подскажите, пожалуйста, что может быть не так? Или куда вообще смотреть?
Я скачал пакет и создал демонстрационный графический интерфейс CTable.
#include <\\EasyAndFastGUI\\WndEvents.mqh> //+------------------------------------------------------------------+ //| Класс для создания приложения| //+------------------------------------------------------------------+ class CGUI : public CWndEvents { private: CWindow m_window; CTable m_table; public: bool CreateGUI(const int x, const int y, const string caption_text); private: bool CreateWindow(const int x, const int y, const int x_size, const int y_size, const string text); bool CreateTable(const int x_gap, const int y_gap); }; bool CGUI::CreateGUI(const int x, const int y, const string caption_text) { int x_size = 400, y_size = 400; if (!CreateWindow(x, y, x_size, y_size, caption_text)) { return(false); } if (!CreateTable(1, 20)) { return(false); } m_chart.Redraw(); return(true); } //+------------------------------------------------------------------+ //| Создает форму 1 для элементов управления| //+------------------------------------------------------------------+ bool CGUI::CreateWindow(const int x, const int y, const int x_size, const int y_size, const string caption_text) { CWndContainer::AddWindow(m_window); m_window.XSize(x_size); m_window.YSize(y_size); m_window.Alpha(255); m_window.IsMovable(true); m_window.ResizeMode(true); m_window.CloseButtonIsUsed(true); m_window.FullscreenButtonIsUsed(true); m_window.CollapseButtonIsUsed(true); m_window.TooltipsButtonIsUsed(true); m_window.RollUpSubwindowMode(true, true); m_window.TransparentOnlyCaption(true); //--- Установите всплывающие подсказки m_window.GetCloseButtonPointer().Tooltip("Close"); m_window.GetFullscreenButtonPointer().Tooltip("Fullscreen/Minimize"); m_window.GetCollapseButtonPointer().Tooltip("Collapse/Expand"); m_window.GetTooltipButtonPointer().Tooltip("Tooltips"); m_window.BackColor((color)ChartGetInteger(m_chart_id, CHART_COLOR_BACKGROUND)); m_window.BorderColor(clrMaroon); return(m_window.CreateWindow(m_chart_id, m_subwin, caption_text, x, y)); } //+------------------------------------------------------------------+ //| Создайте визуализированную таблицу| //+------------------------------------------------------------------+ bool CGUI::CreateTable(const int x_gap,const int y_gap) { m_table.MainPointer(m_window); int x_size = 300, y_size = 300; int column_width[] = {100, 200}; m_table.XSize(x_size); m_table.YSize(y_size); m_table.TableSize(2, 10); m_table.ColumnsWidth(column_width); m_table.CellYSize(30); ENUM_ALIGN_MODE column_align[]; ArrayResize(column_align, 2); ::ArrayInitialize(column_align, ALIGN_RIGHT); m_table.TextAlign(column_align); color bg_color = (color)ChartGetInteger(m_chart_id, CHART_COLOR_BACKGROUND); m_table.CellColor(bg_color); m_table.GridColor(bg_color); m_table.BorderColor(bg_color); m_table.FontSize(12); /* CScrollV *scroll_v = m_table.GetScrollVPointer(); scroll_v.ChangeThumbSize(0, 0); scroll_v.Hide(); scroll_v.IsVisible(false); CScrollH *scroll_h = m_table.GetScrollHPointer(); scroll_h.ChangeThumbSize(0, 0); scroll_h.Hide(); scroll_h.IsVisible(false); //*/ //m_table.TextXOffset(5); //m_table.TextYOffset(4); m_table.ShowHeaders(false); m_table.SelectableRow(false); m_table.ColumnResizeMode(false); //m_table.IsZebraFormatRows(clrWhiteSmoke); //m_table.AutoXResizeMode(true); //m_table.AutoXResizeRightOffset(1); //m_table.AutoYResizeMode(true); //m_table.AutoYResizeBottomOffset(25); if (!m_table.CreateTable(x_gap, y_gap)) { return(false); } CWndContainer::AddToElementsArray(0, m_table); m_table.Update(true); m_window.Update(true); return(true); } //+------------------------------------------------------------------+ //| Функция инициализации эксперта| //+------------------------------------------------------------------+ int OnInit() { //--- CGUI gui; gui.CreateGUI(10, 50, "Test GUI"); //--- return(INIT_SUCCEEDED); } //+------------------------------------------------------------------+ //| Функция деинициализации эксперта| //+------------------------------------------------------------------+ void OnDeinit(const int reason) { //--- } //+------------------------------------------------------------------+ //| Функция экспертного тика| //+------------------------------------------------------------------+ void OnTick() { //--- } //+------------------------------------------------------------------+
Но я обнаружил, что элемент управления CTable все равно оставляет пробелы на полосе прокрутки H/V, и я не могу удалить их с помощью Hide(), IsVisiable(false).

Не могли бы вы подсказать мне обходной путь?
Заранее спасибо,
Дэвид
Возможно этот вопрос уже обсуждался, но я не увидел. Как сделать так, что бы панелька перерисовывалась после добавления новых объектов на график (например линий)

Я заметил, что если свернуть развернуть панель, то она уже поверх этих линий, но не вся :((

Возможно этот вопрос уже обсуждался, но я не увидел. Как сделать так, что бы панелька перерисовывалась после добавления новых объектов на график (например линий)
- Скачайте последнюю версию библиотеки.
- Попробуйте вызвать метод CWndEvents::ResetWindow().
P.S. Библиотека больше не будет обновляться. Все необходимые изменения, исправления и дополнения, если возникает такая необходимость, пользователи должны научиться вносить самостоятельно.
- Скачайте последнюю версию библиотеки.
- Попробуйте вызвать метод CWndEvents::ResetWindow().
P.S. Библиотека больше не будет обновляться. Все необходимые изменения, исправления и дополнения, если возникает такая необходимость, пользователи должны научиться вносить самостоятельно.
Понял, спасибо
К сожалению, различные сборки (релизы) не подходят друг другу.
То есть, все примеры от Article01 до Article11 должны работать без ошибок.
Однако в предыдущих примерах компилятор выдает множество предупреждений и ошибок.
При "копировании" новых версий старые примеры перестают работать.
Более того, переводы неадекватны или вовсе отсутствуют.
Отлично!
Это позор и типично для многих вещей в Metaquotes.
Пора бы уже выложить в сеть полностью функциональный и полный релиз, а не просто несовместимые куски и части.
Оглавление файлов примеров и где найти то, чего не хватает. Это было бы темой для последней статьи в этой серии, поскольку, по слухам, она не будет продолжена.
Было бы очень обидно потратить всю эту работу впустую, если бы не было рабочих примеров, которые можно было бы использовать.
С уважением, Отто Паузер
А вот чего действительно не хватает, так это редактора диалогов!
Я собираюсь попробовать
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Вы принимаете политику сайта и условия использования
Опубликована статья Графические интерфейсы XI: Интеграция графической стандартной библиотеки (build 16):
С недавнего времени была представлена новая версия графической библиотеки для создания научных графиков (класс CGraphic). В этом обновлении разрабатываемой библиотеки для создания графических интерфейсов будет представлена версия с новым элементом для создания графиков. Теперь визуализировать данные различных типов можно будет ещё проще.
Ранее в разрабатываемой библиотеке использовалась копия класса CCanvas, предназначенная для рисования. В связи с недавно проведённым глобальным рефакторингом кода библиотеки теперь в этой копии нет необходимости, и её можно удалить, заменив оригинальной версией из стандартной библиотеки. Это уменьшило объём библиотеки ещё приблизительно на 10% и на почти 40% относительно версии, которая была представлена до рефакторинга в статьях Графические интерфейсы XI: Рефакторинг кода библиотеки (build 14.1) и Графические интерфейсы XI: Нарисованные элементы управления (build 14.2).
Для создания графиков теперь будет использоваться класс CGraphic.
Рис. 7. Демонстрация анимированного гипоциклоида.
Автор: Anatoli Kazharski