A lona é legal! - página 22

 
Nikolai Semko:

Nota, Peter, como eu implementei um multigradiente de 6 cores.

onde p muda de 0 para 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 Mas há um problema com a cor mais externa, que eu ainda não consegui resolver.

Muito original. ) p é um número de usuário arbitrário, ou está vinculado a algum parâmetro?

Para que serve isto?

p=p*5;

Você pode enviar o número certo de uma vez. Depois desta linha p não retorna ao valor inicial.

Aqui:

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

você pode escrever:

double k=1-p+n;

e por que você não usa em vez de

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

?

A função ARGB é uma função CCanvas padrão, ou é sua?

 
Nikolai Semko:

Existe, no entanto, uma falha com a cor mais externa, que ainda não foi corrigida.

Fixou-o:

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));
  }

O código acima foi corrigido.

 
Реter Konow:

A função ARGB é uma função interna da CCanvas, ou é sua?

ARGB é uma definição do CCanvas. Para descobrir, clique no ponteiro do mouse sobre o nome e pressione Alt+G

ReTag Konow:

Para que serve isto?

5 é o número de cores -1

 
Реter Konow:

e por que você não a usa em vez de

Quando eu não preciso do dobro, prefiro esta opção porque é muito mais rápida.
 
Nikolai Semko:

ARGB é uma definição do CCanvas. Para descobrir, pressione o ponteiro do mouse sobre o nome e pressione Alt+G

5 é o número de cores -1

Ok. Eu não estava criticando, apenas perguntando. Você é ótimo em trabalhar com cores.

 
Реter Konow:

Você é ótimo com as cores.

É apenas um hobby :)
 
Artyom Trishkin:

Eu concordo. Mas há uma categoria de usuários que precisam disso de maneira diferente.

E se os dados retornados do indicador Kanvas excederem 512? Os amortecedores não vão ajudar neste caso. E os usuários só querem receber dados dos indicadores em seus programas. E eles não querem incorporá-los no corpo do Conselheiro Especialista (vou poupar uma coruja - deixá-la voar sem chocalhos no ...). E eles querem receber dados sobre qualquer barra solicitada, não apenas sobre as visíveis. E isto é justificado. E se justifica não apenas pela preguiça e desejo de obter tudo fácil e simples, mas também pelas exigências do TS.

Nikolai Semko:

Se estamos falando da grande maioria dos usuários que não são programadores, eles precisam ou da coruja ou do indicador. Eles não precisam de um indicador para a coruja.

Eu apenas dei algumas informações para pensar, não estou impondo nada. Deixe que os programadores decidam por si mesmos o que é conveniente e o que não é. No entanto, pessoalmente não acho que usarei a função iCustom em meus EAs.

Talvez eu não esteja muito certo.

É lógico supor que um usuário que comprou ou baixou tal indicador sem tampão de tela do Mercado desejará usar seus dados em sua EA.

Então o mais razoável para mim seria a troca através de uma estrutura especialmente criada pelo produtor deste indicador, que é lida através de um recurso.

O programador deve tomar cuidado em seu indicador Kanoval sem buffer que esta estrutura seja mantida no recurso atualizado, e fornecer ao usuário o arquivo inclu-file, no qual esta estrutura é lida usando os eventos dos usuários ou ao chegar de cada tick (não é razoável usar o timer, eu acho).

E o usuário teria que incluir apenas uma linha de código #incluindo... e então esta estrutura estará sempre disponível com dados reais do indicador.

Seria mais conveniente do que o uso clássico do iCustom, pois esta estrutura pode conter variáveis e conjuntos de dados de diferentes tipos (não apenas do tipo duplo, como nos buffers do indicador clássico).

Tenho quase certeza que os recursos da MQ são implementados da mesma forma que os amortecedores do indicador.

 
Nikolai Semko:

Acho que não estou muito certo.

É bastante lógico supor que um usuário que comprou ou baixou tal indicador canva do Mercado desejará usar seus dados em sua EA.

Neste caso, o mais razoável para mim seria a troca através de uma estrutura especialmente criada pelo produtor deste indicador, que é lida através de um recurso.

O programador deve tomar cuidado em seu canva indicador sem buffer que esta estrutura é mantida no recurso atualizado, e fornecer ao usuário o arquivo inclu- que lê esta estrutura usando os eventos do usuário.

E o usuário teria que incluir apenas uma linha de código #incluindo... e esta estrutura estará sempre disponível com dados reais do indicador.

Acho que é ainda mais conveniente do que o uso clássico do iCustom porque ele pode conter variáveis e vetores de dados convenientemente nomeados e o usuário não terá que se preocupar com o significado do número buffer e incluir apenas uma linha de código em seu programa para ter acesso total e conveniente aos dados indicadores.

Tenho quase certeza que os recursos do MQ são implementados da mesma forma que os amortecedores de indicador.

O mecanismo de transferência de dados através do próprio recurso é extremamente simples. É mais sobre o método de "comunicação" entre os dois programas. Um programa escreve, o outro programa lê. Portanto, o programa que escreve os dados (indicador) no recurso deve aderir ao formato de mensagem especificado e o programa que lê deve "conhecer" este formato. Então, a comunicação entre os programas será universal e eficiente.

 
Реter Konow:

O mecanismo de transferência de dados através do próprio recurso é extremamente simples. Trata-se mais do método de "comunicação" entre os dois programas. Um programa escreve e o outro lê. Consequentemente, o programa que escreve seus dados (indicador) para o recurso deve aderir ao formato da mensagem, e o programa que lê deve "conhecer" este formato. Então, a comunicação será universal e aplicável.

É claro que sim. Afinal de contas, a parte de recepção e transmissão é feita pelo único desenvolvedor que projetou o indicador em si.

O mecanismo de compartilhamento através de um recurso não é tão simples quanto isso. Isso requer certas habilidades. É o que eu vejo como uma vantagem deste método, pois será um privilégio para os programadores mais avançados.

ZS Peter, há um mês, não lhe pareceu que fosse extremamente simples e necessário. Ainda bem que você ouviu e entendeu minha mensagem. :))

 
Nikolai Semko:

É claro que sim. Afinal de contas, a parte de recepção e transmissão é feita por apenas um desenvolvedor, que desenvolveu ele mesmo este indicador.

O mecanismo de troca através do recurso não é tão simples assim. Isso requer certas habilidades. É o que eu vejo como uma vantagem deste método, pois será um privilégio para os programadores mais avançados.

ZS Peter, há um mês, não lhe pareceu que fosse extremamente simples e necessário. Ainda bem que você ouviu e entendeu minha mensagem. :))

Sim, Nikolai, os recursos provaram ser um método muito eficaz de intercâmbio de dados entre programas, e seu uso se baseia nos sindicatos de que você me falou (e Vasiliy também). Portanto, obrigado a ambos).

O próprio mecanismo de transferência de dados para um recurso e leitura a partir dele, é bastante simples, mas o formato da mensagem é uma questão complicada se você lutar pela universalidade. Se resolvermos o problema para um determinado indicador, tudo é simples.