//+------------------------------------------------------------------+//| Criação de uma tela para desenhar um elemento//+------------------------------------------------------------------+bool CElement::CreateCanvas(conststring name,constint x,constint y,
constint x_size,constint y_size,ENUM_COLOR_FORMAT clr_format=COLOR_FORMAT_ARGB_NORMALIZE)
{
//--- Ajuste de tamanhoint xsize =(x_size<1)? 50 : x_size;
int ysize =(y_size<1)? 20 : y_size;
//--- Redefinir o último erro
::ResetLastError();
//--- Criando um objetoif(!m_canvas.CreateBitmapLabel(m_chart_id,m_subwin,name,x,y,xsize,ysize,clr_format))
{
::Print(__FUNCTION__," > Falha ao criar uma tela para desenhar o item (""+m_class_name+"): ",::GetLastError());
return(false);
}
//--- Redefinir o último erro
::ResetLastError();
//--- Obter um ponteiro para a classe baseif(!m_canvas.Attach(m_chart_id,name,clr_format))
{
::Print(__FUNCTION__," > Falha ao anexar uma tela de desenho ao gráfico: ",::GetLastError());
return(false);
}
//--- Propriedades
::ObjectSetString(m_chart_id,m_canvas.ChartObjectName(),OBJPROP_TOOLTIP,"\n");
::ObjectSetInteger(m_chart_id,m_canvas.ChartObjectName(),OBJPROP_CORNER,m_corner);
::ObjectSetInteger(m_chart_id,m_canvas.ChartObjectName(),OBJPROP_SELECTABLE,false);
//--- Todos os elementos, exceto o formulário, têm uma prioridade mais alta do que o elemento principal
Z_Order((dynamic_cast<CWindow*>(&this)!=NULL)? 0 : m_main.Z_Order()+1);
//--- Coordenadas
m_canvas.X(x);
m_canvas.Y(y);
//--- Dimensões
m_canvas.XSize(x_size);
m_canvas.YSize(y_size);
//--- Recuos a partir do ponto final
m_canvas.XGap(CalculateXGap(x));
m_canvas.YGap(CalculateYGap(y));
return(true);
}
CreateBitmapLabel - cria um recurso gráfico
Attach - lê o mesmo recurso e grava no mesmo recurso novamente.
class CMouse
{
...............
//--- (1) Retorna o número da janela onde o cursor está localizado, (2) o tempo correspondente à coordenada X, // (3) nível (preço) correspondente à coordenada Yint SubWindowNumber(void) const { return(m_subwin); }
datetimeTime(void) const { return(m_time); }
double Level(void) const { return(m_level); }
O Time and Level é usado em algum lugar? Não consegui encontrá-lo em lugar algum...
Para que é usado o SubWindowNumber?
O que quero dizer é que ChartXYToTimePrice é uma operação bastante cara para ser executada a cada movimento do mouse...
Sim, e acima de CreateBitmapLabel. Eu dei uma olhada neles. Pelo que entendi, CreateBitmapLabel cria um recurso vazio, e Attach lê o recurso (qualquer um) e o grava em m_pixels. E, como escrevi acima, criamos um recurso (CreateBitmapLabel) com o nome name, depois lemos o mesmo recurso (Attach) e novamente gravamos a leitura no mesmo m_pixels
Ou estou entendendo algo errado?
PS: Experimentalmente, sem o Attach, tudo funciona :)
Olá.
CreateBitmapLabel - cria um recurso gráfico
Attach - lê o mesmo recurso e grava no mesmo recurso novamente.
Ou estou entendendo algo errado?
Olá novamente :)
O Time and Level é usado em algum lugar? Não consegui encontrá-lo em lugar algum...
Para que é usado o SubWindowNumber?
O que quero dizer é que ChartXYToTimePrice é uma operação bastante cara para ser executada a cada movimento do mouse...
Está tudo nos comentários. Não há nada a acrescentar.
Está tudo nos comentários. Não há nada a acrescentar.
Se você se refere aos comentários no código, tudo está claro lá, mas não é disso que se trata a pergunta :)
...
O que quero dizer é que ChartXYToTimePrice é uma operação bastante cara para ser executada a cada movimento do mouse...
Para obter a coordenada relativa se a GUI não estiver na janela principal.
Para obter a coordenada relativa quando a GUI não estiver na janela principal.
Estou mais interessado em saber por que Attach? Pelo que entendi, ele repete as ações de CreateBitmapLabel
Então, talvez seja possível calcular apenas quando a GUI não estiver na janela principal? :)
Também há variantes quando a janela principal da GUI está na subjanela do gráfico e as caixas de diálogo estão na janela principal.
Estou mais interessado em saber por que o Attach? Pelo que entendi, ele repete as ações de CreateBitmapLabel
Há um código do método CCanvas::Attach():
Aqui está o código do método CCanvas::Attach():
Sim, e acima de CreateBitmapLabel. Eu dei uma olhada neles. Pelo que entendi, CreateBitmapLabel cria um recurso vazio, e Attach lê o recurso (qualquer um) e o grava em m_pixels. E, como escrevi acima, criamos um recurso (CreateBitmapLabel) com o nome name, depois lemos o mesmo recurso (Attach) e novamente gravamos a leitura no mesmo m_pixels
Ou estou entendendo algo errado?
PS: Experimentalmente, sem o Attach, tudo funciona :)
...
PS: Experimentalmente, sem o Attach, tudo funciona :)
Sério? Então houve algumas mudanças novamente. Algo não funcionava antes, com certeza.
E depois de excluir a GUI do gráfico, os objetos são excluídos?
É mesmo? Então houve outra mudança. Algo definitivamente não estava funcionando antes.
E depois de remover a GUI do gráfico, os objetos são excluídos?
Tudo parece estar limpo :)