Galerie d'interfaces utilisateur écrites en MQL - page 10

 

...Et enfin aujourd'hui, une dernière chose insolente - une copie de la fenêtre de paramétrage de ME.


Ici, il est plus facile de comprendre quelle fenêtre n'est pas "réelle".))

 
Реter Konow #:

Oui, bien sûr. Ce n'était pas un problème.

Ne me demandez pas comment, je ne me souviens de rien.))))))

Nikolaï répondra mieux.

C'est surprenant, parce que même le panneau intégré de MQ fast trading a un tel bug !

 
Aleksey Vyazmikin #:

Etonnant, car même le panneau intégré de MQ fast trading est doté d'un tel bug !

Il suffit de contrôler les propriétés des objets. L'algorithme doit savoir au-dessus de quel objet se trouve le curseur et quel objet est en "focus". Modifiez la propriété de l'objet du bas pour qu'il ne réagisse pas au curseur et au clic. Je pense que oui, mais je peux me tromper car je ne m'en souviens pas. Cela fait des années.

 
Je me souviens que mon algorithme a désactivé le défilement du graphique lorsque le curseur se trouvait au-dessus de ma fenêtre et que je faisais défiler quelque chose à l'intérieur. Puis, lorsque le curseur revenait dans l'espace libre du graphique, l'algorithme activait à nouveau le défilement.
 
Реter Konow #:
Je me souviens

On ne peut pas le regarder maintenant ?

 
Aleksey Vyazmikin #:

On ne peut pas le regarder maintenant ?

J'ai des dizaines de milliers de lignes de code éparpillées dans des dizaines de fichiers dans mes archives, et je ne me souviens de rien.)))) Je vais essayer de le regarder à mon aise.

 
Реter Konow #:

J'ai des dizaines de milliers de lignes de code éparpillées dans des dizaines de fichiers dans mes archives, et je ne me souviens de rien.)))))) Je vais essayer de regarder les loisirs.

Oh comme je comprends, je l'ai aussi sur différents ordinateurs... En essayant de tout assembler, on se rend compte qu'on ne comprend pas la signification du code :) Maintenant, j'ai commencé à écrire beaucoup de commentaires dans le code - c'est pratique, bien que cela semble être une perte de temps inutile lorsque vous écrivez du code, mais lorsque vous y revenez un an plus tard, cela vous aide beaucoup.

 
Aleksey Vyazmikin #:

Je comprends très bien, je l'ai aussi sur différents ordinateurs..... en essayant de tout rassembler, on se rend compte qu'on ne comprend pas la signification du code :) Maintenant, j'ai commencé à écrire beaucoup de commentaires dans le code - c'est pratique, même si cela semble être une perte de temps inutile lors de l'écriture du code, mais lorsque vous y revenez un an plus tard, cela vous aide beaucoup.

J'ai peur que si j'entre dans les archives, la galerie ne se termine jamais, lol.)))))) Il y a un constructeur, et il est très facile de créer de nouvelles fenêtres. Et si je veux terminer l'éditeur visuel... ? Alors je serai coincé pendant des mois, et pour quoi faire ? ))))))

 
Aleksey Vyazmikin #:

... Maintenant, j'ai commencé à écrire beaucoup de commentaires dans le code - c'est pratique, même si cela semble être une perte de temps inutile lors de l'écriture du code, mais lorsque vous y revenez un an plus tard, cela vous aide beaucoup.

Je suis tout à fait d'accord avec les commentaires. Il faut absolument écrire des explications sur le code.

 
Aleksey Vyazmikin #:
Je n'ai aucune expérience dans le développement de telles interfaces, mais celles que j'ai utilisées à partir de différentes sources présentaient un inconvénient important, à savoir que parfois ( !) d'autres objets sur le graphique étaient cliqués à travers elles. Avez-vous pu résoudre ce problème ?

Mes interfaces étaient bien sûr beaucoup plus simples. Je n'ai pas utilisé Canvas, mais j'ai simplement construit un panneau à partir de contrôles standard. Pour éviter que d'autres objets sur le graphique ne transparaissent, j'ai redessiné tous les composants de la fenêtre une fois par minute :

if (iTime(_Symbol,PERIOD_M1,0) > LastMinute && !IsTesting()) { 
   LastMinute = iTime(_Symbol,PERIOD_M1,0);
   for (int i = 0; i < 45 ; i++) {
      long tf = ObjectGetInteger(0, Controls[i], OBJPROP_TIMEFRAMES);
      if (ObjectSetInteger(0, Controls[i], OBJPROP_TIMEFRAMES, -1)) 
         ObjectSetInteger(0, Controls[i], OBJPROP_TIMEFRAMES, tf);
   }
}

Ici, Controls est un tableau contenant les noms des composants.