La toile est cool ! - page 22

 
Nikolai Semko:

Remarquez, Peter, comment j'ai implémenté un multigradient de 6 couleurs.

où p passe de 0 à 1.

uint Grad(double p)
  {
   static uint Col[6]={0xFFFF0000,0xFFFF00FF,0xFF0000FF,0xFF00FFFF,0xFF00FF00,0xFFFFFF00};
   p=p*5;
   int n=(int)p;
   if(n==5) return Col[5];
   double k=1-p+(int)p;
   argb c1,c2;
   c1.clr=Col[n];
   c2.clr=Col[n+1];
   return ARGB(255,c2.c[0]+uchar(k*((int)c1.c[0]-(int)c2.c[0])+0.5),
               c2.c[1]+uchar(k*((int)c1.c[1]-(int)c2.c[1])+0.5),
               c2.c[2]+uchar(k*((int)c1.c[2]-(int)c2.c[2])+0.5));
  }

ZS Mais il y a un problème avec la couleur la plus extérieure, que je n'ai pas encore réussi à résoudre.

Très original. ) p est un numéro d'utilisateur arbitraire, ou est-il lié à un paramètre ?

C'est pour quoi faire ?

p=p*5;

Vous pouvez envoyer le bon numéro en une seule fois. Après cette ligne, p ne revient pas à la valeur initiale.

Ici :

double k=1-p+(int)p;

vous pouvez écrire :

double k=1-p+n;

et pourquoi ne pas utiliser à la place de

int n=(int)p;
int n=MathRound(p);

?

La fonction ARGB est-elle une fonction standard de CCanvas, ou la vôtre ?

 
Nikolai Semko:

Il y a cependant un défaut avec la couleur la plus extérieure qui n'a pas encore été corrigé.

Je l'ai corrigé :

uint Grad(double p)
  {
   static uint Col[6]={0xFF0000FF,0xFFFF00FF,0xFFFF0000,0xFFFFFF00,0xFF00FF00,0xFF00FFFF};
   if(p>0.9999) return Col[5];
   if(p<0.0001) return Col[0];
   p=p*5;
   int n=(int)p;
   double k=p-n;
   argb c1,c2;
   c1.clr=Col[n];
   c2.clr=Col[n+1];
   return ARGB(255,c1.c[2]+uchar(k*(c2.c[2]-c1.c[2])+0.5),
                   c1.c[1]+uchar(k*(c2.c[1]-c1.c[1])+0.5),
                   c1.c[0]+uchar(k*(c2.c[0]-c1.c[0])+0.5));
  }

Le code ci-dessus a été corrigé.

 
Реter Konow:

La fonction ARGB est-elle une fonction interne de CCanvas, ou la vôtre ?

ARGB est une définition de CCanvas. Pour le savoir, vous cliquez le pointeur de la souris sur le nom et appuyez sur Alt+G

ReTag Konow:

C'est pour quoi faire ?

5 est le nombre de couleurs -1

 
Реter Konow:

et pourquoi ne pas l'utiliser au lieu de

Lorsque je n'ai pas besoin du double, je préfère cette option car elle est beaucoup plus rapide.
 
Nikolai Semko:

ARGB est une définition de CCanvas. Pour le savoir, placez le pointeur de la souris sur le nom et appuyez sur Alt+G.

5 est le nombre de couleurs -1

Ok. Je ne critiquais pas, je demandais juste. Vous êtes doué pour travailler avec les couleurs.

 
Реter Konow:

Tu es génial avec les couleurs.

C'est juste un hobby :)
 
Artyom Trishkin:

Je suis d'accord. Mais il existe une catégorie d'utilisateurs qui en ont besoin différemment.

Et que se passe-t-il si les données renvoyées par l'indicateur kanvas dépassent 512 ? Les tampons ne sont d'aucune utilité dans ce cas. Et les utilisateurs veulent simplement recevoir les données des indicateurs dans leurs programmes. Et ils ne veulent pas les intégrer dans le corps du conseiller expert (je vais épargner un hibou - laissez-le voler sans hochets dans le ...). Et ils veulent recevoir des données sur toutes les barres demandées, et pas seulement sur celles qui sont visibles. Et c'est justifié. Et cela se justifie non seulement par la paresse et le désir de tout obtenir facilement et simplement, mais aussi par les exigences du TS.

Nikolai Semko:

Si nous parlons de la grande majorité des utilisateurs qui ne sont pas des programmeurs, ils ont besoin soit du hibou, soit de l'indicateur. Ils n'ont pas besoin d'un indicateur pour la chouette.

J'ai juste donné quelques informations auxquelles réfléchir, je n'impose rien. Laissez les programmeurs décider eux-mêmes de ce qui est pratique et de ce qui ne l'est pas. Cependant, je ne pense pas utiliser la fonction iCustom dans mes EAs.

