"\t" sekme karakteriyle ne alakası var? - sayfa 5

 

Burada önerildiği gibi mono yazı tipindeki etiketleri kullanarak bir tablo oluşturmaya çalıştım - göze hoş gelmeyen bir manzara. Özellikle kesirli sayılar, algılanması çok zor olacak şekilde yatay olarak yayılmıştır. Yani geriye kalan tek seçenek, her hücre için ayrı bir etiketle normal bir yazı tipinde etiketler. Bu durumda, daha önce yazdığım gibi, oldukça fazla sayıda nesne söz konusudur.

Jartmailru , ama bilmiyor musunuz, DLL'ye başvurmadan doğrudan danışman kodunda bir çıktı penceresi oluşturmak gerçekten mümkün mü? Görünüşe göre tüm WinApi işlevleri mevcut. Tek engel, yalnızca hem değişkenleri hem de işaretçileri içeren bir yapıyı geçerken olabilir.

 

tek boşlukta etiketler

 
beyninizi kandırmayın - hazır bir bileşen kullanın: https://www.mql5.com/en/code/8724
 
xrust :

monoshine etiketler


Monospace mi demek istediniz?

Bu yüzden kesinlikle güzel, ancak arka arkaya çok sayıda uzun rakam içeren tabloları yok, bu yüzden her şeyi okumak oldukça kolay.

 
Meat :


Monospace mi demek istediniz?

Bu yüzden kesinlikle güzel, ancak arka arkaya çok sayıda uzun rakam içeren tabloları yok, bu yüzden her şeyi okumak oldukça kolay.

Belki de bilmiyorum, kendime asla böyle bir görev vermedim. Çeşitli grafik bilgilerini grafikler ve çizelgeler şeklinde görüntülemek, içinde büyük miktarda metinsel bilgi oluşturmak ve analiz etmek için oldukça iyi bir araç olarak bir terminale sahip olmak? - Neden bunun için Excel varken... Tabi bu benim kişisel nacizane görüşüm olsa da :)
 
jartmailru :
Öte yandan, daha önce deneyimlemediyseniz şaşırdım.
günlükte genellikle kayıtların ilk %30'u yoktur ve daha sonra kayıtlar seçici olarak kaybolur.
Günlükler tüm satırlara sahiptir, bu terminal bunları seçerek görüntüler. Dosyaları kendileri açarsanız, her şeye sahiptirler.
 
MetaDriver :

// Unicode için bir DLL sürümü yapabilir misiniz? içtenlikle minnettar olacağım.

Devam etmek. LogW, SelectW fonksiyonları eklendi, ancak test edilmedi - sorunlar olacak, lütfen iletişime geçin.
Beşincisi için bir koşum takımı yaparsanız, gönderin :-).
.
Et :

Jartmailru , ama bilmiyor musunuz, DLL'ye başvurmadan doğrudan danışman kodunda bir çıktı penceresi oluşturmak gerçekten mümkün mü? Görünüşe göre tüm WinApi işlevleri mevcut. Tek engel, yalnızca hem değişkenleri hem de işaretçileri içeren bir yapıyı geçerken olabilir.

Bir şekilde sapıksa, o zaman belki mümkündür. Ben sapık değilim :-).
C++'da MT'nin yanındaki bir pencere, ayrı bir arabirim iş parçacığı gerektirir.
Bir pencere önemsiz ise.
.
Bu arada ... ama sekmelerin ... hizalanabileceği bir gerçek değil
Sütunların içeriğini istediğiniz ölçüde
.
PapaYozh :
Günlükler tüm satırlara sahiptir, bu terminal bunları seçerek görüntüler. Dosyaları kendileri açarsanız, her şeye sahiptirler.
umurumda değil :-). Ama: Her şeyi görüntüledim + grafiğin bir karşılaştırmasını yaptım-
log (logda grafikten bir nokta aranır - doğru yer gösterilir).
.
Dosyalar:
out.zip  123 kb
 

Farklı genişlikte yazı tipleri için sekmeler yaptım! :) Yaşasın! :) Tabii ki WinAPI işlevleriyle uğraşmak zorunda kaldım ama buna değdi. Bu sadece Yorum için değil, Etiket için de çok faydalı olacaktır. Sonuç olarak, herhangi bir yazı tipindeki herhangi bir dizenin boyutunu piksel cinsinden elde ederiz. Peki, o zaman zaten istediğiniz gibi tablo haline getirilebilirler, hatta sola, hatta sağa, hatta merkeze. Yorum için, tablolama doğal olarak boşluklarla gider, bu nedenle sonuç ideal değildir, hata 1-2 piksel arasındadır, ancak bu prensipte önemsizdir. Etiketler için çok daha kolay.

İşte Yorum'da sekmeleri gösteren bir örnek. Tahoma,8 yazı tipi burada ayarlanır, çünkü Yorumlar bu yazı tipinde görüntülenir.

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

 
Seni tembel :-)
 
Meat :

İşte Yorum'da sekmeleri gösteren bir örnek. Tahoma,8 yazı tipi burada ayarlanır, çünkü Yorumlar bu yazı tipinde görüntülenir.


+ sadece bir dizi diziyi değil, herhangi bir metnin çıktısını değiştirdi

+ ayrı bir fonksiyon şeklinde yapılmış CommentTab

+ TabStop değerleri dizisi ve varsayılan Sekme boyutu eklendi (GDI işlevinde olduğu gibi)

örnek metin ve sonuç

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