"\t" 탭 문자는 무엇입니까? - 페이지 5

 

나는 여기에 제안된 대로 모노 글꼴의 레이블을 사용하여 테이블을 만들려고 했습니다. 특히 분수는 가로로 펼쳐져 있어서 인지하기가 매우 어렵습니다. 따라서 남은 유일한 옵션은 각 셀에 대해 별도의 레이블이 있는 일반 글꼴의 레이블을 사용하는 것입니다. 이 경우 이전에 쓴 것처럼 상당히 많은 수의 개체가 관련됩니다.

Jartmailru 이지만 DLL에 의존하지 않고 어드바이저 코드에서 직접 출력 창을 생성하는 것이 정말로 가능한지 모릅니다. 모든 WinApi 기능을 사용할 수 있는 것 같습니다. 유일한 걸림돌은 변수와 포인터를 모두 포함하는 구조를 전달할 때만 있을 수 있습니다.

 

고정 폭의 레이블

 
당신의 두뇌를 속이지 마십시오 - 기성품 구성 요소를 사용하십시오: https://www.mql5.com/en/code/8724
 
xrust :

모노샤인 라벨


모노스페이스 말씀하신건가요?

그래서 확실히 예쁘긴 한데, 긴 숫자가 줄지어 있는 테이블이 별로 없어서 다 읽기 편해요.

 
Meat :


모노스페이스 말씀하신건가요?

그래서 확실히 예쁘긴 한데, 긴 숫자가 줄지어 있는 테이블이 별로 없어서 다 읽기 편해요.

어쩌면, 나는 그런 일을 스스로 설정한 적이 없습니다. 그래프와 차트의 형태로 다양한 종류의 그래픽 정보를 표시하는 꽤 좋은 도구로 터미널이 있고 그 안에 많은 양의 텍스트 정보를 구축하고 분석합니까? - 엑셀이 있을 때 왜 이러는지... 물론 개인적인 생각이지만요 :)
 
jartmailru :
한편으로는 아직 경험하지 못했다면
로그에는 일반적으로 레코드의 처음 30%가 없으며 나중에 레코드가 선택적으로 손실됩니다.
로그에는 모든 행이 있으며 이 터미널은 이를 선택적으로 표시합니다. 파일 자체를 열면 모든 것이 있습니다.
 
MetaDriver :

// 유니코드용 DLL 버전을 만들 수 있습니까? 진심으로 감사드립니다.

기다리다. LogW, SelectW 기능을 추가했지만 테스트하지 않았습니다. 문제가 있을 수 있습니다. 문의하십시오.
5일차 하네스를 만드시면 보내주세요 :-)
.
고기 :

Jartmailru 이지만 DLL에 의존하지 않고 어드바이저 코드에서 직접 출력 창을 생성하는 것이 정말로 가능한지 모릅니다. 모든 WinApi 기능을 사용할 수 있는 것 같습니다. 유일한 걸림돌은 변수와 포인터를 모두 포함하는 구조를 전달할 때만 있을 수 있습니다.

어떻게 든 변태라면 가능할 수도 있습니다. 나는 변태가 아닙니다 :-).
C++에서 MT 옆에 있는 창은 별도의 인터페이스 스레드가 필요합니다.
하나의 창이 사소한 경우.
.
그건 그렇고 ... 그러나 탭이 ... 정렬 될 수 있다는 사실은 아닙니다.
컬럼의 내용을 원하는 만큼.
.
파파요즈 :
로그에는 모든 행이 있으며 이 터미널은 선택적으로 표시합니다. 파일 자체를 열면 모든 것이 있습니다.
상관없어 :-). 하지만: 나는 모든 것을 표시했습니다 + 나는 그래프를 비교했습니다-
log(차트의 한 지점이 로그에서 검색됩니다 - 올바른 위치가 표시됨).
.
파일:
out.zip  123 kb
 

글쎄, 나는 다른 너비의 글꼴에 대한 탭을 만들었습니다! :) 만세! :) 물론 WinAPI 기능을 엉망으로 만들어야 했지만 그만한 가치가 있었습니다. 이것은 Comment 뿐만 아니라 Label에도 매우 유용할 것입니다. 결론은 모든 글꼴의 문자열 크기를 픽셀 단위로 얻는다는 것입니다. 글쎄, 그러면 그것들은 이미 당신이 원하는 대로, 심지어 왼쪽으로, 심지어 오른쪽으로, 심지어 중앙에서도 표로 만들어질 수 있습니다. Comment의 경우 자연스럽게 표가 공백과 함께 들어가므로 결과가 이상적이지 않고 오차가 1~2픽셀 이내이지만 원칙적으로는 사소한 일입니다. 레이블의 경우 훨씬 쉽습니다.

다음은 주석의 탭을 보여주는 예입니다. 글꼴 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 :

다음은 주석의 탭을 보여주는 예입니다. 글꼴 Tahoma,8이 여기에 설정됩니다. 주석은 이 글꼴로 표시됩니다.


+ 문자열 배열뿐만 아니라 모든 텍스트의 출력을 변경했습니다.

+ 별도의 함수 CommentTab 형태로 제작

+ TabStop 값 배열 및 기본 탭 크기 추가(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 ); // вызвали преобразование и вывод по табуляции
}