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

 
Je pense que si vous ne dessinez pas la partie invisible de la face arrière, vous pouvez accélérer le premier dessin de la fenêtre d'au moins un tiers. Je ne peux pas encore l'affirmer, vous devez vérifier. Laissez-le dessiner uniquement le cadre et le chapeau. Oubliez le reste. Dans tous les cas, il y aura un gain.
 
Andrey Barinov #:

J'ai aussi le canevas plein écran qui se redessine complètement à chaque changement, mais cela ne prend pas plus de 50ms...

Le plus coûteux est de dessiner du texte. Par conséquent, pour ne pas utiliser TextOut à chaque fois, je les stocke dans des tableaux. Cela s'avère beaucoup plus rapide.

Oui, TextOut est utilisé. Je vais réfléchir à ce que l'on peut en faire.

 
En général, d'ici la prochaine version, je vais refactoriser le bloc de dessin et augmenter la vitesse, mais surtout, je vais terminer le moteur.
 
Реter Konow #:

L'arithmétique simple fonctionne ici : la somme des surfaces de 10 à 17 fenêtres est beaucoup plus grande que le plein écran. D'accord. Plus les dessins secondaires nécessaires pour créer les ombres, les icônes, les cadres....

En ce qui concerne TextOut, je vérifierai et écrirai. Idée intéressante.

Je ne comprends pas votre arithmétique simple :). Dans mon arithmétique, il n'est pas nécessaire de dessiner les pixels qui ne sont pas visibles par l'utilisateur, et la taille maximale de la toile pour le dessin est limitée par la taille de l'affichage en pixels.

Je dessine par couches, quel que soit le nombre de fenêtres, dans un seul bitmap. Il peut y avoir jusqu'à une centaine de fenêtres. Les primitives simples sont dessinées en un temps minuscule. Le plus long, comme je l'ai écrit plus haut, ce sont les textes. Mais ils sont créés avec l'aide de TextOut lors de la première utilisation, et plus loin déjà à partir de tableaux prêts à l'emploi.

 

Un plan pour les travaux futurs doit être approuvé.

Je publierai une mise à jour chaque semaine. Samedi ou dimanche.

1. Dans la prochaine version, je publierai une version complète du moteur. Je corrigerai les bugs et accélérerai le rendu.

2. La deuxième version sera dédiée aux tables. Je restaurerai les fonctionnalités de base.

3. la troisième version - je ferai des tableaux dynamiques. J'espère les mettre en place dans une semaine. Je vais essayer.

4. Quatrième version - fenêtre dynamique. J'essaierai de poster la version finie.


A ce stade, les versions de base du constructeur, du moteur et du langage de balisage peuvent être considérées comme complètes.

Je vais certainement ouvrir une branche de modèles écrits en code KIB, où je posterai des fenêtres et des groupes d'éléments finis. Avec des illustrations pour faciliter la tâche de ceux qui veulent construire l'interface.

Et j'essaierai d'écrire des articles tutoriels pour que les gens puissent utiliser tout l'éventail des possibilités.


Dans ce fil de discussion, je continuerai à poster du code, des images et du matériel explicatif dès que je le pourrai. Je serai très occupé par le travail mentionné ci-dessus.

 
Non Perth, c'est encore trop. Votre interface avec tout le texte, les ombres, etc. plafonne à 50 ms sur un processeur faible.
Cherchez un bogue.
Exécutez le profilage. Voyez quelles sont les fonctions qui consomment 95 % du temps.
Peut-être utilisez-vous ChartGet ou des fonctions XY (bien que vous n'ayez pas de lien vers un graphique).
Quoi qu'il en soit, lancez le profilage. Cela ne prendra que 40 secondes.
 
Branches de modèleécrites dans le code KIBqui
ne doivent pas être mélangées avec le code du constructeur. Elles doivent être publiées en tant que projet séparé.
 
Andrey Barinov #:

Je ne comprends pas votre arithmétique simple :). Dans mon arithmétique, il n'est pas nécessaire de rendre les pixels qui ne sont pas visibles par l'utilisateur, et la taille maximale de la toile pour le rendu est limitée par la taille de l'affichage en pixels.

Je dessine en couches, quel que soit le nombre de fenêtres, dans un seul bitmap. Il peut y avoir jusqu'à une centaine de fenêtres. Les primitives simples sont dessinées en un temps minuscule. Le plus long, comme je l'ai écrit plus haut, ce sont les textes. Mais ils sont créés avec l'aide de TextOut lors de la première utilisation, et plus loin déjà à partir de tableaux prêts à l'emploi.

