Попробовал я сделать таблицу с помощью лэйблов в моношрифте как тут предлагали - зрелище малоприятное глазу. Особенно дробные числа размазываются по горизонтали так, что очень трудно для восприятия. Так что остаётся только вариант с лэйблами в нормальном шрифте, под каждую ячейку отдельный лэйбл. При этом задействовуется довольно большое количество объектов, как я и писал ранее.
Jartmailru, а не знаешь, реально создать окно для вывода прямо в коде советника, не прибегая к ДЛЛ? Вроде все функции WinApi доступны. Единственная загвоздка может быть только при передачи структуры, содержащей одновременно и переменные, и указатели.
Так то оно конечно красиво, но у тя там нет таблиц с большим количеством длинных чисел в ряду, поэтому всё довольно легко читается.
Возможно, не знаю, никогда себе такой задачи не ставил. Имея терминал как довольно неплохой инструмент вывода различного рода графической информации в виде графиков и диаграмм, строить и анализировать в нем большое количество текстовой информации ? - зачем когда для этого есть Эксель ... Хотя конечно это лично мое скромное мнение :)
jartmailru: С другой стороны, я удивлюсь, если вы еще не столкнулись с тем, что в логе обычно нет первых 30% записей, а в последствии записи выборочно теряются.
В логах есть все строки, это терминал их отображает выборочно. Если открывать сами файлы, то в них всё есть.
// А може сделаешь для юникода вариант DLL ? Буду искренне признателен.
Держи. Добавил функции LogW, SelectW, но не тестировал- будут проблемы обращайся. Если для 5-ого сделаешь обвязку- присылай :-). .
Meat:
Jartmailru, а не знаешь, реально создать окно для вывода прямо в коде советника, не прибегая к ДЛЛ? Вроде все функции WinApi доступны. Единственная загвоздка может быть только при передачи структуры, содержащей одновременно и переменные, и указатели.
Если как-то извратиться-то может быть и можно. Не извращаюсь :-). Окно рядом с МТ на С++ требует отдельный интерфейсный поток. Если одно окно- это тривиально. . Кстати... а ведь не факт, что табуляциями... можно будет выровнять содержимое колонок в нужной степени. .
PapaYozh: В логах есть все строки, это терминал их отображает выборочно. Если открывать сами файлы, то в них всё есть.
Не возражаю :-). Но: у меня отображается всё + у меня сделано сопоставление график- лог (точка с графика ищется в логе- показывается нужное место). .
Ну что ж, я сделал таки табуляцию для разноширинных шрифтов! :) Ура! :) Пришлось конечно поизвращаться с функциями WinAPI, но это того стоило. Это пригодится не только для Comment, но и для Label будет очень полезно. Суть в том, что мы получаем размер любого стринга в любом шрифте в пикселях. Ну и затем их уже можно табулировать как угодно, хоть влево, хоть вправо, хоть по центру. Для Comment табуляция естественно идёт с помощью пробелов, поэтому результат не идеальный, погрешность в пределах 1-2 пикселя, но это мелочь в принципе. Для лэйблов всё значительно проще.
Вот пример, демонстрирующий табуляцию в Comment. Тут задан шрифт Tahoma,8, т.к. комменты выводятся именно этим шрифтом.
#import "Gdi32.dll"int CreateFontA(int nHeight,int nWidth,int nEscapement,int nOrientation,int fnWeight,int fdwItalic,int fdwUnderline,
int fdwStrikeOut,int fdwCharSet,int fdwOutputPrecision,int fdwClipPrecision,int fdwQuality,
int fdwPitchAndFamily,string lpszFace);
int SelectObject(int hdc,int hgdiobj);
bool DeleteObject(int hObject);
int GetDeviceCaps(int hdc,int nIndex);
bool GetTextExtentPoint32A(int hdc,string lpString,int cbString,int lpSize[]);
#import "user32.dll"int GetDC(int hWnd);
int ReleaseDC(int hWnd,int hDC);
//+------------------------------------------------------------------+int start()
{
#define DEFAULT_CHARSET 1#define OUT_DEFAULT_PRECIS 0#define CLIP_DEFAULT_PRECIS 0#define DEFAULT_QUALITY 0#define DEFAULT_PITCH 0#define FF_MODERN 48int hWnd=WindowHandle(Symbol(),Period());
int DC=GetDC(hWnd);
int dpi=GetDeviceCaps(DC,88); //88=LOGPIXELSXstring Font="Tahoma";
int fontsize=8;
int fontheight=MathRound(fontsize*dpi/72.0);
int hFont=CreateFontA(fontheight,0,0,0,0,0,0,0,DEFAULT_CHARSET,OUT_DEFAULT_PRECIS,CLIP_DEFAULT_PRECIS,DEFAULT_QUALITY,DEFAULT_PITCH|FF_MODERN,Font);
SelectObject(DC,hFont);
string StringArray[]={"Один","Два","Три","Четыре","Пять","Шесть","Семь","Восемь","Девять","Десять","Одиннадцать","Двенадцать"};
int arraysize=ArraySize(StringArray);
int tabpixels=100; // размер табуляции в пикселяхint size[2];
GetTextExtentPoint32A(DC," ",1,size); // получаем размер пробелаint spacesize=size[0];
if (spacesize==0) { Alert("spacesize=0"); return(0); }
string text="\n";
int rowsize=0;
int alignmode=0; // 0- по левому краю, 1- по правому краюfor (int i=0; i<arraysize; i++)
{
int column=i%4;
string str=StringArray[i];
GetTextExtentPoint32A(DC,str,StringLen(str),size); // получаем размер строкиint spacecount=MathRound((tabpixels*(column+1)-size[0]-rowsize)*1.0/spacesize);
for (int s=0; s<spacecount; s++)
if (alignmode==0)
str=str+" ";
else
str=" "+str;
rowsize+=size[0]+spacesize*spacecount;
text=text+str;
if (column==3 || i==arraysize-1)
{
text=text+"\n";
rowsize=0;
if (i<arraysize-1) continue;
if (alignmode==1) break;
alignmode++;
text=text+"\n\n";
i=-1;
}
}
Comment(text);
ReleaseDC(hWnd,DC);
DeleteObject(hFont);
return(0);
}
Для авторизации и пользования сайтом MQL5.com необходимо разрешить использование файлов Сookie.
Пожалуйста, включите в вашем браузере данную настройку, иначе вы не сможете авторизоваться.
Вы вошли в аккаунт. Двухфакторная аутентификация отключена. Настройте её заново и отсканируйте новый QR-код или продолжите с отключённой двухфакторной аутентификацией.
Попробовал я сделать таблицу с помощью лэйблов в моношрифте как тут предлагали - зрелище малоприятное глазу. Особенно дробные числа размазываются по горизонтали так, что очень трудно для восприятия. Так что остаётся только вариант с лэйблами в нормальном шрифте, под каждую ячейку отдельный лэйбл. При этом задействовуется довольно большое количество объектов, как я и писал ранее.
Jartmailru, а не знаешь, реально создать окно для вывода прямо в коде советника, не прибегая к ДЛЛ? Вроде все функции WinApi доступны. Единственная загвоздка может быть только при передачи структуры, содержащей одновременно и переменные, и указатели.
лейбы в моноширинке
лейбы в моношинке
В моноширинке ты хотел сказать?
Так то оно конечно красиво, но у тя там нет таблиц с большим количеством длинных чисел в ряду, поэтому всё довольно легко читается.
В моноширинке ты хотел сказать?
Так то оно конечно красиво, но у тя там нет таблиц с большим количеством длинных чисел в ряду, поэтому всё довольно легко читается.
С другой стороны, я удивлюсь, если вы еще не столкнулись с тем,
что в логе обычно нет первых 30% записей, а в последствии записи выборочно теряются.
// А може сделаешь для юникода вариант DLL ? Буду искренне признателен.
Если для 5-ого сделаешь обвязку- присылай :-).
.
Jartmailru, а не знаешь, реально создать окно для вывода прямо в коде советника, не прибегая к ДЛЛ? Вроде все функции WinApi доступны. Единственная загвоздка может быть только при передачи структуры, содержащей одновременно и переменные, и указатели.
Окно рядом с МТ на С++ требует отдельный интерфейсный поток.
Если одно окно- это тривиально.
.
Кстати... а ведь не факт, что табуляциями... можно будет выровнять
содержимое колонок в нужной степени.
.
В логах есть все строки, это терминал их отображает выборочно. Если открывать сами файлы, то в них всё есть.
лог (точка с графика ищется в логе- показывается нужное место).
.
Ну что ж, я сделал таки табуляцию для разноширинных шрифтов! :) Ура! :) Пришлось конечно поизвращаться с функциями WinAPI, но это того стоило. Это пригодится не только для Comment, но и для Label будет очень полезно. Суть в том, что мы получаем размер любого стринга в любом шрифте в пикселях. Ну и затем их уже можно табулировать как угодно, хоть влево, хоть вправо, хоть по центру. Для Comment табуляция естественно идёт с помощью пробелов, поэтому результат не идеальный, погрешность в пределах 1-2 пикселя, но это мелочь в принципе. Для лэйблов всё значительно проще.
Вот пример, демонстрирующий табуляцию в Comment. Тут задан шрифт Tahoma,8, т.к. комменты выводятся именно этим шрифтом.
Вот пример, демонстрирующий табуляцию в Comment. Тут задан шрифт Tahoma,8, т.к. комменты выводятся именно этим шрифтом.
+ переделал вывод любого текста а не только массива строк
+ сделал в виде отдельной функции CommentTab
+ добавил массив значений TabStop и размер Tab по умолчанию (как в GDI функции)
пример текста и результата