Qu'est-ce que c'est que cette absurdité sur le caractère de l'onglet ? - page 5

 

J'ai essayé de créer un tableau avec des étiquettes en police mono comme suggéré ici - ce n'est pas très agréable. En particulier, les nombres fractionnaires sont étalés horizontalement de telle manière qu'il est difficile de les voir. Il nous reste donc l'option des étiquettes dans une police normale, avec une étiquette distincte pour chaque cellule. Cela impliquerait un certain nombre d'objets, comme je l'ai déjà écrit.

Jartmailru, savez-vous s'il est réaliste de créer une fenêtre de sortie directement dans le code EA, sans utiliser une DLL ? Toutes les fonctions de WinApi sont disponibles. Le seul hic est peut-être de passer une structure contenant à la fois des variables et des pointeurs.

 

les étiquettes dans le monolabel

 
ne vous laissez pas berner - utilisez un composant standard : https://www.mql5.com/ru/code/8724
 
xrust:

les étiquettes dans le monochine.


Dans un monochine, vous voulez dire ?

C'est joli, mais vous n'avez pas de tableaux avec beaucoup de longs chiffres alignés, donc c'est assez facile à lire.

 
Meat:


Dans un mono-alternance vous voulez dire ?

C'est joli, mais vous n'avez pas de tableaux avec beaucoup de longs chiffres alignés, donc c'est assez facile à lire.

Peut-être, je ne sais pas, je ne me suis jamais fixé une telle tâche. Le terminal étant un assez bon outil pour afficher divers types d'informations graphiques sous forme de diagrammes et de tableaux, pour y construire et analyser une grande quantité d'informations textuelles ? - Pourquoi quand on a Excel pour ça... Bien sûr, il s'agit de mon humble opinion :)
 
jartmailru:
D'un autre côté, je me demande si vous n'avez pas déjà rencontré
que les premiers 30 % des entrées sont généralement absents du journal, et que les entrées sont ensuite perdues de manière sélective.
Les journaux contiennent toutes les lignes, c'est le terminal qui les affiche de manière sélective. Si vous ouvrez les fichiers eux-mêmes, ils sont tous là.
 
MetaDriver:

// Pouvez-vous faire une DLL pour Unicode ? Je vous en serai sincèrement reconnaissant.

Voilà. Ajout des fonctions LogW, SelectW, mais n'a pas testé - tout problème s'il vous plaît contacter.
Si vous faites un classeur pour la 5e, envoyez-le moi :-).
.
Laviande:

Jartmailru, savez-vous s'il est réaliste de créer une fenêtre de sortie directement dans le code EA sans utiliser une DLL ? Toutes les fonctions de WinApi sont disponibles. Le seul problème peut se poser lors du passage d'une structure contenant à la fois des variables et des pointeurs.

Si vous avez fait quelque chose de tordu, c'est peut-être possible. Je ne me tords pas :-).
Une fenêtre à côté d'un MT en C++ nécessite un thread d'interface séparé.
S'il s'agit d'une seule fenêtre, c'est trivial.
.
D'ailleurs... ce n'est pas un fait que les onglets... ...vous serez capable d'aligner
le contenu des colonnes au bon degré.
.
PapaYozh:
Les journaux contiennent toutes les lignes, c'est le terminal qui les affiche de manière sélective. Si vous ouvrez les fichiers eux-mêmes, ils sont tous là.
Cela ne me dérange pas :-). Mais : j'ai tout affiché + j'ai fait un graphique-
log (le point du graphique est recherché dans le log - le bon endroit est indiqué).
.
Dossiers :
out.zip  123 kb
 

J'ai créé un onglet pour les polices larges ! :) Yay ! :) Bien sûr, j'ai dû faire beaucoup d'efforts avec les fonctions WinAPI, mais cela en valait la peine. C'est utile non seulement pour Comment, mais aussi pour Label. L'idée est d'obtenir la taille de n'importe quelle chaîne dans n'importe quelle police en pixels. Et vous pouvez ensuite les classer comme vous le souhaitez, à gauche, à droite ou au centre. Pour Commentaire, la tabulation se fait naturellement avec des espaces, donc le résultat n'est pas parfait, l'erreur est de 1 à 2 pixels, mais ce n'est rien en principe. Pour les étiquettes, tout est beaucoup plus simple.

Voici un exemple montrant les onglets dans Commentaire. Tahoma,8 est spécifié ici, car les commentaires sont édités dans cette police.

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

 
Vous êtes paresseux comme l'enfer :-)
 
Meat:

Voici un exemple de tabulation dans Comment. La police définie ici est Tahoma,8, car les commentaires sont édités dans cette police.


+ sortie remaniée de n'importe quel texte, et pas seulement d'un tableau de lignes

+ en faire une fonction distincte CommentTab

+ Ajout d'un tableau de valeurs TabStop et d'une taille de tabulation par défaut (comme dans la fonction GDI).

Exemple de texte et de résultat

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