Questions sur la POO dans MQL5 - page 15

 
Vasiliy Pushkaryov:

Je m'excuse pour la désinformation, j'ai écrit précédemment que vous ne pouvez pas appeler la méthode Create() dans une classe enfant.

Maintenant, après avoir vérifié deux fois, vous pouvez. Mais l'accès au membre privé m_button n'était pas disponible. C'est-à-dire qu'il était impossible de vérifier, par exemple, l'état d'un bouton : appuyé/relâché.

Maintenant, avec le conseil d'Igor, c'est possible.

Il n'y a pas de problèmes avec les boutons ici, je ne me souviens pas, mais cette classe avait des méthodes prêtes ( pas des champs ) - pour déterminer l'état, sinon, vérifiez IsActive() ou PropFlags() ou StateFlags() - il y avait certainement quelque chose de prêt pour savoir ce qui se passe avec le bouton maintenant.

Je vais vous dire le deuxième hack avec les graphiques en MQL - vous pouvez trouver le nom du bouton ( Name()) et par le nom le trouver et obtenir l'état via ObjectGetInteger() et d'autres fonctions, mais pour éviter de le faire maladroitement, écrivez dans votre classe des méthodes pour obtenir les propriétés via ObjectGetInteger()


comme ça ;)

PS : J'ai eu du mal avec le SB aussi - je ne pouvais pas trouver pourquoi les cases à cocher deviennent sélectionnées après avoir minimisé et maximisé le panneau - comme si la souris était cliquée sur l'objet... quand j'ai réalisé que je ne voulais pas relire tout le SB, j'ai créé mon propre gestionnaire, qui après avoir minimisé le formulaire mettrait via ObjectSetInteger() la propriété d'objet désélectionnée pour mes cases à cocher.

 
Igor Makanu:

il n'y a pas de problème avec les batailles, je ne me souviens pas, mais cette classe avait des méthodes prêtes ( pas des champs ) - pour déterminer l'état, si non, alors vérifier IsActive() ou PropFlags() ou StateFlags() - exactement ce qui était prêt là pour trouver ce qui est avec le bouton maintenant

Je vais vous dire le deuxième hack avec les graphiques en MQL - vous pouvez trouver le nom du bouton ( Name()) et par le nom le trouver et obtenir l'état via ObjectGetInteger() et d'autres fonctions, mais pour éviter de le faire maladroitement, écrivez dans votre classe des méthodes pour obtenir les propriétés via ObjectGetInteger()

comme ça ;)

PS : J'ai eu du mal avec SB aussi - je ne pouvais pas trouver pourquoi les cases à cocher deviennent sélectionnées après avoir minimisé et maximisé le panneau - comme si ma souris avait cliqué sur l'objet... J'ai décidé que je ne voulais pas relire toute la chose - j'ai construit mon propre gestionnaire qui, après avoir minimisé le formulaire, a défini la propriété d'objet désélectionné pour mes cases à cocher via ObjectSetInteger().

J'ai également rencontré ce problème. J'avais besoin de colorer la boîte de dialogue à mes propres couleurs. Il s'est également avéré qu'ils étaient cachés dans la section privée. J'ai réussi à le résoudre en utilisant une méthode qui utilise ObjectGetInteger() pour peindre directement les panneaux. Et après avoir minimisé et déplié, c'était aussi un désordre.

Voici à quoi ressemble l'en-tête avant qu'il ne soit réduit :


Et ça, c'est après.


Je n'ai pas non plus trouvé pourquoi la couleur par défaut est renvoyée sur les boutons de fermeture et de réduction.

 
Vasiliy Pushkaryov:

J'ai rencontré cela aussi. J'avais besoin de colorer la boîte de dialogue du SB dans ses propres couleurs. Ils se sont avérés être cachés dans la section privée, aussi. J'ai réussi à le résoudre en utilisant une méthode qui utilise ObjectGetInteger() pour peindre directement le panneau. Et après avoir minimisé et déplié, c'était aussi un désordre.

Voici à quoi ressemble l'en-tête avant qu'il ne soit réduit :


Et ça, c'est après.


Je n'ai pas non plus trouvé pourquoi la couleur par défaut est renvoyée sur les boutons de fermeture et de réduction.

