Yeni başlayanlardan sorular MQL5 MT5 MetaTrader 5 - sayfa 1001

 

Lütfen bana neden hata aldığımı söyle

 2019.02 . 17 06 : 13 : 28.974 Test_4G_CB (Si Splice,H1)       1 Тут ошибка 4202 Графический объект не найден
2019.02 . 17 06 : 13 : 28.983 Test_4G_CB (Si Splice,H1)       2 Тут ошибка 4202 Графический объект не найден

bu kodda

       if ( ObjectFind (chart,name)< 0 )
        {
         Print ( "1 Тут ошибка " , GetLastError (), " " ,cLng::CodeDescription( GetLastError ()));
         ResetLastError ();
         graphic.Create(chart,name, 0 , 0 , 0 ,pix_X,pix_Y); //Создает графический ресурс, привязанный к объекту чарта 
         Print ( "2 Тут ошибка " , GetLastError (), " " ,cLng::CodeDescription( GetLastError ()));
         ResetLastError ();
        }

İlk hata hala açıklanabilirse - nesnenin bulunmadığını söylüyorlar, ancak eksik nesneyi aramanın hatasız olarak uygulanması net değil, o zaman nesne açıkça oluşturulurken ikinci hata net değil - grafik oluşur ve hatanın nedeni net değildir.

Hatalardan nasıl kurtulur?

 
Aleksey Vyazmikin :

Lütfen bana neden hata aldığımı söyle

bu kodda

İlk hata hala açıklanabilirse - nesnenin bulunmadığını söylüyorlar, ancak eksik nesneyi aramanın hatasız olarak uygulanması net değil, o zaman nesne açıkça oluşturulurken ikinci hata net değil - grafik oluşur ve hatanın nedeni net değildir.

Hatalardan nasıl kurtulur?

İşlev çağrılmadan önce ResetLastError() yürütülmelidir. Burada ne var:

graphic.Create()

belirsiz. CCanvas ise, Create() yöntemi bir grafik nesnesine bağlı olmaksızın bir grafik kaynağı oluşturur. Ve true veya false döndürür:

Oluşturmak

Bir grafik nesnesine bağlı olmaksızın bir grafik kaynağı oluşturur.

 virtual bool   Create(
   const string        name,                                 // имя
   const int           width,                                 // ширина
   const int           height,                               // высота
   ENUM_COLOR_FORMAT   clrfmt= COLOR_FORMAT_XRGB_NOALPHA        // формат
   );

Seçenekler

isim

[içinde] Grafik kaynağının adının temeli. Kaynağın adı, oluşturma sırasında sözde rastgele bir dize eklenerek oluşturulur.

Genişlik

[içinde] Genişlik (X boyutu) piksel cinsinden.

yükseklik

[içinde] Piksel cinsinden yükseklik (Y ekseni boyunca boyut).

clrfmt=COLOR_FORMAT_XRGB_NOALPHA

[içinde] Renk işleme yöntemi. Rengin nasıl işleneceği hakkında daha fazla ayrıntı için ResourceCreate() işlevinin açıklamasına bakın.

Geri dönüş değeri

true - başarılıysa, aksi takdirde false


Genel olarak, gösterdiğiniz şeyden anlamak zor.

Ama şunu deneyin:

 //+------------------------------------------------------------------+
ResetLastError ();
if ( ObjectFind (chart,name)< 0 )
  {
   Print ( "1 Тут ошибка потому, что объекта нет ещё" , GetLastError (), " " ,cLng::CodeDescription( GetLastError ()));
   ResetLastError ();
   if (!graphic.Create(chart,name, 0 , 0 , 0 ,pix_X,pix_Y))
       Print ( "2 Тут ошибка " , GetLastError (), " " ,cLng::CodeDescription( GetLastError ()));
  }
//+------------------------------------------------------------------+

Orada CGraphic varsa, ne döndürdüğünü anlamak için Create () koduna girmeniz gerekir, çünkü yardımda bununla ilgili bir kelime yoktur:

Документация по MQL5: Стандартная библиотека / Научные графики / CGraphic / Create
Документация по MQL5: Стандартная библиотека / Научные графики / CGraphic / Create
  • www.mql5.com
Стандартная библиотека / Научные графики / CGraphic / Create - справочник по языку алгоритмического/автоматического трейдинга для MetaTrader 5
 
Artyom Trishkin :

İşlev çağrılmadan önce ResetLastError() yürütülmelidir. Burada ne var:

belirsiz. CCanvas ise, Create() yöntemi bir grafik nesnesine bağlı olmaksızın bir grafik kaynağı oluşturur. Ve true veya false döndürür:

Oluşturmak

Bir grafik nesnesine bağlı olmaksızın bir grafik kaynağı oluşturur.

Seçenekler

isim

[içinde] Grafik kaynağının adının temeli. Kaynağın adı, oluşturma sırasında sözde rastgele bir dize eklenerek oluşturulur.

Genişlik

[içinde] Genişlik (X boyutu) piksel cinsinden.

yükseklik

[içinde] Piksel cinsinden yükseklik (Y ekseni boyunca boyut).

