Новая версия платформы MetaTrader 5 build 4230: больше встроенных приложений и расширение поддержки ONNX - страница 22

 
Renat Fatkhullin #:

Блокировали обновления, сидели на мт4 1380 и выкачивали тысячи апдейтов безрезультатно.

1380 вышел в марте 2023, потом были релизы 1400, 1403 и в конце 1415. Но вы до последнего сидели на 1380.
Тех кто останется на Windows 7 тоже будете банить? Вы говорили, что с лета апдейты для W7 перестанете делать, т.е. нам придется сидеть на последней рабочей для W7 версии.
Надеюсь вы сделаете блокировку обновлений для юзеров с W7, чтобы им не устанавливались неработающие на W7 терминлы.
 
fxsaber #:
b4240, это ошибка в FileSelectDialog, что стал выдавать не относительный путь (от песочницы) выбранного файла, а абсолютный?


Раньше было так.


При этом раньше в диалоговом окне нельзя было выйти за пределы песочницы, а в b4240 - можно.


ЗЫ Чтобы сохранить старое поведение в песочнице, приходится использовать такой костыль.

Спасибо! Исправления внесены.

С билда 4240, внесены изменения в обработку нажатия клавиш
  1. Добавлено событие CHARTEVENT_KEYUP в OnChartEvent

  2. Функции TranslateKey и TetminalInfoInteger работают по разному.
    Введем понятие  KeyEvent — если в OnChartEvent  поступило событие клавиатуры CHARTEVENT_KEYUP или CHARTEVENT_KEYDOWN.   Теперь:

    • при вызове TetminalInfoInteger или TranslateKey из KeyEvent  данные функции используют состояние клавиатуры, закешированное в момент возникновения события.
      Это сделано для целостной (консистентной) обработки клавиш, например, состояния клавш SHIFT, CTRL и т.п.  Так как в момент возникновения события клавиатуры, MQL программа могла быть занята обработкой другого события.

    • в остальных случаях, а именно при вызовах TetminalInfoInteger или TranslateKey вне KeyEvent,  отдаётся текущее состояние клавиатуры.

  3. ЕСТЬ ОГРАНИЧЕНИЕ!  Если из MQL программы создать окна или диалоги при помощи CreateWindow или CreateDialog (не касается функций MessageBox/FileSelectDialog) , то вызов TetminalInfoInteger или TranslateKey для KeyEvent не будет отдавать текущее состояние клавиатуры, а будет возвращать закешированные системой Windows данные на момент закрытия созданного окна.

    Если создаёте окна из сторонних DLL (через импортированные функции), то окна следует создавать в отдельном потоке.

    Это связано с особенностями работы ОС Windows.

  4. Добавлена обработка DEAD ΚΕΥ, клавиши, которые изменяют следующую набранную букву,

    Например, для греческого алфавита, через  TranslateKey станут доступными: ά έ ύ и т.д.
 

Ilyas #:
Спасибо! Исправления внесены.


С билда 4240, внесены изменения в обработку нажатия клавиш

  1. Добавлено событие CHARTEVENT_KEYUP в OnChartEvent

  2. Функции TranslateKey и TetminalInfoInteger работают по разному.
    Введем понятие  KeyEvent — если в OnChartEvent  поступило событие клавиатуры CHARTEVENT_KEYUP или CHARTEVENT_KEYDOWN.   Теперь:

    • при вызове TetminalInfoInteger или TranslateKey из KeyEvent  данные функции используют состояние клавиатуры, закешированное в момент возникновения события.
      Это сделано для целостной (консистентной) обработки клавиш, например, состояния клавш SHIFT, CTRL и т.п.  Так как в момент возникновения события клавиатуры, MQL программа могла быть занята обработкой другого события.

    • в остальных случаях, а именно при вызовах TetminalInfoInteger или TranslateKey вне KeyEvent,  отдаётся текущее состояние клавиатуры.

  3. ЕСТЬ ОГРАНИЧЕНИЕ!  Если из MQL программы создать окна или диалоги при помощи CreateWindow или CreateDialog (не касается функций MessageBox/FileSelectDialog) , то вызов TetminalInfoInteger или TranslateKey для KeyEvent не будет отдавать текущее состояние клавиатуры, а будет возвращать закешированные системой Windows данные на момент закрытия созданного окна.

    Если создаёте окна из сторонних DLL (через импортированные функции), то окна следует создавать в отдельном потоке.

    Это связано с особенностями работы ОС Windows.

  4. Добавлена обработка DEAD ΚΕΥ, клавиши, которые изменяют следующую набранную букву,

    Например, для греческого алфавита, через  TranslateKey станут доступными: ά έ ύ и т.д.

