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

 
Alexey Viktorov:

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

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

 
aleger:

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

Это называется не блокировка, а удаление счёта или совсем, как я на себе испытал, или в архив. Из архива деньги можно вернуть, а если удалили, то уже с концами...

 
Alexey Viktorov:

Это называется не блокировка, а удаление счёта или совсем, как я на себе испытал, или в архив. Из архива деньги можно вернуть, а если удалили, то уже с концами...

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

 
спасибо, всем.
 

Без указания флага общей папки все работает, с указанием флага общей папки кроме имен больше ничего не получить.

Это ограничение или какой то баг ?

   file_name = "";
   long search_handle2 = FileFindFirst(InpFilter, file_name, FILE_COMMON);
   if(search_handle2 != INVALID_HANDLE)
     {
      do
        {
         ResetLastError();
         ArrayResize(share, z + 1, 1000);

         share[z].file_name   = file_name;
         share[z].delay       = NON;
         share[z].compare     = false;
         share[z].file_modify = (datetime)FileGetInteger(share[z].file_name, FILE_MODIFY_DATE, FILE_COMMON);
         share[z].file_size   =  FileGetInteger(share[z].file_name, FILE_SIZE, FILE_COMMON);

         Print("   2    " + share[z].file_name + "   " + share[z].file_modify);
         z++;
         FileIsExist(file_name, FILE_COMMON);
        }
      while(FileFindNext(search_handle2, file_name));
      FileFindClose(search_handle2);
     }
[Удален]  

В МТ4, во время отладки индикаторов, отладчик намертво повисает если переключиться на график.

Воспроизводится, например, во время запуска отладки стандартного индикатора CCI.

1. Поставить точку останова;

2. Нажать F5;

3. Переключиться на график.

Результат - график отладчика зависает.

Также можно просто несколько раз нажать F5 во время отладки - график повисает.

Билд 1260.

Настройки отладчика:


 
Комментарии, не относящиеся к этой теме, были перенесены в "Вопросы от начинающих MQL4 MT4 MetaTrader 4".
 
Очень редко работаю с графическими объектами, возникла необходимость закрасить фон для OBJ_LABLE (установить OBJPROP_BGCOLOR) .
Как оказалось, установка цвета фона невозможна для  объекта типа OBJ_LABLE, необходимо использовать OBJ_EDIT.
При использовании  OBJ_EDIT возникла новая проблема - необходимость установить размер OBJPROP_XSIZE и OBJPROP_YSIZE, чтобы в соответствующие размеры объекта помещался весь текст.

Вопрос: как определить размер  OBJPROP_XSIZE и OBJPROP_YSIZE, что бы туда поместился весь текст?
Рассмотрел два варианта:
1. Создание объекта OBJ_LABLE, считывание размеров, удаление объекта OBJ_LABLE.
Не подходит из-за того, что считывание размеров возможно только после фактического создания объекта и не возможно, когда объект находится в очереди на ChartRedraw.

2. Использование TextSetFont с последующим TextGetSize.
Не подходит, так как результат кардинально отличается от результатов метода №1, отличия в 2.5 - 2.9 раз в зависимости от размера шрифта.
Возможно причина в 4К мониторе и 175% DPI.

#define PRINT(x) ; Print(#x, ":", string(x))
          
void SetLabel(long achart, string name, int wnd, string text, color clr, int x, int y, int corn=0, int fontsize=8, string font="Tahoma")
{
   ObjectCreate(achart, name, OBJ_LABEL, wnd, 0, 0); 
   ObjectSetInteger(achart, name, OBJPROP_CORNER, corn); 
   ObjectSetString(achart, name, OBJPROP_TEXT, text); ObjectSetInteger(achart, name, OBJPROP_COLOR, clr); 
   ObjectSetInteger(achart, name, OBJPROP_FONTSIZE, fontsize); ObjectSetString(achart, name, OBJPROP_FONT, font);
   ObjectSetInteger(achart, name, OBJPROP_SELECTABLE, false); 
   ObjectSetInteger(achart, name, OBJPROP_BORDER_TYPE, 0);
   ObjectSetInteger(achart, name, OBJPROP_XDISTANCE, x); ObjectSetInteger(achart, name, OBJPROP_YDISTANCE, y);
}

