Ошибки, баги, вопросы - страница 3531

 
Andrey Dik #:
Скажите пожалуйста, отсутствие возможности выделять сразу несколько папок в окне - так задумано или это баг?

Так задумано

 
Slava #:

Так задумано

Понятно. Спасибо за ответ. Если поведение функции изменять не планируется, то просьба осветить в справке указав явно, что мультивыбор папок запрещён.

Скажите, пожалуйста, какая для этого причина? Потому что с помощью обычных файловых операций список поддерикторий получить можно без проблем например так:

bool GetNamesAgentFolders (const string filter, C_O_Agents &fAgents [])
{
  ArrayResize (fAgents, 0);
  string found [1];
  long handle = FileFindFirst (filter + "\\*", found [0], FILE_COMMON);

  if (handle != INVALID_HANDLE)
  {
    do
    {
      ResetLastError ();
      if (!FileIsExist (filter + "\\" + found [0], FILE_COMMON))
      {
        if (GetLastError () == 5018)
        {
          found [0] = StringSubstr (found [0], 0, found [0].Length () - 1);
          ArrayResize (fAgents, ArraySize (fAgents) + 1);
          fAgents [ArraySize (fAgents) - 1].FAgents = found [0];
        }
      }
    }
    while (FileFindNext (handle, found [0]));

    FileFindClose (handle);

    return true;
  }

  return false;
}

А с ручным выбором папок с помощью окна было то же самое, но уже осознанно. Проблем с безопасностью не вижу, потому что окно не позволяет выйти выше папки песочницы всё равно. 

 
доброго времени суток, подскажите куда написать о возникшей проблеме в мт5 после последнего обновления, советник не работает .
 
mayancev #:
доброго времени суток, подскажите куда написать о возникшей проблеме в мт5 после последнего обновления, советник не работает .
Что случилось? Как проявляется? Что в журналах пишется? Какая ОС? 
 
после обновления терминала мт5, с графиков пропала программа советник , при перетаскивания программы с навигатора на график программа не активируется
винд 10
 
Andrey Dik #:

Понятно. Спасибо за ответ. Если поведение функции изменять не планируется, то просьба осветить в справке указав явно, что мультивыбор папок запрещён.

Скажите, пожалуйста, какая для этого причина? Потому что с помощью обычных файловых операций список поддерикторий получить можно без проблем например так:

А с ручным выбором папок с помощью окна было то же самое, но уже осознанно. Проблем с безопасностью не вижу, потому что окно не позволяет выйти выше папки песочницы всё равно. 

Что Вы хотите сделать при помощи FileSelectDialog?

Открыть много папок?

Открыть много файлов из многих папок?

Функция изначально предназначалась именно для того, чтобы можно было вручную открыть любой файл на чтение (мультиселект тут идёт бонусом), либо открыть файл для записи

 
Andrey Dik #:
Таким образом, прошу разработчиков добавить в справку этот момент, что дополнительное выделение памяти под массив происходит только в случае ненулевого второго параметра.

Там это явно указанно уже

Andrey Dik #:

Примечание

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

Общее число элементов в массиве не может превышать 2147483647.

При частом распределении памяти рекомендуется использовать третий параметр, задающий резерв для уменьшения количества физического распределения памяти. Все последующие вызовы функции ArrayResize не приводят к физическому перераспределению памяти, а только меняется размер первого измерения массива в пределах зарезервированной памяти. Следует помнить, что третий параметр будет использоваться только тогда, когда будет происходить физическое распределение памяти, например:

ArrayResize(arr,1000,1000);
for(int i=1;i<3000;i++)
   ArrayResize(arr,i,1000);

В данном случае произойдёт 2 перераспределения памяти, один раз до входа в цикл на 3000 итераций, при этом размерность массива будет установлена в 1000 и второй при i равной 2000. Если третий параметр опустить, то произойдёт 2000 физических перераспределения памяти и это замедлит выполнение программы.

 
Andrey Dik #:
Если поведение функции изменять не планируется, то просьба осветить в справке указав явно, что мультивыбор папок запрещён.
Зачем? В документации уже явно написано "FSD_ALLOW_MULTISELECT – разрешает выбирать несколько файлов". Не папок и файлов, а просто файлов
 
#include <Canvas\Canvas.mqh>

//+------------------------------------------------------------------+
//| Script program start function                                    |
//+------------------------------------------------------------------+
void OnStart()
 {
    CCanvas canvas;
    canvas.CreateBitmapLabel("Name", 15, 30, 300, 250, COLOR_FORMAT_ARGB_NORMALIZE);
    canvas.Erase(ColorToARGB(clrWhite, 255));
    canvas.FontSet("Calibri", -210);
    canvas.TextOut(15, 15, "Text", ColorToARGB(clrLightSlateGray, 255));
    canvas.Update(true);
    Print(":Start:Error="+GetLastError());//-:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
    Sleep(6000);
    canvas.Destroy();
 }
//+------------------------------------------------------------------+

При использовании CCanvas Даже в стандартных примерах на старте выдаёт ошибку  5035- Длина строки меньше, чем ожидалось. В имени полотна CreateBitmapLabel это происходит по стандарту....а если ничего не вводить собственно выдаст 5040-испорченый параметр тип стока. С точки зрения работы информация бесполезная ,вопрос зачем она тогда нужна...

 
Slava #:

Что Вы хотите сделать при помощи FileSelectDialog?

Открыть много папок?

Открыть много файлов из многих папок?

Функция изначально предназначалась именно для того, чтобы можно было вручную открыть любой файл на чтение (мультиселект тут идёт бонусом), либо открыть файл для записи

Не открыть, а получить список нужных папок, так же, как это можно сделать тем же диалоговым окном для файлов - получить список файлов.

Например, в папке 10 папок и нужно выбрать только три из этих 10-и. Для файлов получить такой список можно а для папок нет.