Hatalar, hatalar, sorular - sayfa 2801

 
Roman :

Sadece Yazdır'ı deneyin(

Evet ve printf gibi yerine getirir.
printf 'de ilk parametre çıktı değerinin tipidir.


baskı işleri! Teşekkür ederim! ))

Ama printf her zaman değil


 

Tuvalde bir karakter görüntülemek ve onu taşımak istiyorum, kaynak:

 #property indicator_chart_window
#property indicator_plots 0

#include <Canvas\Canvas.mqh>


CCanvas canvas;

//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int OnInit ()
{
   canvas.CreateBitmapLabel( ChartID (), 0 , "canvas" , 0 , 0 , 900 , 400 );
   canvas.FontSet( "Courier New" , 32 );
   canvas.Erase( 0 );
   canvas.Update();
   EventSetMillisecondTimer ( 250 );
//---
   return ( INIT_SUCCEEDED );
}
//+------------------------------------------------------------------+
//| Custom indicator iteration function                              |
//+------------------------------------------------------------------+
int OnCalculate ( const int rates_total,
                 const int prev_calculated,
                 const datetime &time[],
                 const double &open[],
                 const double &high[],
                 const double &low[],
                 const double &close[],
                 const long &tick_volume[],
                 const long &volume[],
                 const int &spread[])
{
//---

//--- return value of prev_calculated for next call
   return (rates_total);
}
//+------------------------------------------------------------------+
//| Timer function                                                   |
//+------------------------------------------------------------------+
void OnTimer ()
{
   static int x = 0 ;
   static const uint col_black = ColorToARGB ( clrBlack );
   static const uint col_red = ColorToARGB ( clrRed );
   canvas. TextOut (x, 100 , "S" , col_black);
   x+= 10 ;
   canvas. TextOut (x, 100 , "S" , col_red);
   canvas.Update();
}
//+------------------------------------------------------------------+


neden önceki oluşturulan görüntünün üzerine black ile yazıyorum, ancak eserler kalıyor?


 
Igor Makanu :

Tuvalde bir karakter görüntülemek ve onu taşımak istiyorum, kaynak:


neden önceki oluşturulan görüntünün üzerine black ile yazıyorum, ancak eserler kalıyor?


Tüm tuvali bir kerede yeniden yüklemek daha iyidir. Hepsi aynı, sonra hepsi yeniden çizilir.

 
Andrey Barinov :

Tüm tuvali bir kerede yeniden yüklemek daha iyidir. Hepsi aynı, sonra hepsi yeniden çizilir.

Bunu zaten düşündüm, ama soru tamamen teknik

Yazı tipi yumuşatma böyle çalışıyor gibi görünüyor? ve amaç, spriteları hareket ettirmek, genel olarak, neden böyle çalıştığını anlamak istiyorum

 

Nereye kazacağımı bilmiyorum, biri bana aramanın yönünü söyleyebilir mi? Bir gösterge yazıyorum ama "derle"ye ilk tıklamadan sonra hesaplama kısmı saçma sapan çıkıyor, tekrar derliyorum, doğru gibi görünüyor.

 2020.07 . 13 14 : 12 : 05.987 ZigZag_MP (USDJPY,M15)  Average wave size = - 2147483648 points; less then average: 1 / 100 min= 99999999.0 max= 107.1 steps=- 2147483648
2020.07 . 13 14 : 12 : 27.179 ZigZag_MP (USDJPY,M15)  Average wave size = 273 points; less then average: 65 / 100 min= 106.422 max= 107.848 steps= 57

2020.07 . 13 14 : 18 : 38.001 ZigZag_MP (USDJPY,M15)  Average wave size = - 2147483648 points; less then average: 1 / 100 min= 99999999.0 max= 107.1 steps=- 2147483648
2020.07 . 13 14 : 18 : 46.751 ZigZag_MP (USDJPY,M15)  Average wave size = 273 points; less then average: 65 / 100 min= 106.422 max= 107.848 steps= 57

Doğaüstü bir şey yapmıyorum - zikzakların son 100 dizini sayıyorum. Kodu bir kereden fazla değiştirdim ama işin aslı aynı ama sonuç farklı. bu süre içinde belki birkaç tik geçer, ancak mevcut çubuk göz ardı edilir, bu yüzden durumun böyle olduğuna inanmıyorum.