Что-то сломалось. После автообновления на 4240 не запускается терминал. До этого работал в режиме portable

 
Ilyas #:
Спасибо! Исправления внесены.

С билда 4240, внесены изменения в обработку нажатия клавиш

  1. Добавлено событие CHARTEVENT_KEYUP в OnChartEvent

  2. Функции TranslateKey и TetminalInfoInteger работают по разному.
    Введем понятие  KeyEvent — если в OnChartEvent  поступило событие клавиатуры CHARTEVENT_KEYUP или CHARTEVENT_KEYDOWN.   Теперь:

    • при вызове TetminalInfoInteger или TranslateKey из KeyEvent  данные функции используют состояние клавиатуры, закешированное в момент возникновения события.
      Это сделано для целостной (консистентной) обработки клавиш, например, состояния клавш SHIFT, CTRL и т.п.  Так как в момент возникновения события клавиатуры, MQL программа могла быть занята обработкой другого события.

    • в остальных случаях, а именно при вызовах TetminalInfoInteger или TranslateKey вне KeyEvent,  отдаётся текущее состояние клавиатуры.

  3. ЕСТЬ ОГРАНИЧЕНИЕ!  Если из MQL программы создать окна или диалоги при помощи CreateWindow или CreateDialog (не касается функций MessageBox/FileSelectDialog) , то вызов TetminalInfoInteger или TranslateKey для KeyEvent не будет отдавать текущее состояние клавиатуры, а будет возвращать закешированные системой Windows данные на момент закрытия созданного окна.

    Если создаёте окна из сторонних DLL (через импортированные функции), то окна следует создавать в отдельном потоке.

    Это связано с особенностями работы ОС Windows.

  4. Добавлена обработка DEAD ΚΕΥ, клавиши, которые изменяют следующую набранную букву,

    Например, для греческого алфавита, через  TranslateKey станут доступными: ά έ ύ и т.д.

про пункт 3 :

- во первых просто интересно как оно взаимосвязано.

- как-то о подобных начинаниях надо заранее предупреждать.

- вот после такого востребована оф.функция "обновления только по запросу", только из меню

Слава богу, сейчас (в 4240) пронесло - окна всё-таки создаются и работают


 
Maxim Kuznetsov #:
- во первых просто интересно как оно взаимосвязано.

Это связано с особенностями работы ОС Windows.

 
Ilyas #:
С билда 4240, внесены изменения в обработку нажатия клавиш

Вы могли бы добавить для TerminalInfoInteger состояние Fullscreen?

 

Вы могли бы добавить горячую клавишу для Expert List (пкм на любом графике)?

 
void OnStart()
{
  int Array[] = {0};
  int Value = {0}; // OK
}

Случайно написал выделенную строку, компилятор не стал ругаться. Какое синтаксическое действие делает эта строка?

 
fxsaber #:

Случайно написал выделенную строку, компилятор не стал ругаться. Какое синтаксическое действие делает эта строка?

Фигурные скобки просто определяют область видимости и в данном случае никак не влияют на результат. Правда они работают не в любом количестве:

  int val0 = {{0}};   //ok
  int val1 = {{{0}}}; //не ok

Пример применения для определения области видимости:

{
  int v = 0; //ok
}
{
  int v = 0; //ok
}

в данном случае объявлены две переменные с одинаковым именем, но проблем нет, области ограничены фигурными скобками.

 
Andrey Dik #:

Фигурные скобки просто определяют область видимости и в данном случае никак не влияют на результат. Правда они работают не в любом количестве:

Пример применения для определения области видимости:

в данном случае объявлены две переменные с одинаковым именем, но проблем нет, области ограничены фигурными скобками.

А с чего бы им работать в любом количестве - ваша запись в начале это запись инициализации массива. Правда массива нет, но это неважно ведь массив одномерен и имеет один элемент - по сути просто переменная со значением.
Когда вы вводите вторую пару скобок это запись инициализации многомерного массива, но поскольку он всё равно исходя из написанного одномерный и с одним элементом - в итоге опять просто переменная со значением.
А вот когда третья пара появляется тут уже непонятно что вы хотите этим сказать. Мне кажется так, но могу ошибаться.

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