Que disparate é esse sobre o caráter de tabulação? - página 5

 

Eu tentei fazer uma mesa com etiquetas em fonte mono como sugerido aqui - não é uma visão agradável. Especialmente os números fracionários são manchados horizontalmente de tal forma que é difícil de ver. Assim, ficamos com a opção de etiquetas em uma fonte regular, com uma etiqueta separada para cada célula. Isso envolveria alguns poucos objetos, como já escrevi antes.

Jartmailru, você sabe se é realista criar uma janela de saída diretamente no código EA, sem usar uma DLL? Todas as funções do WinApi estão disponíveis. A única dificuldade pode ser apenas ao passar uma estrutura contendo ambas as variáveis e ponteiros ao mesmo tempo.

 

rótulos em todo o mono

 
não se deixe enganar - use um componente pronto para uso : https://www.mql5.com/ru/code/8724
 
xrust:

as etiquetas na mono-china.


Em uma mono-china, você quer dizer?

É legal, mas você não tem mesas com muitos números longos seguidos, por isso é muito fácil de ler.

 
Meat:


Em um mono-wide você quer dizer?

É legal, mas você não tem mesas com muitos números longos seguidos, por isso é muito fácil de ler.

Talvez, eu não sei, eu nunca me tenha proposto tal tarefa. Ter o terminal como uma ferramenta bastante boa para exibir vários tipos de informações gráficas na forma de gráficos e gráficos, para construir e analisar uma grande quantidade de informações textuais nele contidas? - Por que quando você tem Excel para isso ... Embora, é claro, esta seja minha humilde opinião :)
 
jartmailru:
Por outro lado, eu me pergunto se você ainda não encontrou
que os primeiros 30% das entradas geralmente estão faltando no registro, e que as entradas são seletivamente perdidas depois.
Os logs têm todas as linhas, é o terminal que os exibe seletivamente. Se você mesmo abrir os arquivos, todos eles estarão lá.
 
MetaDriver:

// Você pode fazer uma DLL para Unicode? Serei sinceramente grato.

Aqui está. Funções adicionadas LogW, SelectW, mas não testou - qualquer problema, favor contatar.
Se você fizer fichário para o 5º, por favor, envie-o para mim :-).
.
Carne:

Jartmailru, você sabe se é realista criar uma janela de saída diretamente no código EA sem usar uma DLL? Todas as funções do WinApi estão disponíveis. O único engate pode ser somente ao passar uma estrutura contendo tanto variáveis como ponteiros.

Se você fez algo retorcido, talvez seja possível. Eu não torço :-).
Uma janela ao lado de um MT em C++ requer uma linha de interface separada.
Se for uma janela única, é trivial.
.
A propósito... não é um fato que as abas... ...você será capaz de alinhar
o conteúdo das colunas na medida certa.
.
PapaYozh:
Os logs têm todas as linhas, é o terminal que os mostra de forma seletiva. Se você mesmo abrir os arquivos, todos eles estarão lá.
Eu não me importo :-). Mas: Tenho tudo exposto + fiz um gráfico...
log (o ponto do gráfico é pesquisado no log - o lugar certo é mostrado).
.
Arquivos anexados:
out.zip  123 kb
 

Bem, eu fiz uma aba para fontes com vários espaçamentos! :) Viva! :) É claro que tive que criar muitos problemas com as funções do WinAPI, mas valeu a pena. É útil não apenas para Comentar, mas também para Rótulo. A idéia é que obtemos o tamanho de qualquer corda em qualquer fonte em pixels. E então você pode tabulá-los como quiser, seja à esquerda, à direita ou ao centro. Para Comentar, a tabulação é naturalmente feita com espaços, portanto o resultado não é perfeito, o erro está dentro de 1-2 pixels, mas não é nada em princípio. Para as etiquetas, tudo é muito mais simples.

Aqui está um exemplo mostrando as abas em Comentário. Tahoma,8 é especificado aqui, uma vez que os comentários são produzidos nessa fonte.

#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 48
  int hWnd=WindowHandle(Symbol(),Period());
  int DC=GetDC(hWnd);
  int dpi=GetDeviceCaps(DC,88);  //88=LOGPIXELSX
  string 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);
}

 
Você é preguiçoso como o inferno :-)
 
Meat:

Aqui está um exemplo mostrando tabulação em Comentário. A fonte aqui é Tahoma,8, já que os comentários são produzidos nesta fonte.


+ remontou a saída de qualquer texto, não apenas um conjunto de linhas

+ o fez como uma função separada ComentárioTab

+ adicionou uma matriz de valores TabStop e um tamanho de Tab padrão (como na função GDI)

Exemplo de texto e resultado

//------------------------------------------------------------------    start
int start()
{
  string txt="\n";
  txt=txt+"Ticket\tOpen Time\tType\tSize\tItem\tPrice\tS / L\tT / P\tClose Time\tPrice\tCommission\tTaxes\tSwap\tProfit"+"\n";
  txt=txt+"524567\t28.06.2011 15:02\tbuy\t0.35\teurusd.vpe\t1.43380\t1.43390\t0.00000\t29.06.2011 2:39\t1.43383\t-3.50\t0.00\t0.56\t0.73"+"\n";
  txt=txt+"523492\t28.06.2011 15:02\tbuy\t0.70\teurusd.vpe\t1.43397\t1.43407\t1.47115\t28.06.2011 18:17\t1.43407\t-7.00\t0.00\t0.00\t4.88"+"\n";
  txt=txt+"523494\t28.06.2011 15:02\tbuy\t0.70\teurusd.vpe\t1.43397\t1.43407\t0.00000\t28.06.2011 18:17\t1.43407\t-7.00\t0.00\t0.00\t4.88"+"\n";
  txt=txt+"523498\t28.06.2011 15:02\tbuy\t0.35\teurusd.vpe\t1.43380\t1.43390\t0.00000\t28.06.2011 17:00\t1.43675\t-3.50\t0.00\t0.00\t71.86"+"\n";
  txt=txt+"522650\t27.06.2011 14:50\tbuy\t0.80\teurusd.vpe\t1.42240\t1.42371\t1.43687\t28.06.2011 15:19\t1.43693\t-8.00\t0.00\t1.28\t808.95"+"\n";
  
  int tab[]={10, 22, 10, 10, 15, 12, 12, 12, 22, 12, 20, 10, 10}; // размеры в пробелах
       
  CommentTab(txt, tab, 30); // вызвали преобразование и вывод по табуляции
}


Razão: