Скачать MetaTrader 5

Активация существующего графика, не активного в данный момент времени

Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий
Worh
24
Worh 2016.03.29 08:04 
Здравтсвуйте ! в одной теме нашел код активации (ниже). И мне надо на графике, который сатл активным , проделать разные операции , хотя бы Коммент написать.Но к сожалению после исполнения приведенного кода , дальнейшие операции относятся все равно к текущему графику. 
#import "user32.dll"
  bool BringWindowToTop(int hWnd);
  int GetParent(int hWnd);
#import

void OnStart()
  {
   // Выбираем второй график (меняем на свой код)
   long Chart = ChartFirst();
   Chart = ChartNext(Chart);
   // Получаем системный дескриптор
   int hwndChart = (int)ChartGetInteger(Chart, CHART_WINDOW_HANDLE);
   // Делаем его активным
   BringWindowToTop(GetParent(hwndChart));
  }
Vladislav Andruschenko
93901
Vladislav Andruschenko 2016.03.29 11:36  

ChartSetString

Задает значение соответствующего свойства указанного графика. Свойство графика должно быть типа string. Отданная команда поступает в очередь сообщений графика и выполняется только после обработки всех предыдущих команд.

bool  ChartSetString(
   long     chart_id,      // идентификатор графика
   int      prop_id,       // идентификатор свойства
   string   str_value      // значение
   );


 

CHART_COMMENT – текст комментария на графике.



//+------------------------------------------------------------------+ 
//| Функция получает текст комментария в левом верхнем углу графика. | 
//+------------------------------------------------------------------+ 
bool ChartCommentGet(string &result,const long chart_ID=0) 
  { 
//--- сбросим значение ошибки 
   ResetLastError(); 
//--- получим значение свойства 
   if(!ChartGetString(chart_ID,CHART_COMMENT,result)) 
     { 
      //--- выведем сообщение об ошибке в журнал "Эксперты" 
      Print(__FUNCTION__+", Error Code = ",GetLastError()); 
      return(false); 
     } 
//--- успешное выполнение 
   return(true); 
  } 
//+------------------------------------------------------------------+ 
//| Функция устанавливает текст комментария в левом верхнем углу     | 
//| графика.                                                         | 
//+------------------------------------------------------------------+ 
bool ChartCommentSet(const string str,const long chart_ID=0) 
  { 
//--- сбросим значение ошибки 
   ResetLastError(); 
//--- установим значение свойства 
   if(!ChartSetString(chart_ID,CHART_COMMENT,str)) 
     { 
      //--- выведем сообщение об ошибке в журнал "Эксперты" 
      Print(__FUNCTION__+", Error Code = ",GetLastError()); 
      return(false); 
     } 
//--- успешное выполнение 
   return(true); 
  }
 

 

pako
3318
pako 2016.03.29 15:44  
Worh:
//+------------------------------------------------------------------+ 
//| Отправка терминалу команды на показ графика поверх всех других.  | 
//+------------------------------------------------------------------+ 
bool ChartBringToTop(const long chart_ID=0) 
  { 
//--- сбросим значение ошибки 
   ResetLastError(); 
//--- покажем график поверх всех других 
   if(!ChartSetInteger(chart_ID,CHART_BRING_TO_TOP,0,true)) 
     { 
      //--- выведем сообщение об ошибке в журнал "Эксперты" 
      Print(__FUNCTION__+", Error Code = ",GetLastError()); 
      return(false); 
     } 
//--- успешное выполнение 
   return(true); 
  }
Worh
24
Worh 2016.03.29 16:29  
Vladislav Andruschenko:

ChartSetString

Задает значение соответствующего свойства указанного графика. Свойство графика должно быть типа string. Отданная команда поступает в очередь сообщений графика и выполняется только после обработки всех предыдущих команд.

bool  ChartSetString(
   long     chart_id,      // идентификатор графика
   int      prop_id,       // идентификатор свойства
   string   str_value      // значение
   );


 

 Спасибо !

А как изменить свойство графического объекта на не активном графике. По циклу перебираю (код приложен) , создаю графический объект (это получается,там явно АйДи указывается), но хочу изменить свойство  (цвет помянть или еще что ), то действие относится к текущему графику с которого запущен скрипт.


int i=0; 

  long currChart,prevChart=ChartFirst(); 

  while(true)// 

  { 

   currChart=ChartNext(prevChart); // на основании предыдущего получим новый график 

   if(currChart<0)      break;       //break;          // достигли конца списка графиков 

   

   if (ChartSymbol(currChart)==nameSym)

   {

      ChartSetInteger(currChart,CHART_BRING_TO_TOP,0,true);

//-------------- наличие вертикальной линии

      if (ObjectFind(currChart,nameLineV)<0)

      {

         ObjectCreate(currChart,nameLineV,OBJ_VLINE, 0,Time[0],PriceL);                

         ObjectSet(nameLineV,OBJPROP_STYLE, STYLE_DASHDOTDOT);

         ObjectSet(nameLineV, OBJPROP_COLOR, Blue);

      }

      else

      {

         ObjectMove(currChart,nameLineV,0,Time[0],PriceL);

      }

      ChartRedraw(currChart);

         //ObjectSet(nameLineV,OBJPROP_STYLE, STYLE_DASHDOTDOT);  //РАЗОБРАТЬСЯ -  функция н еработает , не перехватывает на активное окно графика 

         //ObjectSet(nameLineV, OBJPROP_COLOR, Blue);            // функция н еработает , не перехватывает на активное окно графика 

      break;

   } 

 

 

pako
3318
pako 2016.03.29 16:33  
Worh:

Указывайте ID графика

        ObjectSetInteger  (currChart,nameLineV, OBJPROP_COLOR, Blue);
Worh
24
Worh 2016.03.30 17:43  
pako:

Указывайте ID графика

Спасибо ! Заработало 
Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий