Réaliser un projet de crowdsourcing sur Canvas - page 31

 
Реter Konow:
Pour paraphraser : vous vous retrouverez avec un EA avec une interface, même si une partie est faite par moi et l'autre par vous. Cela ne vous empêchera pas de réunir les deux parties en un seul EA.
Bien que vous puissiez prendre un chemin différent. Je vais publier le constructeur, et vous, avec mon aide, allez concevoir le gui dont vous avez besoin. Vous imprimerez ensuite le noyau et l'insérerez dans le moteur, que vous brancherez sur l'Expert Advisor. C'est encore mieux, car vous apprendrez immédiatement à écrire des graphiques dans le langage de balisage et vous serez en mesure de les corriger vous-même.
 
Quoi qu'il en soit, c'est ce que nous ferons. Je vais publier le constructeur et enseigner comment concevoir le gui sur celui-ci ici. Il n'y a pas encore de documentation, donc si vous êtes intéressé, restez à l'écoute pour le tutoriel.

La formation portera sur les sujets suivants :

1. Création d'un gui fonctionnel.
2. le style.
3. Impression et insertion du fichier du noyau et du moteur dans l'application (très simple - comme un inline).
4. Connexion d'éléments gui à l'application via la fonctionnalité API (le fichier API est créé automatiquement).

Attendez la publication dans ce fil.
 
Реter Konow:
Quoi qu'il en soit, c'est ce que nous ferons. Je publierai le constructeur et j'enseignerai comment concevoir sur ce gui. Il n'y a pas encore de documentation, donc si vous êtes intéressé, gardez un œil sur le tutoriel.

La formation portera sur les sujets suivants :

1. Création d'un gui fonctionnel.
2. Conception des styles.
3. Imprimer et connecter le fichier du noyau et du moteur à l'application (très simple - comme un inline).
4. Connexion d'éléments gui à l'application via la fonctionnalité API (le fichier API est créé automatiquement).

Attendez-vous à une publication dans cette branche.

Copie ça !

 
---:

Je n'ai pas enregistré de vidéo, mais je vous envoie un exemple.

il y a 600 listes déroulantes.

Déplacez la souris - à chaque événement et changement de couleur, le CCanvas global est redessiné.

Vous pouvez voir la taille finale dans les propriétés du bitmap - 1500x600 px (comparé à vos 800x500 et 250ms de décalage). Ce qui équivaut à 900 000 pixels, et tous sont redessinés instantanément. Aucune seconde n'est à exclure.

Chaque liste est d'abord rendue sur son propre canevas dans sa propre taille (pour ne pas déborder) et ensuite approfondie sur l'ensemble. Nous avons donc 600 appels ResourceCreate par événement de souris.
Cela signifie, comme vous pouvez le constater par la vitesse de réaction, que les images sont suffisantes pour montrer des dessins animés.

Les développeurs de MT ont fourni un outil satisfaisant et sans décalage (je parle de ResourceCreate bitmaps).

Est-il possible de voir cet exemple en open source ?

 
Алексей Барбашин:

C'est triste que le projet soit passé en mode fermé (

Ça n'a pas bougé.

 
Алексей Барбашин:

Est-il possible de voir cet exemple en open source ?

Qu'est-ce que tu ne comprends pas dans kanvas ?

1. il réagit aux événements comme tous les autres objets graphiques. En d'autres termes, vous pouvez suivre les coordonnées de la souris lors de ses déplacements, réagir aux événements de clics de souris et de clavier.

2. il peut changer indépendamment la couleur de chaque pixel.

De quoi d'autre avez-vous besoin ? Et puis il faut avoir un peu de cervelle et être prêt à perdre beaucoup de temps inutilement.

 
Salut.
 
Dmitry Fedoseev:

Qu'est-ce que tu ne comprends pas dans le fait de travailler avec un kanvas ?

1. il réagit aux événements comme tous les autres objets graphiques. En d'autres termes, vous pouvez suivre les coordonnées de la souris lors de ses déplacements, réagir aux événements de clics de souris et de clavier.

2. il peut changer indépendamment la couleur de chaque pixel.

De quoi d'autre avez-vous besoin ? Ce qu'il vous faut ensuite, c'est un peu de cervelle et l'envie de perdre beaucoup de temps.

Le kanvas lui-même ne réagit pas aux événements. Et le fait que vous puissiez changer chaque pixel est clair.

Je me suis intéressé à la mise en œuvre d'un redécoupage fragmenté de la toile.

Mais il semble que beaucoup se soient contentés de repeindre entièrement le canevas, même s'il ne doit être redessiné que dans une petite partie, c'est-à-dire un seul contrôle.

 
Алексей Барбашин:

Eh bien, le kanvas lui-même ne réagit pas aux événements. Et le fait que vous puissiez changer chaque pixel est clair.

J'étais intéressé par la mise en œuvre d'un redécoupage fragmentaire de la toile.

Mais il semble que beaucoup aient opté pour une repeinte complète du canevas, même s'il ne s'agit que de repeindre une petite partie, c'est-à-dire un seul contrôle.

La toile elle-même ne réagit pas aux événements, mais elle n'existe pas par elle-même.

Redécoupage fragmentaire - cela vaut la peine de commencer à le faire et cela deviendra plus clair si un tel objectif existe. Je pense qu'il devrait y avoir un tableau de contrôles, chaque contrôle ayant des limites définies. Lorsque vous devez redessiner un contrôle, vous devez passer en revue tous les contrôles, voir ce qui relève de cette zone et ne redessiner que ceux-là. Au moins comme ça.

 
Dmitry Fedoseev:

Le kanvas lui-même n'est pas réactif, mais il n'existe pas par lui-même.

Redécoupage fragmenté - cela vaut la peine de commencer à le faire et cela deviendra plus clair si un tel objectif existe. Je pense qu'il devrait y avoir un tableau de contrôles, chaque contrôle ayant des limites définies. Lorsque vous devez redessiner un contrôle, vous devez passer en revue tous les contrôles, voir ce qui relève de cette zone et ne redessiner que ceux-là. Au moins de cette façon.

C'est exactement comme ça que je l'ai construit. En fait, j'ai pris la bibliothèque standard comme base, parce qu'elle a des moments très bien conçus pour transférer des événements et d'autres choses. Anatoly crée des groupements pour chaque classe d'éléments, alors que dans la norme, tout est réduit à un seul objet de base.

Par conséquent, WndObject contient la description complète des propriétés les plus courantes de tout contrôle (taille, emplacement, couleur d'arrière-plan, couleur de la bordure, épaisseur de la bordure, texte, image, etc.) En outre, la même classe contient une référence au contrôle parent. En d'autres termes, si aucun parent n'est spécifié pour le contrôle, celui-ci crée son propre objet kanvas sur le graphique, sinon il est dessiné sur le kanvas du parent. En fonction de sa position (autonome, esclave), les coordonnées de l'emplacement de l'élément sont également calculées. En outre, le même objet possède un tableau qui contient la description originale de la zone parentale occupée par l'élément. L'idée en elle-même est la suivante : si seul l'élément lui-même change, alors avant qu'il ne soit redessiné, la zone de pixels est remplie avec la matrice des pixels parents, et seulement alors le nouvel état du contrôle est appliqué. Cette approche ne nécessite pas de repeindre le canevas entier à chaque fois, parce que le repeint contourne tous les éléments du tableau, et récursivement avec les éléments imbriqués. Pour le rendu et la mise à jour d'un contrôle particulier, nous suggérons deux fonctions : une qui dessine par-dessus le parent (ou sur un canevas vierge) lors de la création de l'ensemble du contrôle, et une autre qui met à jour l'affichage du seul contrôle donné. Donc ça se passe comme ça.

Toujours "perdu" dans le modèle d'événement : après quels changements quelles couches doivent être redessinées.

Dans ses exemples, Nikolaï montre qu'en principe, il n'est pas nécessaire de s'embêter à stocker les données des zones locales car le repeint de l'ensemble de la toile fonctionne si rapidement qu'il n'est pas nécessaire de descendre dans les détails, il suffit de toujours repeindre en une seule fois.
Документация по MQL5: Стандартная библиотека
Документация по MQL5: Стандартная библиотека
  • www.mql5.com
Стандартная библиотека MQL5 написана на языке MQL5 и предназначена для облегчения написания программ (индикаторов, скриптов, экспертов) конечным пользователям. Библиотека обеспечивает удобный доступ к большинству внутренних функций MQL5.