olası sürümlerden birini tahmin ederek: Gösterge arabelleklerini zorla başlatıyorum, içlerinde çöp yok.

 
Igor Zakharov :

olası sürümlerden birini tahmin ederek: Gösterge arabelleklerini zorla başlatıyorum, içlerinde çöp yok.

soru nerede başlatıyorsun

prev_calculated == 0 koşuluna göre ise, her şey yolundaysa, OnInt() içindeyse, TF'yi değiştirirken ve derlerken başarısız olur

 
Igor Makanu :

soru nerede başlatıyorsun

prev_calculated == 0 koşuluna göreyse, her şey yolundaysa, OnInt() içindeyse, TF'yi değiştirirken ve derlerken başarısız olur

tüm seçenekleri gözden geçirdi (hem he-init hem de he-hesapla); akım: yineleme döngüsünde her değer ayrı ayrı atanır. Veri penceresinden kontrol ettim - garip/önemsiz değerler yok.

 
Igor Makanu :

Tuvalde bir karakter görüntülemek ve onu taşımak istiyorum, kaynak:


neden önceki oluşturulan görüntünün üzerine black ile yazıyorum, ancak eserler kalıyor?


Bunun nedeni yumuşatmadır. En kesin yol, sembolün üstüne arka plan rengine göre bir dikdörtgen çizmektir. Ve sonra yeni koordinatlara sahip bir karakter çıktısı alın. Genelde böyle durumlarda yapılır.

 
Igor Makanu :
Michael Matkovskij :

Bunun nedeni yumuşatmadır. En kesin yol, sembolün üstüne arka plan rengine göre bir dikdörtgen çizmektir. Ve sonra yeni koordinatlara sahip bir karakter çıktısı alın. Genelde böyle durumlarda yapılır.

Tuvali herhangi bir yeniden çizim ve boyama olmadan basitçe hareket ettirme olasılığını unutmayın.
Bu, hareket etmenin en hızlı yoludur.

 #include <Canvas\iCanvas.mqh> //https://www.mql5.com/ru/code/22164

void OnStart () {
// Формируем какой-то фон
   for ( int i = 0 ; i< 1000 ; i++) Canvas.Circle( rand ()% 2048 , rand ()% 2048 , 50 + rand ()% 50 ,ARGB( 255 , rand ()% 256 , rand ()% 256 , rand ()% 256 ));
   Canvas.Update();
// -----------------------
   int x= 100 , y= 100 ;
   iCanvas c( 0 ,x,y, "symbol" , 50 , 50 ); // создаем дополнительный канвас размером 50х50
   c.TextPosition( 0 , 0 );
   c.CurentFont( "Tahoma" , 50 );
   c.Comm( "S" );
   c.Update();
   while (! IsStopped ()&& x<W.Height) {
      c.MoveCanvas(++x,++y);         // перемещаем данный канвас
      c.Update();
       Sleep ( 50 );
   }
}
 
Nikolai Semko :

Tuvali herhangi bir yeniden çizim ve boyama olmadan basitçe hareket ettirme olasılığını unutmayın.
Bu, hareket etmenin en hızlı yoludur.

Kimse inkar etmez. Sadece tuval şeklinde bir ekran olduğunda bir konsept var. Buna karşılık, aynı özel tuval (piksel dizisi) pencerenin (grafik) tuvaline çizilir. Daha doğrusu, ilk olarak ResourceCreate (OBJ_BITMAP veya OBJ_BITMAP_LABEL içinde) kullanılarak grafiğe geçirilir (kopyalanır). Grafik penceresinde her şey Win API kullanılarak çizilir (yanılmıyorsam). Bununla birlikte, diğer API'lerin yardımıyla yapabilirsiniz. Ancak CCanvas sınıfının, m_pixels dizisinin öğeleri üzerinde kendi çizim yöntemleri vardır.

Küçük bir dikdörtgen çizerken, ResourceCreate kullanarak hala çok fazla piksel aktarmanız gerektiği ortaya çıktı (sadece çizimde zaman kazandırır). Aksi takdirde, m_pixels dizisini işleyip OBJ_BITMAP_LABEL'e kopyalamadan OBJ_BITMAP_LABEL'i grafiğe göre kolayca taşıyabilirsiniz.