¿Qué es toda esta tontería del carácter de tabulación{t}? - página 5

 

Intenté hacer una tabla con etiquetas en una fuente monospace como se sugiere aquí - no es una vista agradable para el ojo. Especialmente los números fraccionarios están manchados horizontalmente de tal manera que es muy difícil de ver. Así que nos queda la opción de las etiquetas en un tipo de letra normal, con una etiqueta distinta para cada celda. Eso implicaría bastantes objetos, como ya he escrito antes.

Jartmailru, ¿sabes si es realista crear una ventana de salida directamente en el código del EA, sin usar una DLL? Todas las funciones de WinApi están disponibles. La única pega puede ser sólo cuando se pasa una estructura que contiene tanto variables como punteros al mismo tiempo.

 

etiquetas en el mono-ancho

 
no se deje engañar - utilice un componente estándar : https://www.mql5.com/ru/code/8724
 
xrust:

las etiquetas en la monocinta.


¿En una monocinta, quieres decir?

Es bonito, pero no tiene tablas con muchos números largos seguidos, así que es bastante fácil de leer.

 
Meat:


¿En un mono-ancho quieres decir?

Es bonito, pero no tiene tablas con muchos números largos seguidos, así que es bastante fácil de leer.

Tal vez, no lo sé, nunca me he propuesto esa tarea. Teniendo el terminal como una herramienta bastante buena para mostrar varios tipos de información gráfica en forma de gráficos y tablas, para construir y analizar una gran cantidad de información textual en él? - Por qué cuando tienes Excel para eso... Aunque por supuesto esta es mi humilde opinión :)
 
jartmailru:
Por otro lado, me pregunto si no se ha encontrado ya con
que el primer 30% de las entradas suele faltar en el registro, y que las entradas se pierden selectivamente después.
Los registros tienen todas las líneas, es el terminal el que las muestra selectivamente. Si abres los propios archivos, están todos ahí.
 
MetaDriver:

// ¿Se puede hacer una DLL para Unicode? Se lo agradeceré sinceramente.

Aquí tienes. Se han añadido las funciones LogW, SelectW, pero no se han probado - cualquier problema, por favor, póngase en contacto.
Si va a hacer la carpeta para la 5ª, por favor envíemela :-).
.
Lacarne:

Jartmailru, ¿sabes si es realista crear una ventana de salida directamente en el código del EA, sin recurrir a una DLL? Todas las funciones de WinApi están disponibles. El único problema puede ser cuando se pasa una estructura que contiene tanto variables como punteros.

Si has hecho algo retorcido, tal vez sea posible. No me retuerzo :-).
Una ventana junto a una MT en C++ requiere un hilo de interfaz separado.
Si se trata de una sola ventana, es trivial.
.
Por cierto... no es un hecho que las fichas... ...podrás alinear
el contenido de las columnas en el grado adecuado.
.
PapaYozh:
Los registros tienen todas las líneas, es el terminal el que las muestra selectivamente. Si abres los propios archivos, están todos ahí.
No me importa :-). Pero: tengo todo desplegado + he hecho un gráfico-
log (el punto del gráfico se busca en el log - se muestra el lugar correcto).
.
Archivos adjuntos:
out.zip  123 kb
 

Bueno, ¡he hecho una ficha para las fuentes anchas! :) ¡Sí! :) Por supuesto, tuve que hacer un montón de problemas con las funciones WinAPI, pero valió la pena. Es útil no sólo para Comment, sino también para Label. La idea es que obtengamos el tamaño de cualquier cadena en cualquier fuente en píxeles. Y luego puedes tabularlos como quieras, a la izquierda, a la derecha o al centro. Para Comment, la tabulación se hace naturalmente con espacios, por lo que el resultado no es perfecto, el error está dentro de 1-2 píxeles, pero no es nada en principio. Para las etiquetas, todo es mucho más sencillo.

Este es un ejemplo que muestra las pestañas en Comment. Aquí se especifica Tahoma,8, ya que los comentarios se imprimen en esa fuente.

#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);
}

 
Eres muy vago :-)
 
Meat:

Aquí hay un ejemplo que muestra la tabulación en Comment. El tipo de letra establecido aquí es Tahoma,8, ya que los comentarios se imprimen en este tipo de letra.


+ salida rehecha de cualquier texto, no sólo de una matriz de líneas

+ lo hizo como una función separada CommentTab

+ se ha añadido una matriz de valores TabStop y un tamaño de Tab por defecto (como en la función GDI)

Ejemplo de texto y 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); // вызвали преобразование и вывод по табуляции
}