Mon approche. Le noyau est le moteur. - page 86

 
Peter, j'ai cru comprendre en voyant l'ellipse gif que le formulaire est un canevas solide ? Et comment fonctionnent les listes déroulantes ? Je suis intéressé par le cas où la liste déroulante est plus grande que la taille du formulaire.
 
Vasiliy Sokolov:

Permettez-moi de vous dire que je n'aime pas moi-même le manque de rigueur de ma solution. Vous devez créer des objets MT. Mais, en réalité, ce n'est qu'un préjugé. Quelle différence cela fait-il ? Vous n'avez pas besoin de plus de 20 à 30 d'entre eux pour un transfert complet.

30*64 caractères = 1920 caractères. C'est suffisant pour transférer les données d'un grand tableau.

 
Dmitry Fedoseev:
Peter, je vois d'après l'ellipse gif que le formulaire est une toile continue ? Et comment fonctionnent les listes déroulantes ? Je suis intéressé par le cas où la liste déroulante dépasse la taille du formulaire.

Oui, le formulaire est un kanvas unique. Le constructeur écrit les noms du canevas lui-même et crée des fonctions enveloppantes pour travailler avec lui.

Les listes déroulantes fonctionnent également dans la zone située à l'extérieur de la fenêtre. Ceci est mis en œuvre.

La liste déroulante est un autre kanvas. Il apparaît et disparaît lorsque l'on clique sur le bouton.

 
Vasiliy Sokolov:

Mappage direct des structures via une union vers un tableau d'octets, partagé pour un accès global. Je ne sais pas si c'est techniquement faisable, mais si c'est le cas, la vitesse serait cosmique, puisque vous n'auriez pas à copier quoi que ce soit.

J'accepterai volontiers cette solution si vous fournissez un exemple.

 

Attention à l'échange de données via des objets graphiques :-)

Sinon, vous pouvez facilement faire en sorte que votre Conseiller Expert ressemble à "ne peut pas être optimisé"...

 
Реter Konow:

Ma solution est la meilleure option dans les conditions initiales.

Qu'est-ce qu'une chaîne ?

  1. Pas de taille fixe. En conséquence, il est impossible d'organiser un tableau de chaînes de caractères et d'accéder à une chaîne arbitraire dans ce tableau ;
  2. Absence totale de saisie de données dans les chaînes de caractères. Vous devez définir un sous-type de façon dynamique dans l'analyse syntaxique des chaînes de caractères. Vous perdez un temps précieux à analyser les tokens nécessaires ; et si les lexèmes contiennent des erreurs, la chaîne ne le contrôle en aucune façon. Vous recevez une corde et vous priez pour qu'elle soit correcte ;
  3. Faible efficacité du stockage des informations par octet. Une chaîne de service comme "opt=1;cancel=3" utilise au mieux 35-40 caractères (octets) sur 256 possibles (17%). Pour envoyer 100 octets d'information, vous devez former une chaîne de 588 octets, ce qui surcharge le canal de communication. Si vous comprimez les caractères, cela rend le code très compliqué. Si vous abrégez les noms de variables, cela n'aide que très peu.

Et malgré toutes ces choses évidentes, vous êtes comme Robin des Bois , vous continuez à proclamer combien vous êtes rapide et précis, et combien vous avez bien deviné la ficelle. Non, je ne l'ai pas fait, et c'est très malsain.

N'essayez pas de vous fier à votre instinct là où des connaissances fondamentales sont nécessaires.

 
Vasiliy Sokolov:

Ce qu'est une corde :

  1. Il n'y a pas de taille fixe. En conséquence, il est impossible d'organiser un tableau de chaînes de caractères et d'accéder à une chaîne arbitraire dans ce tableau ;
  2. Absence totale de saisie de données dans la chaîne. Vous devez définir un sous-type de façon dynamique dans l'analyse syntaxique des chaînes de caractères. Vous perdez un temps précieux à analyser les tokens nécessaires ; et si les lexèmes contiennent des erreurs, la chaîne ne le contrôle en aucune façon. Vous recevez une corde et vous priez pour qu'elle soit correcte ;
  3. Faible efficacité du stockage d'informations par octet. Une chaîne de service comme "opt=1;cancel=3" utilise au mieux 35-40 caractères (octets) sur 256 possibles (17%). Pour envoyer 100 octets d'information, vous devez former une chaîne de 588 octets, ce qui surcharge le canal de communication. Si vous comprimez les caractères, cela rend le code très compliqué. Si vous abrégez les noms de variables, cela n'aide que très peu.

Et malgré toutes ces choses évidentes, vous êtes comme Robin des Bois , vous continuez à proclamer combien vous êtes rapide et précis, et combien vous avez bien deviné la ficelle. Non, je ne l'ai pas fait, et c'est très malsain.

N'essayez pas de suivre votre instinct là où vous devez connaître les principes fondamentaux.

Vasily, ne pensez-vous pas que les développeurs de MT ont pris en compte les problèmes de chaînes de caractères lors de la préservation de la description des objets MT ?

Il est beaucoup plus cool de s'appuyer sur les connaissances fondamentales de quelqu'un d'autre et d'utiliser son intuition pour obtenir encore plus.

 
Реter Konow:

Vasiliy, ne pensez-vous pas que les développeurs de MT ont pris en compte les problèmes de chaînes de caractères, lors du stockage de la description des objets MT ?

Peter, chaque algorithme de stockage de données a ses faiblesses et ses forces. Les développeurs ont certainement pris beaucoup de choses en compte, et elles sont certainement bonnes, mais fondamentalement, les cordes resteront toujours des cordes.

 
Vasiliy Sokolov:

Peter, chaque algorithme de stockage de données a ses faiblesses et ses forces. Les développeurs ont bien sûr pris en compte de nombreuses choses, et elles sont certainement bonnes, mais fondamentalement, les cordes resteront toujours des cordes.

Vasily, si la pratique montre que ma solution est imparfaite, je l'abandonnerai. Et je vais prendre la solution de Nikolaï. Si c'est mauvais aussi, je retournerai à OnChartEvent() et dirai que rien ne peut être fait.

Cependant, il n'y a aucune raison de croire que la mise en œuvre de ma solution sera encore boiteuse.

Nous le saurons bientôt.

 
z.s. En ce qui concerne spécifiquement le stockage des chaînes de caractères dans les objets MT, il y a un problème étrange. Si vous commencez à compresser des données et utilisez des caractères non imprimables dans le nom de l'objet, dans certains cas, vous ne pourrez pas accéder à cet objet. Le problème est probablement toujours présent car il est très spécifique et peu de gens le connaissent, mais vous pouvez néanmoins tomber dessus.