assessor especializado - perguntas diversas - página 13

 

Você poderia escrever uma função como esta:

void DrawLabel(string name, string text, int x, int y, int fontsize=10)

Se você a chamar sem o valor final, o valor padrão será usado , ou seja, o tamanho da fonte será 10

DrawLabel("MyLabel","Hello,World!",50,50); // final parameter not passed (default value used)

Ou você pode anular explicitamente o valor padrão do tamanho da fonte:

DrawLabel("MyLabel","Hello,World!",50,50,24); // fontsize parameter is 24

É isso que você quer dizer?

 
honest_knave:

É isso que você quer dizer?

Talvez meu inglês impeça de entender seu comentário.
Obrigado por seu comentário.
Se eu estou entendendo corretamente, entendo você assim: Eu posso escrever 1x Função Void para Label, e posso usá-la com dois métodos como abaixo. ( Posso usar uma função de Vácuo, para rotular objetos com parâmetro de tamanho de fonte e sem ele, isso é correto? )

DrawLabel("MyLabel","Hello,World!",50,50);    // #1
DrawLabel("MyLabel","Hello,World!",50,50,24); // #2

Portanto, gostaria de dizer que passei algumas horas para este Objeto de Planilha para onde esse problema vem e como posso resolvê-lo.
Então, sinto que vem de baixo do código, não das funções de Rótulo, porque tive 2x funções de Rótulo, removi um deles, indicadores de preço Bid and Ask ( preços de mercado ) ainda funciona bem, mas a Planilha não funciona com a função de Rótulo. A planilha funciona bem sem a função de Rótulo.

Preciso compartilhar um pouco do código da Planilha de Cálculo. Duvido como o código abaixo. ( Mesmo - preciso mencionar mais uma vez que abaixo do código funciona bem quando crio um objeto Label sem função Label para Spreadsheet )

double  spread                                                 ;
        spread       = MarketInfo  ( symbol, MODE_SPREAD ) / 10;
        spreadstring = DoubleToStr ( spread, 1           )     ;

Obrigado por tudo.

 

Bem, é uma boa prática para verificar se algo que você tenta criar, realmente é criado.

Por exemplo, quando se trata de tamanhos de tela, muitos usuários usam resoluções diferentes, e sempre que por que razão um objeto é criado acima dos limites de largura ou altura do gráfico, o objeto não é desenhado, ou desaparece.

Ou, por exemplo, o erro 4200 mostrará que o objeto que você está tentando criar já existe.

Isto é importante se você estava tentando atribuir valores diferentes ao seu objeto, os novos valores não serão atribuídos se a criação falhar.

É por isso que essas funções retornam um valor para que você possa verificar se a criação foi bem sucedida ou não.

Cabe a você verificar se a função foi bem sucedida ou não, mas um bom codificador irá verificar o resultado.

Se você escrever uma função vazia, ela não retorna nada para que você não possa verificar o resultado, analisando o que volta quando você a chama.

Mas você também pode simplesmente verificar a função em si e criar um simples alerta se algo deu errado.

Se você fizer isso, então você não verá esses alertas normalmente, mas sempre que algo der errado, ele o apontará imediatamente para o problema em si.


Para o segundo problema você pode muitas vezes omitir pelo menos alguns dos parâmetros, se você fizer isso, então a função assumirá os valores padrão.

Portanto, a menos que você precise ou queira desviar os parâmetros padrão, você os especifica.

O tamanho da fonte é um bom exemplo quando você não especifica, ele simplesmente utilizará as configurações padrão.

Também há pequenas diferenças entre certos objetos e isto pode ser visto ao analisar os parâmetros que são passados para a função.

Nem todos compartilham o mesmo conjunto de variáveis, portanto é importante observar o que pode e o que não pode ser passado como referência.

Não tenho certeza do que você quer fazer com o spreadstring talvez você possa explicar um pouco mais para que ele serve e como quer usá-lo ?

 
Marco vd Heijden:

Não tenho certeza do que você quer fazer com o spreadstring talvez você possa explicar um pouco mais para que ele serve e como quer usá-lo ?

Uso a função Label Object para Licitações, Pedidos, Planilhas e assim por diante. Tudo funciona perfeitamente, sem planilha - e eu a apaguei e reescrevi, sem bons efeitos.

Depois de usar @honest_knave método de código de erro para descrição do erro. Eu não vejo mais avisos 4200.
Como mencionei, uso'Spreadsheet' em dois lugares, #1 na função Init() - #2 na função OnTick(), mas também uso Bid, Ask in 2 lugares com 'Spreadsheet', eles não têm nenhum erro, avisos. Mas esta planilha não me dá nenhuma advertência, mas também não atualiza.

Criação absolutamente bem sucedida, sem erros, sem avisos, para quaisquer objetos, nos códigos da minha EA.

Não sei se sou um bom codificador ou o quê?! ( Eu não considero que sou codificador ou programador. ) Mas vejo resultados. Portanto, posso usar apenas o objeto Label ( sem função apenas para planilha eletrônica ).

A função de anulação retorna resultados para o que eu quero, também esta função cria objeto para valor de propagação inicial, mas não atualiza.



Não tenho certeza do que você quer fazer com o spreadstring talvez você possa explicar um pouco mais para que ele serve e como você quer usá-lo?

OK, eu só quero usá-lo assim: Só quero que ele me dê o Tamanho da Planilha ( / Valor ), quando eu abrir / adicionar minhas EA's ao gráfico, por enquanto. Então eu tentarei escrever o código para a Hora de Espalhamento Alto / Baixo tamanho ( / valores ).

Obrigado antecipadamente.

 

Bem, você também pode armazená-lo em uma matriz dupla[] e depois comparar todos eles para ver onde se encontra a menor propagação.


double spread[];
--

ArrayResize(spread,SymbolsTotal(1),0);
   for(int i=0;i<SymbolsTotal(1);i++)
     {
      spread[i]=MarketInfo(SymbolName(i,1),13);
     }
 

Quando retiro o código abaixo, então a planilha começa a funcionar perfeitamente.
Então, eu só preciso ajudar, como posso escrever um bom ( / Ótimo ) código em vez dele, por favor?

{
    Print(__FUNCTION__, ": failed to create text label! Error code = ", GetLastError());
    return(false);
}

Eu apenas mantenho abaixo do código para a função Label Object.

if( !ObjectCreate( chart_ID, name, OBJ_LABEL, sub_window, 0, 0 ) ) 

Obrigado de antemão.

( se este problema for real - espero que a MetaQuotes o conserte - porque demorou algumas horas comigo, ajude outros que são novos nesta indústria de códigos )

 

Elimine o "return(false)", mas mantenha a declaração impressa e execute seu código.

Acho que você pode receber algumas mensagens. Estou pensando que você está tentando criar o rótulo repetidamente, em vez de mudar o valor.

 
honest_knave:

Apague o "return(false)", mas mantenha a declaração impressa e execute seu código.

O QUE O BONCO!
Esta
merda** levou minhas poucas horas, não sei o que posso dizer sobre isso.
Posso removê-lo de todas as minhas funções Objetos?
Você também pode me informar como funciona?

return(false);

Apenas obrigado.

 
Max Enrik:

O QUE O BOLSO!
Posso
removê-lo de todas as minhas funções de Objetos?

Sim, mas seria melhor mantê-lo e abordar a fonte do erro.

Max Enrik:

O QUE O BEM!
Você
também pode me informar como funciona?

return(false);

O operador de retorno simplesmente diz à função para sair imediatamente. Se a função retorna um valor (no seu caso, é um bool), você também deve retornar um valor.

Você se livrará de seu erro (4200, certo?) se você verificar se o objeto existe antes de criá-lo.

Return Operator - Operators - Language Basics - MQL4 Reference
Return Operator - Operators - Language Basics - MQL4 Reference
  • docs.mql4.com
Return Operator - Operators - Language Basics - MQL4 Reference
 
honest_knave:

Obrigado por seus comentários claros.

Eu já o substituí por seu método, como o código abaixo. ( para a função Label Object )

foi - antes de seus comentários sobre a descrição do erro:

if( !ObjectCreate( chart_ID, name, OBJ_LABEL, sub_window, 0, 0 ) )
{
    Print( __FUNCTION__, ": failed to create text label! Error code = ", GetLastError() );
    return(false);
}

// which one this code gives me error no: 4200 

depois:

if( !ObjectCreate( chart_ID, name, OBJ_LABEL, sub_window, 0, 0 ) )
{
    if( errorcode !=0 ) printf( "Error %i: %s", errorcode, ErrorDescription( errorcode ) );
    return(false);
}

// prevent error no: 4200 - but was not update spreadsheet values 

Agora - e funciona perfeitamente:

if( !ObjectCreate( chart_ID, name, OBJ_LABEL, sub_window, 0, 0 ) )
{
    if( errorcode !=0 ) printf( "Error %i: %s", errorcode, ErrorDescription( errorcode ) );
    return(false); // removed this line
}

// now spreadsheet values updates, no any more error no: 4200 

Tudo de bom para você.