Peut-être que je n'ai pas tout à fait raison.

Il est logique de supposer qu'un utilisateur qui a acheté ou téléchargé un tel indicateur de toile sans tampon sur le marché voudra utiliser ses données dans son EA.

Alors le plus raisonnable pour moi serait l'échange à travers une structure spécialement créée par le producteur de cet indicateur, qui est lu à travers une ressource.

Le programmeur devrait veiller dans son indicateur kanoval bufferless à ce que cette structure soit maintenue à jour dans la ressource, et fournir à l'utilisateur le fichier inclu, dans lequel cette structure est lue en utilisant les événements de l'utilisateur ou à l'arrivée de chaque tick (il n'est pas raisonnable d'utiliser le timer, je pense).

Et l'utilisateur n'aurait qu'à inclure une ligne de code #include... et ensuite cette structure sera toujours disponible avec les données réelles de l'indicateur.

Vous savez, ce serait plus pratique que l'utilisation classique de l'iCustom, car cette structure peut contenir des variables nommées de manière pratique et des tableaux de données de différents types (pas seulement de type double, comme dans les tampons de l'indicateur classique).

Je suis presque sûr que les ressources de MQ sont mises en œuvre de la même manière que les tampons de l'indicateur.

 
Nikolai Semko:

Je suppose que je n'ai pas tout à fait raison.

Il est assez logique de supposer qu'un utilisateur qui a acheté ou téléchargé un tel indicateur canva sur le marché voudra utiliser ses données dans son EA.

Dans ce cas, le plus raisonnable pour moi serait l'échange à travers une structure spécialement créée par le producteur de cet indicateur, qui est lu à travers une ressource.

Le programmeur doit veiller dans son indicateur canva bufferless à ce que cette structure soit maintenue à jour dans la ressource, et fournir à l'utilisateur le fichier inclu qui lit cette structure en utilisant les événements de l'utilisateur.

Et l'utilisateur n'aurait qu'à inclure une ligne de code #include... et cette structure sera toujours disponible avec les données réelles de l'indicateur.

Je pense que c'est encore plus pratique que l'utilisation classique d'iCustom parce qu'il peut contenir des variables et des tableaux de données nommés de manière pratique et que l'utilisateur n'aura pas à se soucier de la signification du numéro de tampon et n'inclura qu'une seule ligne de code dans son programme pour avoir un accès complet et pratique aux données de l'indicateur.

Je suis presque sûr que les ressources de la MQ sont mises en œuvre de la même manière que les tampons d'indicateurs.

Le mécanisme de transfert des données via la ressource elle-même est extrêmement simple. Il s'agit plutôt de la méthode de "communication" entre les deux programmes. Un programme écrit, l'autre lit. Par conséquent, le programme qui écrit des données (indicateur) dans la ressource doit respecter le format de message spécifié et le programme qui lit doit "connaître" ce format. La communication entre les programmes sera alors universelle et efficace.

 
Реter Konow:

Le mécanisme de transfert des données via la ressource elle-même est extrêmement simple. Il s'agit plutôt de la méthode de "communication" entre les deux programmes. Un programme écrit et l'autre lit. Par conséquent, le programme qui écrit ses données (indicateur) dans la ressource doit respecter le format du message, et le programme qui lit doit "connaître" ce format. La communication sera alors universelle et applicable.

Bien sûr que oui. Après tout, la partie réception et transmission est réalisée par le seul développeur qui a conçu l'indicateur lui-même.

Le mécanisme de partage via une ressource n'est pas si simple. Elle requiert certaines compétences. C'est ce que je vois comme un avantage de cette méthode, car elle sera un privilège pour les programmeurs plus avancés.

ZS Peter, il y a un mois, il ne vous semblait pas que c'était extrêmement simple et nécessaire. Heureux que vous ayez entendu et compris mon message. :))

 
Nikolai Semko:

Bien sûr que oui. En effet, la partie réception et transmission est réalisée par un seul développeur, qui a lui-même développé cet indicateur.

Le mécanisme d'échange à travers la ressource n'est pas si simple. Elle requiert certaines compétences. C'est ce que je vois comme un avantage de cette méthode, car elle sera un privilège pour les programmeurs plus avancés.

ZS Peter, il y a un mois, il ne vous semblait pas que c'était extrêmement simple et nécessaire. Heureux que vous ayez entendu et compris mon message. :))

Oui, Nikolaï, les ressources se sont avérées être une méthode très efficace pour échanger des données entre programmes, et leur utilisation est basée sur les unions dont tu m'as parlé (et Vasiliy aussi). Donc, merci à vous deux).

Le mécanisme lui-même, qui consiste à transférer des données dans une ressource et à les lire, est assez simple, mais le format du message est une question délicate si l'on recherche l'universalité. Si nous résolvons le problème pour un indicateur particulier, tout est simple.