J'ai jeté un autre coup d'œil à la std locale et j'ai été convaincu de ma décision d'écrire ma propre bibliothèque))).
 
Vladimir Simakov:
Une fois de plus, j'ai regardé la std locale et j'ai été convaincu de la bonne décision d'écrire ma bibliothèque))).

J'ai écrit sur le moment du bouton ici, extrait de là :

Tant que vous appuyez sur le bouton lentement, environ une fois par seconde, cela fonctionne bien. Commencez à pousser un peu plus vite et souvent l'événement n'est pas intercepté.

Avez-vous remarqué de tels problèmes dans votre bibliothèque ? J'aimerais savoir si c'est l'implémentation du SB ou l'architecture de gestion des événements qui est en cause et qu'il n'y a pas moyen de contourner ?

 
Vasiliy Pushkaryov:

... J'aimerais savoir si c'est l'implémentation du SB ou si c'est l'architecture de traitement des événements et qu'il n'y a aucun moyen de le contourner ?

Vous pouvez créer vous-même un bouton en tant qu'objet graphique sans utiliser la bibliothèque et comparer son fonctionnement avec un bouton créé avec la bibliothèque.

 
Dmitry Fedoseev:

Vous pouvez créer vous-même un bouton en tant qu'objet graphique sans utiliser la bibliothèque, et comparer son fonctionnement avec un bouton créé à l'aide de la bibliothèque.

Merci pour l'idée, je vais l'essayer.
 
Vasiliy Pushkaryov:

J'ai écrit ici le moment avec les boutons, extrait de là :

Avez-vous remarqué de tels problèmes dans votre bibliothèque ? J'aimerais savoir si c'est l'implémentation du SB ou l'architecture de gestion des événements qui est en cause et que vous ne pouvez pas contourner ?

Si vous écrivez pour vous-même (pas pour le marché), il est plus facile de faire des fenêtres avec des boutons en C# et d'appeler la dll MQL en C# - toute fantaisie avec des boutons, des icônes, des cases à cocher, etc. est réalisée en C# en une demi-heure - une heure, mais j'ai dû googler du matériel pendant une semaine.

La seule chose à faire est de regarder la barre que vous avez dans le répertoire Terminal et de l'utiliser pour créer votre propre interface - c'est mon expérience, j'ai appris tout ce que je devais savoir à ce sujet

SZS : Je viens de me souvenir, j'ai mis un simple panneau dans la base de code, pas de boutons là, mais il y a des étiquettes de texte et le code est aussi simple que possible. https://www.mql5.com/ru/code/25897

 
Dmitry Fedoseev:

Vous pouvez créer vous-même un bouton en tant qu'objet graphique sans utiliser la bibliothèque et comparer ses performances avec un bouton créé avec la bibliothèque.

Oui, tiré d'un ancien travail, quand je ne travaillais pas avec SB, j'ai fait une sorte de bouton de fermeture. Il fonctionne rapidement :


Il s'avère que le problème se situe dans l'implémentation du SB.

 
Vasiliy Pushkaryov:

Oui, tiré d'un ancien travail où je ne travaillais pas avec SB, je faisais une sorte de bouton de fermeture. Il fonctionne rapidement :


Il s'avère que le problème se situe dans l'implémentation du SB.

Labibliothèque standard implique que les contrôles sont créés sur le formulaire. Ils ne sont pas censés fonctionner du tout, juste comme ça. Du moins, c'est comme ça que ça se passait.

 
Igor Makanu:

Si vous écrivez pour vous-même (et non pour le marché), il est plus facile de créer des boîtes avec des boutons en C# et de les appeler à partir de MQL .dll en C# - toute fantaisie avec des boutons, des boîtes, des cases à cocher, etc. peut être réalisée en C# en une heure et demie, mais j'ai dû chercher du matériel sur Google pendant une semaine.

La seule chose à faire est de regarder la barre que vous avez dans le répertoire Terminal et de l'utiliser pour créer votre propre interface - c'est mon expérience, j'ai appris tout ce que je devais savoir à ce sujet

ZS : Oui, je me souviens, j'ai mis un simple panneau dans la base de code, pas de boutons là, mais il y a des étiquettes de texte et le code est aussi simple que possible. https://www. mql5.com/ru/code/25897

Non, je ne connais pas le C#.

Je vais jeter un coup d'œil au panneau, merci.