タブ文字ってなんなんだろう? - ページ 5

 

ここで提案されているように、モノラルフォントでラベルをつけた表を作ろうとしたのですが、見苦しいですね。特に分数の数字は、見づらいくらいに水平に塗りつぶしています。 そのため、通常のフォントでラベルを表示し、各セルに個別のラベルを表示するという選択肢が残されています。 そうなると前にも書きましたが、かなりの数のオブジェクトが必要になってきます。

Jartmailru さん、DLLを使わずにEAコードで直接出力ウィンドウを作成することが現実的かどうかご存知ですか?WinApiの全機能が利用可能です。 唯一の難点は、変数とポインタを同時に含む構造体を渡すときだけかもしれません。

 

のラベルは、モノワイド

 
Don't be fool - use a off-the-the-shelf component :https://www.mql5.com/ru/code/8724
 
xrust:

モノシンのレーベルを表示します。


モノチンで、ということですか?

もちろんいいのですが、長い数字がたくさん並んでいる表はないので、結構見やすいんですよね。

 
Meat:


モノ・ワイドでということですか?

いいんですけど、長い数字がたくさん並んでいる表はないので、結構見やすいんですよね。

たぶん、そんなことを自分に課したことがないので、わからないのですが。グラフやチャートの形でさまざまな種類のグラフィック情報を表示するためのかなり良いツールとしての端末を持ち、その中に大量のテキスト情報を構築して分析すること?- Excelがあるのに、なぜ......。 もちろん、これは私の謙虚な考えですが :)
 
jartmailru:
一方で、まだ出会っていないのでは?
最初の30%のエントリーが通常ログから失われ、その後エントリーが選択的に失われること。
ログにはすべての行があり、それを選択的に表示するのが端末です。ファイルそのものを開けば、すべて揃っている。
 
MetaDriver:

// ユニコード用のDLLは作れないのでしょうか? 心から感謝します。

お待たせしました。LogW、SelectWの機能を追加しましたが、テストはしていませんので、問題があればご連絡ください。
もし、5thのバインダーを作っていただけるなら、ぜひ送ってください:-)。
.
肉類

Jartmailru さん、DLLに頼らず、EAのコードで直接出力ウィンドウを作成することが現実的かどうか、ご存知ですか?WinApiの全機能が利用可能です。 唯一の難点は、変数とポインタの両方を含む構造体を渡すときかもしれません。

ひねくれたことをしたのなら、もしかしたら可能性があるかもしれません。私はひねらない :-)
C++でMTの隣にあるウィンドウは、別のインターフェイススレッドが必要です。
シングルウィンドウであれば、些細なことです。
.
ところで...というわけでもなく、タブが......揃えることができるようになります。
は、列の内容を適切な度合いで表示します。
.
パパヨシュ
ログにはすべての行があり、それを選択的に表示するのがターミナルです。ファイルそのものを開けば、すべて揃っている。
気にしない:-)。でも:全部表示させた+グラフにした-。
log(グラフからの点がlogで検索され、正しい位置が表示される)。
.
ファイル:
out.zip  123 kb
 

さて、ワイドフォントのタブを作ってみましたよ。:)イエーイ!:)もちろん、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 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);
}

 
怠け者の極みです :-)
 
Meat:

以下は、Commentでタブを表示する例です。 コメントはこのフォントで出力されるため、ここで設定されているフォントはTahoma,8です。


+ 行の配列だけでなく、任意のテキストをリメイクして出力することが可能

+別機能として作成 CommentTab

+ TabStop値の配列とデフォルトのTabサイズを追加(GDI関数と同様)

本文と結果の例

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