void OnStart(){     
   string obj_name = "test_obj";   
   string text = "AAAA::BBBB";
   int font_size = 7;
   string font_name = "Tahoma";
   
   SetLabel(0, obj_name, 0, text, clrWhite, 100, 100, 0, font_size, font_name);
   ChartRedraw(0);
   Sleep(1000);
   
   uint dx_fixed_0 = int(ObjectGetInteger(0, obj_name, OBJPROP_XSIZE));
   uint dy_fixed_0 = int(ObjectGetInteger(0, obj_name, OBJPROP_YSIZE));
   ObjectDelete(0, obj_name);
   
   PRINT(dx_fixed_0);
   PRINT(dy_fixed_0);
   
   
   uint dx_fixed_1;
   uint dy_fixed_1;
   TextSetFont(font_name, -10 * font_size);
   TextGetSize(text, dx_fixed_1, dy_fixed_1);
   
   PRINT(1.0 * dx_fixed_0 / dx_fixed_1);  	// Result: 1.0
   PRINT(1.0 * dy_fixed_0 / dy_fixed_1);  	// Result: 1.0
}  


Спасибо Geess за решение.
Необходимо домножить на -10 размер шрафта при передаче в TextSetFont.

[Удален]  
Sergey Dzyublik:
Очень редко работаю с графическими объектами, возникла необходимость закрасить фон для OBJ_LABLE (установить OBJPROP_BGCOLOR) .
Как оказалось, установка цвета фона невозможна для  объекта типа OBJ_LABLE, необходимо использовать OBJ_EDIT.
При использовании  OBJ_EDIT возникла новая проблема - необходимость установить размер OBJPROP_XSIZE и OBJPROP_YSIZE, чтобы в соответствующие размеры объекта помещался весь текст.

Вопрос: как определить размер  OBJPROP_XSIZE и OBJPROP_YSIZE, что бы туда поместился весь текст?
Рассмотрел два варианта:
1. Создание объекта OBJ_LABLE, считывание размеров, удаление объекта OBJ_LABLE.
Не подходит из-за того, что считывание размеров возможно только после фактического создания объекта и не возможно, когда объект находится в очереди на ChartRedraw.

2. Использование TextSetFont с последующим TextGetSize.
Не подходит, так как результат кардинально отличается от результатов метода №1, отличия в 2.5 - 2.9 раз в зависимости от размера шрифта.
Возможно причина в 4К мониторе и 175% DPI.

Во-первых, размер текста и размер объекта - это не одно и тоже. Как минимум должен существовать бордюр. И поэтому эти значения не могут совпадать.
Во-вторых, лучше использовать OBJ_BITMAP_LABEL, у которого нет никаких ограничений.
А если уж его использовать, то лучше тогда воспользоваться классом CCanvas.

#include <Canvas\Canvas.mqh>
          
void SetLabel(CCanvas &c, long achart, string name, int wnd, string text, color clr_text, color clr_bckgrnd, int x, int y, int corn=0, int fontsize=8, int border=2, string font="Tahoma", uchar transparency=0xFF)
{
   uint w,h;
   c.FontSet(font, fontsize);
   c.TextSize(text, w, h);
   if(!c.CreateBitmapLabel(achart,wnd,name,x,y,w+border*2,h+border*2,COLOR_FORMAT_ARGB_NORMALIZE))
      Print("Error creating canvas object: ", GetLastError());
   c.Erase(ColorToARGB(clr_bckgrnd,transparency));
   c.TextOut(border,border,text,ColorToARGB(clr_text,transparency));
   c.Update();
}

void OnStart(){     
   string obj_name = "test_obj";   
   string text = "AAAA::BBBB";
   int font_size = 17;
   string font_name = "Tahoma";
   CCanvas Can;
   SetLabel(Can,0, obj_name, 0, text, clrYellow, clrBlue, 100, 100, 0, font_size,3, font_name, 0x80);
   Sleep(10000);
   Can.Destroy();
}  

В результате получаем тот же  объект, только с большими возможностями. Например, добавив прозрачность текстовой метки.