Новая версия платформы MetaTrader 5 build 1930: Плавающие окна графиков и .Net библиотеки в MQL5 - страница 155

 
fxsaber:
Уважаемые разработчики, решал казалось бы рядовую задачу - получить список файлов песочницы (включая подпапки). Код немного громоздкий

Профилирование показывает, что >95% времени отнимает вызов FileIsExists.

Обращаюсь ко всем, существует ли более быстрый способ получить список файлов песочницы? Возможно, написал далеко не оптимальный код.

Реализовал без FileIsExists, стало быстрее в 20 раз.

 
Комментарии, не относящиеся к этой теме, были перенесены в "Любые вопросы новичков по MQL4, помощь и обсуждение по алгоритмам и кодам".
 

Добрый день, друзья!

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

int OnInit()
   {
   long ChartId=ChartID();
   string Name="Obj";
   if(!ObjectCreate(ChartId,Name,OBJ_BITMAP_LABEL,ChartWindowFind(),0,0)) return(-1);
   if(!ObjectSetString(ChartId,Name,OBJPROP_BMPFILE,0,"\\Images\\dollar.bmp")) return(-1);
   if(!ObjectSetString(ChartId,Name,OBJPROP_BMPFILE,1,"\\Images\\euro.bmp")) return(-1);
   ObjectSetInteger(ChartId,Name,OBJPROP_XDISTANCE,100);
   ObjectSetInteger(ChartId,Name,OBJPROP_YDISTANCE,100);
   return(0);   
   }

То есть срабатывание происходит только при отпускании в точке нажатия.

Спасибо.

 
Aleksei Stepanenko:

Добрый день, друзья!

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

То есть срабатывание происходит только при отпускании в точке нажатия.

Спасибо.

Так и должно быть, это принцип работает в большинстве софта. Кнопка срабатывает если мышь отжата на ней. Попробуйте в браузере нажеть кнопку открыть новую вкладку затем отведите мышь от кнопки и отпустите.

 
Vladimir Pastushak:


Я понял вашу идею, это действительно так. Кнопки срабатывают в момент отпускания. Но в этом случае работает неправильно. Я нажимаю на кнопке, затем сдвигаю курсор на пиксел, не сходя с этой кнопки, отпускаю на той же кнопке, и ничего не происходит. Получается, что при быстром небрежном щелчке кнопка не работает. В четвёрке не так. Спасибо :)

 

Ещё нюанс:

1. В тестере стратегий поле ввода OBJ_EDIT не посылает событие окончания редактирования CHARTEVENT_OBJECT_ENDEDIT. Хотя событие нажатия на объект CHARTEVENT_OBJECT_CLICK приходит.

2. После выхода из поля ввода введённое значение не остаётся.

int OnInit()
   {
   long ChartId=ChartID();
   string Name="Obj";
   if(!ObjectCreate(ChartId,Name,OBJ_EDIT,ChartWindowFind(),0,0)) return(-1);
   ObjectSetInteger(ChartId,Name,OBJPROP_XDISTANCE,100);
   ObjectSetInteger(ChartId,Name,OBJPROP_YDISTANCE,100);
   ObjectSetInteger(ChartId,Name,OBJPROP_BGCOLOR,C'0xFF,0xFF,0xFF');
   ObjectSetInteger(ChartId,Name,OBJPROP_BORDER_COLOR,C'0x00,0x00,0x00');
   ObjectSetInteger(ChartId,Name,OBJPROP_COLOR,C'0x00,0x00,0x00');
   return(0);
   }

void OnChartEvent(const int id, const long &lparam, const double &dparam, const string &sparam)
   {
   printf(IntegerToString(id)+" : "+sparam);
   }  

Ну и третий неприятный момент, при паузе тестера не приходят вообще никакие события. Хотя в четвёрке при паузе всё работает, и после изменений значений в полях индикатор всё пересчитывает. То есть программа не отключена. А здесь похоже в момент паузы доступ к индикатору полностью отключён.

 
Aleksei Stepanenko:

Ещё нюанс:

1. В тестере стратегий поле ввода OBJ_EDIT не посылает событие окончания редактирования CHARTEVENT_OBJECT_ENDEDIT. Хотя событие нажатия на объект CHARTEVENT_OBJECT_CLICK приходит.

2. После выхода из поля ввода введённое значение не остаётся.

Ну и третий неприятный момент, при паузе тестера не приходят вообще никакие события. Хотя в четвёрке при паузе всё работает, и после изменений значений в полях индикатор всё пересчитывает. То есть программа не отключена. А здесь похоже в момент паузы доступ к индикатору полностью отключён.

void OnChartEvent(const int id, const long &lparam, const double &dparam, const string &sparam)
   {
   printf(IntegerToString(id)+" : "+sparam);
   }  

В тестере не работает....

 
Vladimir Pastushak:

В тестере не работает....

В режиме визуализации работает, но не всё. Например, CHARTEVENT_OBJECT_CLICK (id=1) приходит, и ещё несколько (id=0, 4, 10), а вот CHARTEVENT_OBJECT_ENDEDIT (id=3) нет. Похоже дело в самом объекте OBJ_EDIT, потому что введённые значения тоже не сохраняются.
 

Эх, похоже на мне серебряный дождь закончился :)

Причина обращения: