Cosa sono tutte queste sciocchezze sul carattere tab? - pagina 5

 

Ho provato a fare una tabella con etichette in un font monospaziale, come suggerito qui - non è piacevole all'occhio. Soprattutto i numeri frazionari sono spalmati orizzontalmente in modo tale che è molto difficile da vedere. Quindi ci rimane l'opzione delle etichette in un carattere regolare, con un'etichetta separata per ogni cella. Questo comporterebbe un bel po' di oggetti, come ho scritto prima.

Jartmailru, sai se è realistico creare una finestra di output direttamente nel codice EA, senza usare una DLL? Tutte le funzioni WinApi sono disponibili. L'unico intoppo può essere solo quando si passa una struttura contenente variabili e puntatori allo stesso tempo.

 

etichette nel mono-largo

 
non fatevi ingannare - usate un componente standard: https: //www.mql5.com/ru/code/8724
 
xrust:

le etichette nel monocinema.


In una mono-cina, vuoi dire?

È bello, ma non si hanno tabelle con molti numeri lunghi in fila, quindi è abbastanza facile da leggere.

 
Meat:


In un mono-largo vuoi dire?

È bello, ma non si hanno tabelle con molti numeri lunghi in fila, quindi è abbastanza facile da leggere.

Forse, non so, non mi sono mai posto un compito del genere. Avere il terminale come uno strumento abbastanza buono per visualizzare vari tipi di informazioni grafiche sotto forma di grafici e tabelle, per costruire e analizzare una grande quantità di informazioni testuali in esso? - Perché quando hai Excel per quello... Anche se naturalmente questa è la mia umile opinione :)
 
jartmailru:
D'altra parte, mi chiedo se non avete già incontrato
che il primo 30% delle voci di solito manca dal registro e che le voci sono selettivamente perse in seguito.
I log hanno tutte le linee, è il terminale che le visualizza selettivamente. Se si aprono i file stessi, sono tutti lì.
 
MetaDriver:

// Puoi fare una DLL per Unicode? Ve ne sarò sinceramente grato.

Ecco a voi. Aggiunte le funzioni LogW, SelectW, ma non testate - eventuali problemi sono da contattare.
Se farai il raccoglitore per il 5°, per favore mandamelo :-).
.
Carne:

Jartmailru, sai se è realistico creare una finestra di output direttamente nel codice EA senza usare una DLL? Tutte le funzioni WinApi sono disponibili. L'unico intoppo può essere solo quando si passa una struttura contenente sia variabili che puntatori.

Se hai fatto qualcosa di contorto, forse è possibile. Non mi contorco :-).
Una finestra accanto a un MT in C++ richiede un thread di interfaccia separato.
Se si tratta di una sola finestra, è banale.
.
A proposito... non è un fatto che le schede... ...sarete in grado di allineare
il contenuto delle colonne al giusto grado.
.
PapaYozh:
I log hanno tutte le linee, è il terminale che le mostra selettivamente. Se si aprono i file stessi, sono tutti lì.
Non mi dispiace :-). Ma: ho visualizzato tutto + ho fatto un grafico.
log (il punto del grafico viene cercato nel log - viene mostrato il posto giusto).
.
File:
out.zip  123 kb
 

Bene, ho fatto una scheda per i font multi-spazio! :) Evviva! :) Certo, ho dovuto fare un sacco di fatica con le funzioni WinAPI, ma ne è valsa la pena. È utile non solo per Comment, ma anche per Label. L'idea è quella di ottenere la dimensione di qualsiasi stringa in qualsiasi carattere in pixel. E poi puoi tabularli come vuoi, a sinistra, a destra o al centro. Per Comment, la tabulazione è naturalmente fatta con spazi, quindi il risultato non è perfetto, l'errore è entro 1-2 pixel, ma non è niente in linea di principio. Per le etichette, tutto è molto più semplice.

Ecco un esempio che mostra le schede in Comment. Tahoma,8 è specificato qui, poiché i commenti sono emessi in quel carattere.

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

 
Sei pigro come l'inferno :-)
 
Meat:

Ecco un esempio che mostra il tabbing in Comment. Il font impostato qui è Tahoma,8, dato che i commenti sono emessi in questo font.


+ output rifatto di qualsiasi testo, non solo un array di linee

+ fatto come una funzione separata CommentTab

+ aggiunto un array di valori TabStop e una dimensione predefinita di Tab (come nella funzione GDI)

Esempio di testo e risultato

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