clrfmt=COLOR_FORMAT_XRGB_NOALPHA

[içinde] Renk işleme yöntemi. Rengin nasıl işleneceği hakkında daha fazla ayrıntı için ResourceCreate() işlevinin açıklamasına bakın.

Geri dönüş değeri

true - başarılıysa, aksi takdirde false


Genel olarak, gösterdiğiniz şeyden anlamak zor.

Ama şunu deneyin:

Orada CGraphic varsa, ne döndürdüğünü anlamak için Create () koduna girmeniz gerekir, çünkü yardımda bununla ilgili bir kelime yoktur:

Yukarıda hata sıfırlama ile zaten kontrol ettim ve hatanın oluştuğu yeri yerelleştirdim

Ek olarak, farklı işlevlerden iki kez meydana gelir - ilk işlevden sonra hata sıfırlanır, ancak daha sonra tekrar oluşur.

Ve benim yaratma seçeneğim

Oluşturmak

Grafik nesnesine bağlı bir grafik kaynağı oluşturur .

bool Oluştur (
    uzun süre      çizelge , // çizelge tanımlayıcı
    const dize    isim , // isim
    const int       subwin , // alt pencere numarası
    const int       x1 , // x1 koordinatı
    const int       y1 , // y1 koordinatı
    const int       x2 , // x2 koordinatı
    const int       y2            // y1 koordinatı
)

Seçenekler

çizelge

[içinde] Grafik Kimliği.

isim

[içinde] Ad.

alt kazanmak

[içinde] Alt pencere numarası.

x1

[içinde] X1 koordinatı.

y1

[içinde] Y1 koordinatı.

x2

[içinde] X2 koordinatı.

y2

[içinde] Y2 koordinatı.

 
Aleksey Vyazmikin :

Yukarıda hata sıfırlama ile zaten kontrol ettim ve hatanın oluştuğu yeri yerelleştirdim

Bul nesne işlevini çağırmadan önce hatayı sıfırlamazsınız.

 
Artyom Trishkin :

Bul nesne işlevini çağırmadan önce hatayı sıfırlamazsınız.

Evet, yukarıdaki kodu zaten kontrol ettiğim için alıntıdaki kodu sıfırlamıyorum - orada hata yok, bu yüzden aşağıda gösterilen benzer kontrol satırlarını sildim.

 
Merhaba, Çince veya Japonca karakterlerle bir dosyadan bir satır okuyan bir uyarı işlevim var, bunu nasıl düzeltebilirim?
 
Artyom Trishkin :

Nesne bul işlevini çağırmadan önce hatayı sıfırlamazsınız.

Bir kez daha deneyi tekrarlamaya karar verdim, işte kod

       //--- отключим показ ценового графика
       ChartSetInteger ( 0 , CHART_SHOW , false );
       long chart= ChartID ();

      CGraphic graphic;
         Print ( "0 Тут ошибка " , GetLastError (), " " ,cLng::CodeDescription( GetLastError ()));
         ResetLastError ();
       if ( ObjectFind (chart,name)< 0 )
        {
         Print ( "1 Тут ошибка " , GetLastError (), " " ,cLng::CodeDescription( GetLastError ()));
         ResetLastError ();
         graphic.Create(chart,name, 0 , 0 , 0 ,pix_X,pix_Y); //Создает графический ресурс, привязанный к объекту чарта 
         Print ( "2 Тут ошибка " , GetLastError (), " " ,cLng::CodeDescription( GetLastError ()));
         ResetLastError ();
        }

İşte sonuç

 2019.02 . 17 08 : 55 : 19.845 Test_4G_CB (Si Splice,H1)       0 Тут ошибка 0 Операция выполнена успешно
2019.02 . 17 08 : 55 : 19.860 Test_4G_CB (Si Splice,H1)       1 Тут ошибка 4202 Графический объект не найден
2019.02 . 17 08 : 55 : 19.860 Test_4G_CB (Si Splice,H1)       2 Тут ошибка 4202 Графический объект не найден
Hatanın nedeni hakkında bir fikriniz var mı?
 
Denis Nikolaev :
Merhaba, Çince veya Japonca karakterlerle bir dosyadan bir satır okuyan bir uyarı işlevim var, bunu nasıl düzeltebilirim?

Windows'ta yazı tiplerini ayarlayın. "Unicode'u desteklemeyen programların dili" için Rusça olarak ayarlayın.

"Bölgesel Standartlar" - "Gelişmiş".

 
Vladimir Karputov :

Windows'ta yazı tiplerini ayarlayın. "Unicode'u desteklemeyen programların dili" için Rusça olarak ayarlayın.

"Bölgesel Standartlar" - "Gelişmiş".

yardımcı olmadı

Dosyadan okunan bir satırın Japonca veya Çince'ye otomatik çevirisi var, neden bu?

 
Aleksey Vyazmikin :

Bir kez daha deneyi tekrarlamaya karar verdim, işte kod

İşte sonuç

Hatanın nedeni hakkında bir fikriniz var mı?

Son hatayı sıfırladığınızdan beri, böyle bir hata kodunun oluştuğu CGraphic'in wild'larına bakın.