Вопросы от начинающих MQL5 MT5 MetaTrader 5 - страница 1506

 
trader6_1 #:
GetParent

Спасибо ребята. Совместил ваши ответы, немного пояндексил и получилось:

#include <WinAPI\WinUser.mqh>

void arrangeHorizontal3()
  {
   int hWnd = (int)ChartGetInteger(0, CHART_WINDOW_HANDLE, 0);
   ShowWindow (GetParent(hWnd),3); 
  }
 
Здравствуйте!
Создаю кнопку с помощью библиотеки Controls\Button.mqh и панель с помощью: Controls\Dialog.mqh
for(int i=0; i<SymbolsTotal(true);i++){ 
btn1.Create(0,"btn"+(string) i,0,0,0+BTN_HEIGHT+btn_left,0,0+BTN_WIDTH*btn_line);
ExtDialog.Add(btn1);
}

И далее созданную кнопку я добавляю в панель и немного сдвигаю панель в итоге получается:



Из этого следуют два вопроса
1) Как привязать все кнопки, если при их создание используется переменная "i" равная количеству символов?
2) Как запретить двигать панель созданную через библиотеку ?

 

Здравствуйте!

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

for(int i=0; i<SymbolsTotal(true);i++){ 
   btns[i].Create(0,"btn"+(string) i,0,0,0+BTN_HEIGHT+btn_left,0,0+BTN_WIDTH*btn_line);
   ExtDialog.Add(btns[i]);
}
 
Yuriy Bykov #:

Здравствуйте!

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

Попробовал, выбивает критическую ошибку "Array out of range"

 
Надо сначала сделать этот массив объектов, а потом уже его элементы использовать в цикле, вызывая для них метод Create. Сейчас не могу написать пример
 
Yuriy Bykov #:
Надо сначала сделать этот массив объектов, а потом уже его элементы использовать в цикле, вызывая для них метод Create. Сейчас не могу написать пример

Понял, спасибо! 

 

Как-то так, наверное:

// Глобальный массив
CButton btns[];

...

int total = SymbolsTotal(true);

ArrayResize(btns, total);

for(int i=0; i<total;i++){ 
   btns[i].Create(0,"btn"+(string) i,0,0,0+BTN_HEIGHT+btn_left,0,0+BTN_WIDTH*btn_line);
   ExtDialog.Add(btns[i]);
}

Обычно создают свой класс диалога, наследуясь от CAppDialog. Тогда btns может быть полем этого класса. Иначе надо делать его глобальной переменной.

Проверьте ещё, что у вас правильно вычисляются координаты размещения очередной кнопки - в их вычислении, по идее, как-то должен участвовать индекс i.

 
наверное глупый вопрос, но я новичок и еще не во всем разобрался. подскажите пожалуйста как можно ограничить время работы советника по времени? Я хочу выдать на 1-2 недели советник на тест. Как это прописать в коде советника? Надо чтобы он через Х времени выдал сообщение время работы советника истекло обратитесь к автору или что-то подобное
 
Yuriy Bykov #:

Как-то так, наверное:

Обычно создают свой класс диалога, наследуясь от CAppDialog. Тогда btns может быть полем этого класса. Иначе надо делать его глобальной переменной.

Проверьте ещё, что у вас правильно вычисляются координаты размещения очередной кнопки - в их вычислении, по идее, как-то должен участвовать индекс i.

Все работает! Огромное спасибо!

 
Lucum #:
наверное глупый вопрос, но я новичок и еще не во всем разобрался. подскажите пожалуйста как можно ограничить время работы советника по времени? Я хочу выдать на 1-2 недели советник на тест. Как это прописать в коде советника? Надо чтобы он через Х времени выдал сообщение время работы советника истекло обратитесь к автору или что-то подобное

Забавно, но ладно.

Самый простой вариант, добавить в OnTick() такой код.

   if(TimeLocal() >= D'2024.03.15 00:00:00')
     {
      MessageBox("Без денег, торговать не буду.\nДай денег.\nПобольше.");
      ExpertRemove();
     }