Erreurs, bugs, questions - page 1456

 
Vasyl Nosal:
Essayez d'utiliser ChartRedraw() après la création, puis vérifiez la taille.
 
Alexey Kozitsyn:
Essayez d'utiliser ChartRedraw() après la création, puis vérifiez la taille.
Ça ne marche pas.
 
Vasyl Nosal:
Ça ne marche pas.

En général, vous ne devez rien dessiner dans les indicateurs avant le premier événement de OnCalculate() - cette approche garantira la création d'un graphique et le travail correct avec les objets.

A peu près comme ça - au premier tic nous créons, mais au suivant TAILLE :

//+------------------------------------------------------------------+
//|                                               TestIndicator1.mq4 |
//|                        Copyright 2015, MetaQuotes Software Corp. |
//|                                             https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2015, MetaQuotes Software Corp."
#property link      "https://www.mql5.com"
#property version   "1.00"
#property strict
#property indicator_chart_window
string name="probe";
bool first_tick=false; // false - ещё не было тиков
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int OnInit()
  {
//--- indicator buffers mapping

//---
   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[])
  {
//---
   static int count;
   if(count>3)
      return(rates_total); // после трёх Алертов выходим. Не за чем слух портить.
   if(!first_tick)
     {
      ObjectCreate(0,name,OBJ_LABEL,0,0,0);
      ObjectSetString(0,name,OBJPROP_TEXT,name);
      first_tick=true;
     }
   else
     {
      string text=ObjectGetString(0,name,OBJPROP_TEXT);
      int text_sizeX=int(ObjectGetInteger(0,name,OBJPROP_XSIZE));
      Alert(text," ",text_sizeX);
     }
   count++;
//--- return value of prev_calculated for next call
   return(rates_total);
  }
//+------------------------------------------------------------------+
//| Deinit                                                           |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {
   ObjectDelete(name);
   EventKillTimer();
  }
//+------------------------------------------------------------------+
 
Karputov Vladimir:

En général, vous ne devez rien dessiner dans les indicateurs avant le premier événement de OnCalculate() - cette approche garantira la création d'un graphique et le travail correct avec les objets.

Approximativement ainsi - sur le premier tic, nous créons, et sur le suivant, nous TAILLE :

Ok. Je vais simuler quelques tics pendant le week-end.
 
Existe-t-il une fonction qui permettrait de savoir si l'objet est rendu ?
 
Vasyl Nosal:
Ok. (gloussements) Je vais simuler quelques tics ce week-end.
Éteignez le Wi-Fi et vous aurez un samedi :).
 
Vasyl Nosal:
Existe-t-il une fonction qui permettrait de savoir si l'objet est rendu ?
Demandez la taille du marqueur de texte
 
WindowRedraw n'aiderait-il pas à ne pas attendre un tick ?
 
Alexandr Bryzgalov:
et WindowRedraw n'aideraient-ils pas à ne pas attendre un tick ?
Non.
 

#import "wininet.dll"

int InternetOpenW( string sAgent

...

C'est l'indicateur de l'actualité. Et ça marche.

J'ai déjà rencontré un problème avec le passage de chaînes de caractères car l'encodage est passé de ansi à unicode et les variables de chaînes de caractères doivent être converties en tableaux de caractères.

Pourquoi cela fonctionne-t-il alors ?

Raison: