Perguntas de um "boneco" - página 32

 
tol64:
Passo estas propriedades dos objectos explicitamente (ANCHOR_RIGHT_UPPER, CORNER_RIGHT_UPPER):

Acho que já o tenho. Mostrou uma função de amostra, não uma peça de código funcional?

É isso, estou a tirar o fim-de-semana de folga. Desculpe a interrupção :)

 

Uma versão melhor desta função, mas algo pode ser afinado (em geral, implementaria tudo isto como um objecto, ou vários objectos).

Embora, pode colocar a função numa biblioteca e utilizá-la como quiser.

bool Create_BMP_Label(long   chart_id,  // id графика
                      string bmp_nm,    // имя объекта
                      string bmp_path,  // путь к обекту
                      long   anchor,    // точка привязки
                      long   corner,    // угол привязки
                      int    x_dist,    // координата по шкале X
                      int    y_dist)    // координата по шкале Y
{
//----------------------------------------------------------------------------//
//Work variables
bool Result = true; //Returned importance
//----------------------------------------------------------------------------//

ResetLastError();

Result =  ObjectCreate(chart_id,bmp_nm,OBJ_BITMAP_LABEL,0,0,0); // создание объекта

  if(Result)
  {
  ObjectSetString(chart_id,bmp_nm,OBJPROP_BMPFILE,0,bmp_path);   // BMP файл
  ObjectSetInteger(chart_id,bmp_nm,OBJPROP_ANCHOR,anchor);       // установка точки привязки
  ObjectSetInteger(chart_id,bmp_nm,OBJPROP_CORNER,corner);       // установка угола привязки
  ObjectSetInteger(chart_id,bmp_nm,OBJPROP_XDISTANCE,x_dist);    // установка координаты X
  ObjectSetInteger(chart_id,bmp_nm,OBJPROP_YDISTANCE,y_dist);    // установка координаты Y
  ObjectSetInteger(chart_id,bmp_nm,OBJPROP_SELECTABLE,false);    // нельзя выделить объект, если FALSE
  ObjectSetString(chart_id,bmp_nm,OBJPROP_TOOLTIP,"\n");         // нет всплывающей подсказки, если "\n"
  }
//The execution errors checking
  if(GetLastError()!=0)
  {
  Result = false;
  }  
//----------------------------------------------------------------------------//
return(Result);
//----------------------------------------------------------------------------//
}
 
Interesting:

Uma versão melhor desta função, mas algo pode ser afinado (em geral, implementaria tudo isto como um objecto, ou vários objectos).

Embora, pode colocar a função numa biblioteca e utilizá-la como quiser.



É agradável)). E sob a forma de um objecto, qual é a vantagem, se se tomar esta função como exemplo? Até agora, tenho implementado tudo sob a forma de funções. Talvez esteja a ir na direcção errada e tenha de refazer tudo mais tarde?
 
tol64:
(Isso é bom.)). Qual é a vantagem de utilizar esta função como objecto? Por agora, implementei tudo sob a forma de funções. Talvez eu siga o caminho errado e tenha de refazer tudo mais tarde?

Bem, porquê todos eles. Uma função poderia ser tornada mais universal e embalada em, digamos, uma biblioteca.

As aulas também têm vantagens, mas este é um truque relacionado com o OOP (a tarefa principal será utilizar o código em vários projectos sem pensar na implementação).

Exemplo

Como vejo na imagem do ecrã, tem algo como um painel informativo (talvez alguma outra funcionalidade), por isso pode considerar este painel como um número de objectos não relacionados (gráficos, texto, etc.), ou pode vê-los como objectos ligados por uma classe. Assim, se alterar um parâmetro "input" "Corner", esta alteração afectará tudo o que está relacionado com o painel.

Ao especificar um gráfico para a classe, indicamos este gráfico também para todos os objectos controlados pela classe.

 
Interesting:

Bem, porquê todos eles. Uma função poderia ser tornada mais universal e embalada em, digamos, uma biblioteca.

As aulas também têm vantagens, mas estas são truques do OOP (a tarefa principal será utilizar o código em vários projectos sem pensar na implementação).

Exemplo

Como vejo na imagem do ecrã, tem algo como um painel informativo (talvez alguma outra funcionalidade), por isso pode considerar este painel como um número de objectos não relacionados (gráficos, texto, etc.), ou pode vê-los como objectos ligados por uma classe. Assim, se alterar um parâmetro "input" "Corner", esta alteração afectará tudo o que se relaciona com o painel.

Tenho o mesmo problema com a ligação ao gráfico. Uma vez que indicamos um gráfico à classe, indicamos este gráfico e todos os objectos que esta classe controla.

Tem uma capacidade muito notável. Explicar tudo muito claramente em algumas linhas. Obrigado. ))

Depois de me familiarizar com todas as funções de que preciso e praticar a sua utilização, começarei a estudar as estruturas, as aulas e o OOP. É uma pena que a natureza por vezes me obrigue a ir para a cama. Tenho de rastejar para longe do computador. ))

 

Eu escrevi este guião:

bool del;

void OnStart()
  {
   long chart_id  = ChartID();
   int amount_obj = ObjectsTotal(chart_id,0,OBJ_LABEL);
   int i;
   
   Print("Всего объектов типа OBJ_LABEL: ",amount_obj);
   
   for(i=0; i<amount_obj; i++)
      {
       string name_obj = ObjectName(chart_id,i,0,OBJ_LABEL);
       del = ObjectDelete(chart_id,name_obj);
       
       if(del == false || GetLastError() != 0) Print(ErrorDescription(GetLastError()),", ",GetLastError());
       
       ChartRedraw();
      }
  }

Tarefa: remover todos os objectos do tipo OBJ_LABEL do gráfico. Mas alguns são pulados e permanecem. Um erro é escrito no livro de bordo:

Por favor, digam-me como fazê-lo correctamente.

Документация по MQL5: Стандартные константы, перечисления и структуры / Константы объектов / Типы объектов
Документация по MQL5: Стандартные константы, перечисления и структуры / Константы объектов / Типы объектов
  • www.mql5.com
Стандартные константы, перечисления и структуры / Константы объектов / Типы объектов - Документация по MQL5
 
tol64:

Escrevi um tal guião:

A tarefa: eliminar todos os objectos do tipo OBJ_LABEL de um gráfico. Mas alguns deles são ignorados e permanecem. Um erro é escrito no registo:

Por favor, aconselhar como fazê-lo correctamente.

Parece-me que o laço deve ser descendente e não ascendente, embora eu não tenha entrado em detalhes (mas desde a MQL4 a eliminação de ordens tem sido feita num laço descendente).

O truque é que se começar a apagar de grandes índices então a lista original não mudará, excepto para apagar o item seleccionado (da cauda da lista)...

 
Interesting:

Parece-me que o ciclo deveria ser descendente em vez de ascendente, embora não tenha entrado em detalhes (desde a MQL4, as ordens são eliminadas num ciclo descendente).

O truque é que se começarmos a apagar de um grande índice então a lista original não mudará, excepto para apagar um item seleccionado (da cauda da lista)...

Tentei começar o ciclo a partir do fim:

   for(i=amount_obj-1; i>=amount_obj; i--)

Agora não há erros no registo, mas nem um único objecto é apagado).

 
tol64:

Tentou iniciar o ciclo a partir do fim:

Agora não há erros no livro de bordo, mas também não são apagados objectos).

i>=0
 
tol64:

Em quádruplolet, utilizo esta abordagem: todos os objectos são grupos, a parte do nome é comum no grupo.

Eliminação

// удаление по маске всех объектов индюка
   for (int i = ObjectsTotal() - 1; i >= 0; i--)
    {
      string name = ObjectName(i);
      if (StringFind(name, "sig_nal") == 0)
      {
         ObjectDelete(name);
      }
    }

para diferentes grupos

// удаление по маске всех объектов индюка
   for (int i = ObjectsTotal() - 1; i >= 0; i--)
   {
      string name = ObjectName(i);
      if (StringFind(name, "signal") == 0)
      {
         ObjectDelete(name);
      }
      else if (StringFind(name, "Asignal") == 0)
      {
         ObjectDelete(name);
      }
   }

e aqui função IgorM

***

( só por precaução ) Ordenação por ObjectName(não sei se é relevante para 5)

[ВНИМАНИЕ, ТЕМА ЗАКРЫТА!] Любой вопрос новичка, чтоб не захламлять форум. Профи, не проходите мимо. Без вас никуда. - MQL4 форум
  • www.mql5.com
[ВНИМАНИЕ, ТЕМА ЗАКРЫТА!] Любой вопрос новичка, чтоб не захламлять форум. Профи, не проходите мимо. Без вас никуда. - MQL4 форум
Razão: