Erreurs, bugs, questions - page 2656

 
Andrey Khatimlianskii:

Donnez des détails pour la reproduction. Peut-être que quelqu'un sera intéressé. Il n'y a aucune chance que ça arrive.

Code, outil, paramètres de test.

S'il vous plaît



 

La possibilité de modifier le pointeur ordinaire de la souris de manière programmatique, sans dll, fait cruellement défaut.

Ou simplement la possibilité de désactiver le rendu de la souris ordinaire.

 

L'aide pour EventChartCustom () dit :

sparam

[in] Paramètre d'événement de type chaîne de caractères, transmis à la fonction OnChartEvent. Si la chaîne est supérieure à 63 caractères, elle est tronquée.

Cependant, une longue chaîne de 96 caractères est passée avec succès, est-ce que quelque chose a changé ?

Ici, je crypte la chaîne et la passe dans l'événement, et je la décrypte avec succès, la chaîne n'est pas tronquée comme indiqué dans l'aide et c'est bien (première chaîne cryptée suivie de la décryptée) :

2020.02.26 14:36:10.949 iSpy (EURUSD,H1) 38CFD250C299F2420D5AFB1D070196F2F9246A164C2B1905C3921E466D6124306D836A2A09D4A06DD4B02FBDD1DE6857

2020.02.26 14:36:10.949 iSpy (EURUSD,H1) EURUSD:1.08753:1.0875:0.0:1582716971862:0.0

2020.02.26 14:36:16.391 iSpy (EURUSD,H1) 2588EC84729FA3BFE07B09BCB13832AF026A4F9DEA5634477EFF2C1FCAC355A35A67EDC5D5A8621570D3EBF80A7A942A

2020.02.26 14:36:16.391 iSpy (EURUSD,H1) EURUSD:1.08752:1.08749:0.0:1582716977068:0.0


Quelle est la longueur de la chaîne qui peut être transférée dans l'événement sans être tronquée dans la réalité ?


 
Andrey Dik:

L'aide pour EventChartCustom () dit :

sparam

[in] Paramètre d'événement de type chaîne de caractères, transmis à la fonction OnChartEvent. Si la chaîne est supérieure à 63 caractères, elle est tronquée.

Cependant, une chaîne de 96 caractères est transmise avec succès. Quelque chose a-t-il changé ?

128 octets. Cela représente 127 caractères uchar, ou 63 caractères ushort.

 

Comment mettre en œuvre une telle chose dans MQL :

#include <Controls\Button.mqh>

  class Collection
  {
    protected:
      int size;

    public:
      Collection(CWnd &refs[]) { size = ArraySize(refs); }
  };


void OnStart()
{
  CButton buttons[];
  CWnd wnd[];
  Collection data1(wnd);     // ok
  Collection data2(buttons); // error
  // 'buttons' - parameter conversion not allowed
  // 'buttons' - variable of the same type expected
}
?
 
fxsaber :

128 octets. Cela représente 127 caractères uchar, ou 63 caractères ushort.

Il s'agit en fait de 160 octets.


Dossiers :
 
Stanislav Korotky:

Comment mettre en œuvre une telle chose dans MQL :

?
Hériter de CButtons de CWnd
Ou sont-ils des objets de classes de la bibliothèque standard ?
Si chacun d'entre eux est hérité d'un CObject, alors :
Collection(CObject &refs[]) { size = ArraySize(refs); }
 

Chers développeurs, est-il possible de modifier les balises UTM d'une manière ou d'une autre ?


Ou pouvez-vous mettre les balises dans l'ordre ?

utm_campagne=mt4terminal

utm_source=properties.indicator

utm_medium=indicatorName

utm_term=indicatorVersion

utm_content=Année


Lesbalises UTM actuelles ne sont pas informatives...

Finteza panel: website analytics and advertising management
Finteza panel: website analytics and advertising management
  • panel.finteza.com
Real-time unsampled analytical data, traffic attribution and quality evaluation, creation of conversion funnels and targeted advertising in apps and websites
 
Artyom Trishkin:
Hériter de CButtons de CWnd
Ou s'agit-il d'objets de classe de la bibliothèque standard ?
Si chacun d'entre eux est hérité de CObject, alors :

C'est le problème, l'arbre des classes a un nœud commun CWnd (CObject est plus éloigné, généralement à la racine).

CButton -> CWndObj -> CWnd -> CObject.

Si vous changez le paramètre de la méthode en CObject, vous obtenez deux fois plus d'erreurs :

'wnd' - parameter conversion not allowed
'wnd' - variable of the same type expected
'buttons' - parameter conversion not allowed
'buttons' - variable of the same type expected

Une hiérarchie de classes similaire fonctionne pour le cas de non-réseau. Voici le code compilé :

#include <Controls\Button.mqh>

  class Collection
  {
    protected:
      int size;

    public:
      Collection(CWnd &object) { size = 1; }
  };


void OnStart()
{
  CButton button1;
  CWnd wnd1;
  Collection data1(wnd1);     // ok
  Collection data2(button1);  // ok
}

La question est de savoir comment le faire fonctionner pour un tableau également ?

Je sais qu'un modèle aide, mais je veux juste l'éviter.

IMHO, il devrait fonctionner sans modèles par droit d'héritage.

Je l'ai vérifié comme dans C++.

class CWnd
{
  public:
    int x;
    CWnd(int _x = 0): x(_x){}
};
class CButton: public CWnd
{
  public:
    CButton(): CWnd(10) {}
};

class Collection
{
  public:
    Collection(CWnd (&ptrs)[1]) { cout << ptrs[0].x; }
};


int main()
{
  CButton buttons[1];
  CWnd wnd[1];
  Collection data1(wnd);
  Collection data2((CWnd (&)[1]) buttons);
  return 0;
}

Ça marche. Mais MQL ne le digère pas à la fois avec et sans l'index.

 
Stanislav Korotky:

C'est le problème, l'arbre des classes a un nœud commun CWnd (CObject est plus loin, à la racine).

CButton -> CWndObj -> CWnd -> CObject.

Si vous changez le paramètre de la méthode en CObject, vous obtenez deux fois plus d'erreurs :

Une hiérarchie de classes similaire fonctionne pour le cas de non-réseau. Voici le code compilé :

La question est de savoir comment le faire fonctionner pour un tableau également ?

Je sais qu'un modèle aide, mais je veux juste l'éviter.

IMHO, il devrait fonctionner sans modèles par droit d'héritage.

Je l'ai vérifié comme dans C++.

Ça marche. Mais MQL ne le digère pas - tant avec que sans l'index.

Pour le C++, votre exemple sera beaucoup plus clair. Il suffit de l'exécuter et de voir ce qui se passe)))

class CWnd
{
public:
    int x;
    CWnd(int _x = 10) : x(_x) {}
};
class CButton : public CWnd
{
    int a;
public:
    CButton(int _a=6) : CWnd(),a(_a) {}
};

class Collection
{
public:
    Collection(CWnd* ptr,size_t size) {
        for (int i = 0; i < size; cout << ptr[i++].x<<endl);
    }
};

int main()
{
    CButton buttons[10];
    CWnd wnd[10];
    Collection data1(&wnd[0],_countof(wnd));
    cout << "------------------------------" << endl;
    Collection data2(&buttons[0],_countof(buttons));
    return 0;
}
Raison: