Yeni başlayanlardan sorular MQL4 MT4 MetaTrader 4 - sayfa 217

 
alex_xss :

belki

Ona sahip olmayan ilk kişi sensin.

Ama önemli değil, herkesin üzerine atlayabilir - bu yüzden ne yazık ki düzenlemeniz gerekiyor

Belki MT4 sürümüne bağlıdır (Alpari'den aldım), sır değilse hangisine sahipsiniz?

Farklı olanlardan birçoğum var, ancak onlar için her şeyi programlıyorum :-) ancak yazılım hala aynı, yalnızca minimum markalama ve göstergelerde / danışmanlarda küçük özelliklerde farklılık gösteriyorlar ..

Renkli PS/ Püf Noktaları, yanlış ayarlanmış bir DPI monitöründen, "renk sıcaklığını düzelten yardımcı programların", "ekran kartı oyun uzantılarının" varlığından olabilir. Ve diğer-diğer.

PPS/ Bu arada, tek bir DC, kendi göstergeler / danışmanlar / komut dosyaları / araçlar paketinde (daha ziyade para için, açgözlülükten) ustalaşmadı. Maksimum - kurumsal renklerde sefil bir panel. Neyi gösteriyor

 

Merhaba!
OBJPROP_XSIZE'ın neden 0 döndürdüğünü söyleyebilir misiniz?

 //+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
void OnInit ()
  {
   ObjectsDeleteAll ();
  }
//+------------------------------------------------------------------+
//| Script program start function                                    |
//+------------------------------------------------------------------+
void OnStart ()
  {
//---
   string mnth=( string )TimeMonth( TimeCurrent ())+ "." ;
   string dy=( string )TimeDay( TimeCurrent ())+ " " ;
   string hr=( string )TimeHour( TimeCurrent ())+ ":00 " ;

   string TimeSig1=TimeToStr( TimeCurrent (), TIME_DATE | TIME_MINUTES );
   string Label1= " TEST " + Symbol ()+ "   " +TimeSig1+ " Test:  " +mnth+dy+hr+ " 1 2 3 4 5 6 7 8 9 10 11" ;
//string Label1="123456789"+"1"+"123456789"+"2"+"123456789"+"3"+"123456789"+"4"+"123456789"+" 5 "+"123456789";
   obj_create( "Sym" ,Label1, 50 , clrWhite , 15 );

  }
//+------------------------------------------------------------------+

//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
void obj_create( string name, string object, int Y_distance, color Color, int size)
  {
   if ( ObjectFind (name)==- 1 )
     {
       ObjectCreate ( 0 ,name, OBJ_LABEL , 0 , 0 , 0 );
       ObjectSetInteger ( 0 ,name, OBJPROP_CORNER , CORNER_LEFT_UPPER );
       ObjectSetInteger ( 0 ,name, OBJPROP_FONTSIZE ,size);
       ObjectSetString ( 0 ,name, OBJPROP_FONT , "Rockwell" );
       ObjectSetInteger ( 0 ,name, OBJPROP_SELECTABLE , false );
       ObjectSetInteger ( 0 ,name, OBJPROP_SELECTED , false );
       ObjectSetInteger ( 0 ,name, OBJPROP_HIDDEN , true );
       ObjectSetInteger ( 0 ,name, OBJPROP_ANCHOR , ANCHOR_LEFT );
       ObjectSetInteger ( 0 ,name, OBJPROP_XDISTANCE , 10 );
       ObjectSetInteger ( 0 ,name, OBJPROP_YDISTANCE ,Y_distance);
       ObjectSetInteger ( 0 ,name, OBJPROP_COLOR ,Color);
     }
   ObjectSetString ( 0 ,name, OBJPROP_TEXT ,object);

//text size
   int text_sizeX= int ( ObjectGetInteger ( 0 ,name, OBJPROP_XSIZE ));
   
Print ( " _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ obj_create  text_sizeX: " , text_sizeX );   
  }
//+------------------------------------------------------------------+
 
Nauris Zukas :

Merhaba!
OBJPROP_XSIZE'ın neden 0 döndürdüğünü söyleyebilir misiniz?

OBJ_LABEL çok özel bir nesnedir - yerleştirmeden sonra ve grafiğin ilk güncellemesinden önce genişlik (X_SIZE) tanımlanmaz.

genellikle ekranın yazı tipine, dpi'sine bağlıdır. Çizim işlevleri tam olarak çalışana kadar gerçek genişlik hakkında hiçbir şey söylenemez.

 
Maxim Kuznetsov :

OBJ_LABEL çok özel bir nesnedir - yerleştirmeden sonra ve grafiğin ilk güncellemesinden önce genişlik (X_SIZE) tanımlanmaz.

genellikle ekranın yazı tipine, dpi'sine bağlıdır. Çizim işlevleri tam olarak çalışana kadar gerçek genişlik hakkında hiçbir şey söylenemez.

Yeniden çizmeyi deneyin ve ardından kontrol edin.

   ObjectSetString ( 0 ,name, OBJPROP_TEXT ,object);
   ChartRedraw ();
//text size
   int text_sizeX= int ( ObjectGetInteger ( 0 ,name, OBJPROP_XSIZE ));
 
Vitaly Muzichenko :

Yeniden çizmeyi deneyin ve ardından kontrol edin.

Teşekkürler, deneyeceğim!

İşe yaramadı.
 
Maxim Kuznetsov :

OBJ_LABEL çok özel bir nesnedir - yerleştirmeden sonra ve grafiğin ilk güncellemesinden önce genişlik (X_SIZE) tanımlanmaz.

genellikle ekranın yazı tipine, dpi'sine bağlıdır. Çizim işlevleri tam olarak çalışana kadar gerçek genişlik hakkında hiçbir şey söylenemez.


Teşekkürler, fikir açık, bir şeyler deneyeceğim.

 
Nauris Zukas :


Teşekkürler, fikir açık, bir şeyler deneyeceğim.

ChartRedraw doğrudan yeniden çizmez , sadece terminalin bağırsaklarında bir yere bir onay kutusu koyar "grafik mümkün olan en kısa sürede yeniden çizilmelidir"

bir metin etiketinin hangi genişlikte (gerekli) olması gerektiğini öğrenmek için TextSetFont, TextGetSize işlevlerini deneyebilirsiniz - önemli bir fark yalnızca HiDPI ile ortaya çıkabilir. Ya da belki :-) denemedim

veya bir sonraki tick/chart_event'te zaten gerçek OBJ_LABEL genişliğini alın, yani tam olarak yeniden çizdikten sonra

 
Maxim Kuznetsov :

ChartRedraw doğrudan yeniden çizmez , sadece terminalin bağırsaklarında bir yere bir onay kutusu koyar "grafik mümkün olan en kısa sürede yeniden çizilmelidir"

bir metin etiketinin hangi genişlikte (gerekli) olması gerektiğini öğrenmek için TextSetFont, TextGetSize işlevlerini deneyebilirsiniz - önemli bir fark yalnızca HiDPI ile ortaya çıkabilir. Ya da belki :-) denemedim

veya bir sonraki tick/chart_event'te zaten gerçek OBJ_LABEL genişliğini alın, yani tam olarak yeniden çizdikten sonra

Teşekkürler, zaten yapıldı! OnDeinit() eklendi, orada bir gecikme ayarlayın ve ardından OBJPROP_XSIZE.
not Sadece senaryoda bir gecikme ile, bundan daha iyi bir şey bulamadım:

 for(int i=100000000; i>0; i--) {} 
 
Nauris Zukas :

Teşekkürler, zaten yapıldı! OnDeinit() eklendi, orada bir gecikme ayarlayın ve ardından OBJPROP_XSIZE.
not Sadece senaryoda bir gecikme ile, bundan daha iyi bir şey bulamadım:

// задержка 500 милисекунд, годная для тестера

ulong timestamp=GetTickCount64();

do {

   Sleep(500/4);  // в тестере не сработает, зато спасёт GetTickCount

} while(GetTickCount64()-timestamp<500);

 
Maxim Kuznetsov :

// задержка 500 милисекунд, годная для тестера

ulong timestamp=GetTickCount64();

do {

   Sleep(500/4);  // в тестере не сработает, зато спасёт GetTickCount

} while(GetTickCount64()-timestamp<500);

Teşekkürler, işe yaradı!

   do {}
   while ( GetTickCount ()-Time11< 1000 );