Créer une bibliothèque graphique à partir de zéro

 
sabre
 

Forum sur le trading, les systèmes de trading automatisés et les tests de stratégies de trading

GUI à l'initiative de la foule. Béta-testing ouvert.

Alexey Barbashin, 2020.03.07 21:25

"mais peut-être que c'est plus facile de tout faire en objets" - c'est plus que logique

"Oui, bien sûr, nous nous y fierons en partie." - alors nous sommes tout de suite corrigés :

class CCoordPBase

Наследуемся от CObject, то есть:

class CCoordPBase : public CObject

Хотя наверное можно и по другому:

class Control : public CObject

CObject est la classe de base de tous les objets de la bibliothèque des développeurs. Réalisé par analogie avec C++ et C#. L'objet de base (type) dans Sharp est Object.

Les coordonnées et les dimensions sont des propriétés du contrôle, de même que la couleur et l'épaisseur de la bordure, les rayons des arrondis, les icônes et le texte.

Nous devons d'abord définir quel type de contrôle est élémentaire, puis décrire les propriétés de base.

Bien sûr, certaines des propriétés définies précédemment peuvent ne pas être utilisées dans les descendants, ce n'est pas un problème, mais il est préférable que la propriété de base soit la plus universelle.

Voici un exemple de commande universelle simple :

Contient l'arrière-plan, la bordure, le rayon, l'icône et le texte.

Si vous avez besoin d'une étiquette, vous ne spécifiez pas le fond, la bordure et l'icône ; si vous avez besoin d'un panneau, le contenu n'est pas spécifié ; si vous avez besoin d'un bouton avec une image, seule l'icône est spécifiée ; si vous avez besoin d'un bouton avec une image, le fond, la bordure et l'image sont spécifiés.

C'est-à-dire que cette composition est assez universelle pour la plupart des contrôles.


Je vois, la question sur le changement de style au survol avec l'enregistrement des coordonnées... même si c'est déjà assez clair

Existe-t-il une norme biliotec par contrôle ?

 

L'essence deCObject est de typer tous les objets.

Par exemple, nous avons besoin d'une bibliothèque de listes (liste d'éléments, boîte combo, liste de contrôle, etc.). Pour chaque type d'éléments, nous pouvons créer un type de tableau différent, c'est ce qu'a fait Anatoly, ou nous pouvons utiliser un outil tout fait :CArrayObj

En d'autres termes, de nombreux éléments de code n'ont pas besoin d'être inventés, ils sont déjà là, il suffit de les prendre et de les utiliser.

 
Alexandr Andreev:

Je comprends cela, la question est de changer le style au survol tout en gardant les coordonnées... bien que cela semble être déjà clair

Y a-t-il un bilio standard sur le contrôle ?

La bibliothèque standard des développeurs peut être prise comme base, je n'y vois rien de gênant, leur hiérarchie.

Bien sûr, à partir de là, nous devrions jeter tout ce qui est lié à la construction directe, mais laisser le système de transfert des événements - c'est vraiment universel !

Grâce à cette technologie, quelle que soit la classe à laquelle appartient le contrôle le plus complexe, les événements seront transmis par le système typé de l'objet élémentaire.

Le contrôle de base sera dessiné dans le CControls sous-jacent, après quoi l'événement OnPaint() sera généré. Cela permettra à l'utilisateur de redessiner les contrôles enfants et, de manière générale, de redessiner le contrôle comme il le souhaite.

 
Alexandr Andreev:

Allez, ! !!!!

et je pensais faire une interaction simple

où l'on va entrer des positionnements comme à gauche du dernier objet dans le cas d'une ligne ou d'une colonne.

Nous allons donc écrire un contrôleur universel

C'est exactement comme cela qu'il faut faire : écrire l'interaction élémentaire.

Un contrôleur de base au tout début n'a pas besoin d'avoir toutes les propriétés nécessaires, un fond est suffisant.

Après tout, pour rendre le contrôle lui-même, il contiendra la fonction correspondante. Ainsi, lorsque nous ajouterons des propriétés, nous devrons modifier une seule fonction.

Selon la hiérarchie des éléments ?

CObject est un type de base

classe CControl : public CObject - le contrôle de base de la bibliothèque elle-même

class CContainerControl : public CControl - le contrôle de groupe. L'un de ses champs sera un tableau de contrôles imbriqués. Vous pouvez voir un exemple dans labibliothèque standard CWndContainer.

 
Sasha, puisque vous avez déjà commencé à coder, faites un projet open source en MQL. Qui sait, peut-être qu'il y en aura.
 
Алексей Барбашин:
Sasha, puisque vous avez déjà commencé à coder, faites un projet open source dans MQL, vous pourrez le développer ensemble et le partager avec les autres. Qui sait, peut-être qu'il y en aura.

Je suis en attente pour le moment... en regardant les bibliothèques standard.... il y a beaucoup de choses inutiles

Je ne sais pas s'il y en a beaucoup, mais il serait préférable d'écrire son propre code... ou hériter

CChartObject

Документация по MQL5: Стандартная библиотека
Документация по MQL5: Стандартная библиотека
  • www.mql5.com
Стандартная библиотека MQL5 написана на языке MQL5 и предназначена для облегчения написания программ (индикаторов, скриптов, экспертов) конечным пользователям. Библиотека обеспечивает удобный доступ к большинству внутренних функций MQL5.
 
Алексей Барбашин:
Sasha, puisque vous avez déjà commencé à coder, faites un projet open source en MQL. Qui sait, peut-être qu'il y en aura.

Je pense qu'il est un peu tôt pour commencer à zéro, nous devons d'abord construire quelque chose.

 
Alexandr Andreev:

Je suis en attente pour le moment... en regardant les bibliothèques standard.... il y a beaucoup de choses inutiles

(bien que pas beaucoup))) mais vous feriez mieux d'écrire votre propre contrôle... ou vous pouvez en hériter

CChartObject

Non, non ! !!

Regardez bien !

Ce contrôleur est la voie à suivre pour nulle part ! Nous n'avons pas besoin d'objets graphiques discrets ! Nous devons dessiner sur la toile - c'est la seule façon d'obtenir un développement et des possibilités plus larges.

Et le fait que vous deviez fabriquer votre propre contrôleur principal - ça c'est sûr.

La bibliothèque standard répartit les propriétés et les états entre CWndObject et CWnd, alors que nous devons tout réunir dans un seul contrôle.

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

Non, non ! !!

Regardez bien !

Ce contrôleur est le chemin vers nulle part ! Nous n'avons pas besoin d'objets graphiques discrets ! Nous devons dessiner sur kanvas - c'est la seule chose qui nous donnera du développement et de larges possibilités.

Et le fait que vous deviez fabriquer votre propre contrôleur principal - ça c'est sûr.

Les propriétés et les états de la bibliothèque standard sont répartis entre CWndObject et CWnd, et nous devons les réunir en un seul contrôle.

J'ai passé un quart d'heure à essayer de créer un projet et il s'est avéré être créé, maintenant je cherche comment le rendre public

 
Alexandr Andreev:

Je pense qu'il est un peu tôt pour commencer à faire table rase.

Je suis sûr que ce n'est pas une bonne idée de partir de zéro.

Des personnes très intelligentes ont dépensé beaucoup de temps et de connaissances pour créer la même bibliothèque standard ou la bibliothèque d'Anatoly.

Les gens ont dépensé du temps et des connaissances et il serait stupide de ne pas les utiliser.

Nous devrions simplement prendre le meilleur, de notre point de vue, dans les deux et en construire un nouveau.

Nous devons apprendre des erreurs des autres. Nous ferons le nôtre).