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

 
Andrey Dik #:

Артем, уникальность задания имени объекту (любого) полезна, если это требуются, но всё же я говорил про явный баг в МТ5, речь именно о критичности длины пути папки, в которой лежит исполняемая программа, а не длина имени объекта или уникальность имени.

Если длина пути папки будет больше какого то значения, то канвас  просто не рисуется, не выдавая при этом никаких ошибок, при этом весь остальной код программы будет работать без проблем. Это означает, что у пользователя тупо перестанет к примеру отображаться интерфейс запущенной программы, он даже не сможет сообщить код ошибки разработчику, что бы исправить проблему. Канвас просто не рисует и всё, нет при этом никаких ошибок GetLastError

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

 
Artyom Trishkin #:

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

Выделенное красным не имеет никакого отношения к пути откуда запущена программа. Имя ресурса канвас никак не связано с именем пути запущенной программы. 

Это баг, запусти пожалуйста код, Артем, если хочешь убедиться, мне не хочется спорить. 

 
Artyom Trishkin #:

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

самое интересное как раз то, что граф объект успешно создается. это видно по скриншотам котрые я приводил. и то что на нем рисуем тоже не вызывает проблем (поэтому и нет ошибок). но только объект пустой, ничего не отображается.

 
Andrey Dik #:

Выделенное красным не имеет никакого отношения к пути откуда запущена программа. Имя ресурса канвас никак не связано с именем пути запущенной программы. 

Это баг, запусти пожалуйста код, Артем, если хочешь убедиться, мне не хочется спорить

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

 

существует (унаследованное?) ограничение на длину строк в input и OBJ_EDIT - ограничения длины пути ресурса видимо из той-же оперы.

Вряд-ли системное - Виндовс давно избавился от мизерных лимитов

и столь-же вряд-ли будет исправлено, видимо сильно закопано и поперевязано, если бы было несложно  то и input/EDIT исправились бы уже лет 5-ть назад. 

а просто не делайте длинных имён ;-) сериализуйте, считайте хеши, сокращайте..

 
Artyom Trishkin #:

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

Спасибо за желание помочь)) но, без разработчиков это не лечится, к сожалению.

 
Maxim Kuznetsov #:

существует (унаследованное?) ограничение на длину строк в input и OBJ_EDIT - ограничения длины пути ресурса видимо из той-же оперы.

Вряд-ли системное - Виндовс давно избавился от мизерных лимитов

и столь-же вряд-ли будет исправлено, видимо сильно закопано и поперевязано, если бы было несложно  то и input/EDIT исправились бы уже лет 5-ть назад. 

а просто не делайте длинных имён

;-) сериализуйте, считайте хеши, сокращайте..

речь не об ИМЕНИ объекта, а о длине пути к папке откуда запущена программа. в имени объекта всё пучком, даже односимвольное имя объекта не поможет.

ещё раз напомню, весь остальной код MQL5 продолжает работать без проблем, и объект успешно создаётся. и рисование на этом объекте не вызывает проблем. но ничего на нём не отображается.

и Вы, похоже, не запускали код. и, возможно, даже не смотрели. вот он:

#include <Canvas\Canvas.mqh>

int WidthMonitor = 640;  //monitor screen width
int HeighMonitor = 480;  //monitor screen height

CCanvas Canvas;

void OnStart ()
{
  ResetLastError ();

  string canvasName = "TestConvasLongPath";
  if (!Canvas.CreateBitmapLabel (canvasName, 5, 35, WidthMonitor, HeighMonitor, COLOR_FORMAT_ARGB_RAW))
  {
    Print ("Error creating Canvas: ", GetLastError ());
    return;
  }

  ObjectSetInteger (0, canvasName, OBJPROP_HIDDEN, false);
  ObjectSetInteger (0, canvasName, OBJPROP_SELECTABLE, true);

  Canvas.Erase         (COLOR2RGB (clrBlack));
  Canvas.FillRectangle (3, 3,  WidthMonitor - 4, HeighMonitor - 4, COLOR2RGB (clrWhite));

  Canvas.Update ();
  Print (GetLastError ());

  return;
}
какая тут может быть проблема с Именем объекта?
 
Есть bmp-ресурс, размеры которого совпадают с размером экрана. Как в терминале его показать на весь экран?
 
fxsaber #:
Есть bmp-ресурс, размеры которого совпадают с размером экрана. Как в терминале его показать на весь экран?
Пока только в пределах окна, которое можно открепить от терминала, и развернуть на весь экран, но от рамки окна с панелью инструментов не освободиться.
ЗЫ Да, было бы очень правильно и круто добавить возможность разворачивать окно на весь экран без рамок. Тем более это не сложно на C++ реализовать. Это стало бы совершенно новым качественным уровнем в разработке интерфейса. 
Вроде уже давно просил, но был получен отказ.
 
Nikolai Semko #:
Пока только в пределах окна, которое можно открепить от терминала, и развернуть на весь экран, но от рамки окна с панелью инструментов не освободиться.

Максимум, что сумел выжать.

#define CHART_TOOLBAR_HEIGHT 31
#define CHART_HEADER_HEIGHT 35
#define CHART_BORDER_SIZE 12
#define CHART_MAX_EXCESS 20

// Устанавливает чарт в максимальный размер - возвращает Width X Height.
bool ChartFullScreen( int &Width, int &Height, const ulong Chart = 0, const bool IsToolBar = true )
{
  const int X0 = -CHART_BORDER_SIZE;
  const int Y0 = -CHART_HEADER_HEIGHT - IsToolBar * CHART_TOOLBAR_HEIGHT;
  
  const int X1 = TerminalInfoInteger(TERMINAL_SCREEN_WIDTH) + X0 + CHART_MAX_EXCESS;
  const int Y1 = TerminalInfoInteger(TERMINAL_SCREEN_HEIGHT) + Y0 + CHART_MAX_EXCESS;

  Width = X1 - CHART_BORDER_SIZE;
  Height = Y1 - CHART_BORDER_SIZE;

  return(ChartSetInteger(Chart, CHART_SHOW, false) &&
         ChartSetInteger(Chart, CHART_IS_DOCKED, false) &&
         ChartSetInteger(Chart, CHART_FLOAT_LEFT, X0) &&
         ChartSetInteger(Chart, CHART_FLOAT_TOP, Y0) &&
         ChartSetInteger(Chart, CHART_FLOAT_RIGHT, X1) &&
         ChartSetInteger(Chart, CHART_FLOAT_BOTTOM, Y1));
}


Использование на примере выше.

#include <Canvas\Canvas.mqh>

CCanvas Canvas;

void OnInit()
{  
  int WidthMonitor;
  int HeighMonitor;
  
  ChartFullScreen(WidthMonitor, HeighMonitor);
  
  string canvasName = "TestConvasLongPath";
  if (!Canvas.CreateBitmapLabel (canvasName, 0, 0, WidthMonitor, HeighMonitor, COLOR_FORMAT_ARGB_RAW))
  {
    Print ("Error creating Canvas: ", GetLastError ());
    return;
  }

  ObjectSetInteger (0, canvasName, OBJPROP_HIDDEN, false);

  Canvas.Erase     (COLOR2RGB (clrBlack));
  Canvas.Rectangle (0, 0,  WidthMonitor - 1, HeighMonitor - 1, COLOR2RGB (clrRed));

  Canvas.Update ();  
}

Определить наличие ToolBar не смог.


ЗЫ При размере экрана 1920x1200 получается выводить полностью картинку 1916x1173 (ToolBar отключен).

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