Travailler avec un seul grand canevas a beaucoup de limitations. J'ai déjà pensé à cette option et j'en ai même discuté avec Nikolay.

Je m'explique : vous le faites parce que vous utilisez la classe standard Ccanvas. Il existe des solutions toutes faites dans le cadre desquelles vous travaillez. Mais je n'utilise pas la classe Ccanvas. Tous les codes de rendu relèvent du développement personnel. C'est pourquoi je ne m'en tiens pas au concept - un seul canevas pour TOUT. À mon avis, c'est une solution techniquement peu pratique et inefficace dans un environnement graphique. Il est plus facile d'utiliser des ensembles d'objets bitmap et d'y attacher des ressources prêtes à l'emploi que d'avoir un bitmap et de construire par programme l'interaction des images sur ce bitmap. C'est même difficile à imaginer. Mais ce n'est pas l'essentiel.

Imaginez combien il est difficile de réaliser le concept d'une interface graphique multifenêtre si vous n'avez qu'un seul canevas. Je ne m'attellerais pas à une telle tâche.

Mais même cela n'est pas décisif. La principale raison de rejeter l'idée d'un seul canevas pour toutes les images : lorsqu'il n'y a qu'un seul canevas, le déplacement des fenêtres de l'interface nécessite un nouveau dessin dans l'environnement MQL. En revanche, si chaque fenêtre occupe son propre objet bitmap et est déplacée par la fonction ObjectSetInteger(), le redessin des objets déplacés relève de fonctions standard qui fonctionnent en dehors de l'environnement MQL. C'est donc beaucoup plus rapide.

Vous avez simplement une direction de développement différente dans laquelle d'autres solutions sont plus efficaces.


Merci beaucoup pour l'astuce concernant TextOut. Je vais étudier ce point.

 
hini #:
Les branches du modèle sont écritesdans le code KIB qui
ne doit pas être mélangé avec le code du constructeur. Il doit être publié en tant que projet séparé.

Oui, pour le débogage, je vais mettre en œuvre la déconnexion du programme utilisateur du moteur, si c'est ce que vous vouliez dire. J'ai probablement mal compris.

 
Реter Konow #:

Travailler avec une seule grande toile présente de nombreuses limites. J'ai déjà pensé à une telle option et j'en ai même discuté avec Nikolay.

Je m'explique : vous le faites parce que vous utilisez la classe standard Ccanvas. Il existe des solutions toutes faites dans le cadre desquelles vous travaillez. Mais je n'utilise pas la classe Ccanvas. Tous les codes de rendu sont écrits par développement personnel. Je ne m'en tiens donc pas au concept - un seul canevas pour TOUT. À mon avis, c'est une solution techniquement peu pratique et inefficace dans un environnement graphique. Il est plus facile d'utiliser des ensembles d'objets bitmap et d'y attacher des ressources prêtes à l'emploi, que d'avoir un bitmap et de construire par programme l'interaction des images sur ce bitmap. C'est même difficile à imaginer. Mais ce n'est pas l'essentiel.

Imaginez combien il est difficile de réaliser le concept d'une interface graphique multifenêtre si vous n'avez qu'UN canevas. Je ne m'attellerais pas à une telle tâche.

Mais même cela n'est pas décisif. La principale raison de rejeter l'idée d'un seul canevas pour toutes les images : lorsqu'il n'y a qu'un seul canevas, le déplacement des fenêtres de l'interface nécessite un nouveau dessin dans l'environnement MQL. En revanche, si chaque fenêtre occupe son propre objet bitmap et est déplacée par ObjectSetInteger(), le nouveau dessin lors du déplacement est pris en charge par des fonctions standard qui fonctionnent en dehors de l'environnement MQL. Il est donc beaucoup plus rapide.

Vous avez simplement une direction de développement légèrement différente dans laquelle d'autres solutions fonctionnent plus efficacement.


Merci beaucoup pour le conseil sur TextOut. Je vais étudier ce point.

Je n' utilise pas le kanvas standard :).

Et j'ai trouvé plus facile d'implémenter une interface multi-fenêtres sur une seule bitmap. Mais chacun ses goûts !


Et en pratique, il semble plus rapide de redessiner tout le canevas que d'utiliser ObjectSetInteger, etc....