Alexey Viktorov: Алексей, а условную компиляцию здесь нельзя применить? Не получится удобней?
Я думаю, это будет более громоздко, чем выбор строки из многомерного строкового массива. К тому же нет определенного дефайна, который указывал бы на язык терминала, то есть придется задавать этот дефайн самому.
Ну, и наконец, получится несколько вариантов .ex* файлов, по одному на каждый язык
Я примерно так себе и представляю, вопрос был, как эти строковые массивы запихнуть в ресурсы. Уже понимаю, что никак, придется вынести в отдельный .mqh файл наверное.
Alexey Volchanskiy: Я примерно так себе и представляю, вопрос был, как эти строковые массивы запихнуть в ресурсы. Уже понимаю, что никак, придется вынести в отдельный .mqh файл наверное.
А если этот *.mqh файл сделать в виде класса. В этом классе начальный метод - инициализация - выбор языка в зависимости от языка терминала.
И потом просто метод GetRow(const int row) и будет этот метод, в зависимости от языка, возвращать строку под номером таким-то из соответствующего списка или массива:
string Mstr_eng[][3]=
{
{" The class constructor CWin"},
{" Properties class object CWin:"},
{"Window title","New window"},
{"Header Type","CRowType1(0)"},
{"X= offset from the vertical","50"},
{"Y= offset from the horizontal","100"},
{"B= window width","250"},
{"Snap windows","left corner"},
{" The class constructor CRow"},
{"Focus is on the line","0"},
{"ADD","INSERT","DELETE"},
{" Properties class object CRow:"},
{"Type line","CRowType1(0)"},
{"Cell 1 (string)",""},
{"Cell 2 (string)",""},
{"Cell 3 (string)",""},
{"Cell width 1 (int)",""},
{"Cell width 2 (int)",""},
{"Project","file name"},
{"Code Generation","START"},
{},
{}
};
string Mstr_rus[][3]=
{
{" Конструктор класса CWin"},
{" Свойства объекта класса CWin:"},
{"Заголовок окна","Новое окно"},
{"Тип заголовка","CRowType1(0)"},
{"X= отступ от вертикали","50"},
{"Y= отступ от горизонтали","100"},
{"B= ширина окна","250"},
{"Привязка окна","левый угол"},
{" Конструктор класса CRow"},
{"Фокус на строке","0"},
{"ДОБАВИТЬ","ВСТАВИТЬ","УДАЛИТЬ"},
{" Свойства объекта класса CRow:"},
{"Тип строки","CRowType1(0)"},
{"Ячейка 1 (string)",""},
{"Ячейка 2 (string)",""},
{"Ячейка 3 (string)",""},
{"Ширина ячейки 1 (int)",""},
{"Ширина ячейки 2 (int)",""},
{"Проект","имя файла"},
{"Генерация кода","СТАРТ"},
{},
{}
};
Alexey Volchanskiy:
Вы хотели сказать - арифметика указателей? В MQL не работает, т.к. тутошние указатели не указывают на адреса памяти, это просто дескрипторы в виндовской интерпретации.
Я хотел сказать и сказал спецификация. :) Описание арифметики часть спецификации. Ну ладно, вопрос терминологии.
Alexey Volchanskiy: Я примерно так себе и представляю, вопрос был, как эти строковые массивы запихнуть в ресурсы. Уже понимаю, что никак, придется вынести в отдельный .mqh файл наверное.
Для строк по определению не нужны ресурсы, т.к. строки в массивах это и есть подключаемые "ресурсы". Вообще абсолютно любой файл может хранится в программе в виде обычного массива uchar. Так у меня например хранится xml файл настроек программы:
Естественно необходимо написать специальный конвертер, загружающий произвольный файл с диска и конвертирующий его в MQL массив. Кстати, подобные ресурсы можно еще и сжимать zip'ом, благодаря чему будет достигаться еще большая экономия.
А если этот *.mqh файл сделать в виде класса. В этом классе начальный метод - инициализация - выбор языка в зависимости от языка терминала.
И потом просто метод GetRow(const int row) и будет этот метод, в зависимости от языка, возвращать строку под номером таким-то из соответствующего списка или массива:
Кстати, это мысль. Будет попроще в использовании. Наверное, так и сделаю, сенкс за идею.
Для авторизации и пользования сайтом MQL5.com необходимо разрешить использование файлов Сookie.
Пожалуйста, включите в вашем браузере данную настройку, иначе вы не сможете авторизоваться.
Вы вошли в аккаунт. Двухфакторная аутентификация отключена. Настройте её заново и отсканируйте новый QR-код или продолжите с отключённой двухфакторной аутентификацией.
Алексей, а условную компиляцию здесь нельзя применить? Не получится удобней?
Я думаю, это будет более громоздко, чем выбор строки из многомерного строкового массива. К тому же нет определенного дефайна, который указывал бы на язык терминала, то есть придется задавать этот дефайн самому.
Ну, и наконец, получится несколько вариантов .ex* файлов, по одному на каждый язык
по идее можно сделать csv файл с переводами и считывать его в OnInit
id ; English ; Russian
0 ; "spread" ; "Спрэд"
1 ; "profit" ; "Профит"
а файл уже запихнуть в ресурсы. Да и вообще такой файл можно сделать один на все проекты
Я делаю так:
Я примерно так себе и представляю, вопрос был, как эти строковые массивы запихнуть в ресурсы. Уже понимаю, что никак, придется вынести в отдельный .mqh файл наверное.
А если этот *.mqh файл сделать в виде класса. В этом классе начальный метод - инициализация - выбор языка в зависимости от языка терминала.
И потом просто метод GetRow(const int row) и будет этот метод, в зависимости от языка, возвращать строку под номером таким-то из соответствующего списка или массива:
Вы хотели сказать - арифметика указателей? В MQL не работает, т.к. тутошние указатели не указывают на адреса памяти, это просто дескрипторы в виндовской интерпретации.
Я хотел сказать и сказал спецификация. :) Описание арифметики часть спецификации. Ну ладно, вопрос терминологии.
Ну, не работает, так не работает. Жаль.
Я примерно так себе и представляю, вопрос был, как эти строковые массивы запихнуть в ресурсы. Уже понимаю, что никак, придется вынести в отдельный .mqh файл наверное.
Для строк по определению не нужны ресурсы, т.к. строки в массивах это и есть подключаемые "ресурсы". Вообще абсолютно любой файл может хранится в программе в виде обычного массива uchar. Так у меня например хранится xml файл настроек программы:
Естественно необходимо написать специальный конвертер, загружающий произвольный файл с диска и конвертирующий его в MQL массив. Кстати, подобные ресурсы можно еще и сжимать zip'ом, благодаря чему будет достигаться еще большая экономия.
А если этот *.mqh файл сделать в виде класса. В этом классе начальный метод - инициализация - выбор языка в зависимости от языка терминала.
И потом просто метод GetRow(const int row) и будет этот метод, в зависимости от языка, возвращать строку под номером таким-то из соответствующего списка или массива:
Кстати, это мысль. Будет попроще в использовании. Наверное, так и сделаю, сенкс за идею.
Кстати, это мысль. Будет попроще в использовании. Наверное, так и сделаю, сенкс за идею.
Вот только кажется массивы типа string нельзя проинициализировать в конструкторе?
В конструкторе никакие массивы нельзя проинициализировать одной строкой типа
Можно только поэлементно
Но можно задать начальные значения массивам с модификатором static или const static. Пример: