Discussão do artigo "Interfaces Gráficas X: Novos recursos para a tabela Renderizada (build 9)" - página 2

 
Artyom Trishkin:
Sim, ele também funciona para mim, mas com a biblioteca antiga.

Faça isso com a nova Build6,7,8 ou 9, por favor.
 
Anatoli Kazharski:
Use o MetaTrader 5. A versão do MetaTrader 4 não é mais suportada e não posso aconselhá-lo sobre nada.
Obrigado por sua resposta. (n.b. Perguntei se funciona com a nova versão)

Está tudo bem?
//+------------------------------------------------------------------+
//| Создаёт общую площадь                                            |
//+------------------------------------------------------------------+
bool CColorPicker::CreateArea(void)
  {
//--- Формирование имени объекта
   string name=CElementBase::ProgramName()+"_color_picker_bg_"+(string)CElementBase::Id();
//--- Координаты
   int x=CElementBase::X();
   int y=CElementBase::Y();
//--- Создать объект
   if(!m_area.Create(m_chart_id,name,m_subwin,x,y,m_x_size,m_y_size))
      return(false);
//--- Свойства
   m_area.BackColor(m_area_color);
   m_area.Color(m_area_border_color);
   m_area.BorderType(BORDER_FLAT);
   m_area.Corner(m_corner);
   m_area.Selectable(false);
   m_area.Z_Order(m_area_zorder);
   m_area.Tooltip("\n");
//--- Координаты
   m_canvas.X(x);
   m_canvas.Y(y);
//--- Размеры
   m_canvas.XSize(m_x_size);
   m_canvas.YSize(m_y_size);

//--- Отступы от крайней точки
   m_area.XGap(CElement::CalculateXGap(x));
   m_area.YGap(CElement::CalculateYGap(y));
//--- Сохраним указатель объекта
   CElementBase::AddToArray(m_area);
   return(true);
  }


 
stt:
Obrigado por sua resposta. (Obs.: perguntei se funciona com a nova compilação)

Está tudo bem?
//+------------------------------------------------------------------+
//| Создаёт общую площадь                                            |
//+------------------------------------------------------------------+
bool CColorPicker::CreateArea(void)
  {
//--- Формирование имени объекта
   string name=CElementBase::ProgramName()+"_color_picker_bg_"+(string)CElementBase::Id();
//--- Координаты
   int x=CElementBase::X();
   int y=CElementBase::Y();
//--- Создать объект
   if(!m_area.Create(m_chart_id,name,m_subwin,x,y,m_x_size,m_y_size))
      return(false);
//--- Свойства
   m_area.BackColor(m_area_color);
   m_area.Color(m_area_border_color);
   m_area.BorderType(BORDER_FLAT);
   m_area.Corner(m_corner);
   m_area.Selectable(false);
   m_area.Z_Order(m_area_zorder);
   m_area.Tooltip("\n");
//--- Координаты
   m_canvas.X(x);
   m_canvas.Y(y);
//--- Размеры
   m_canvas.XSize(m_x_size);
   m_canvas.YSize(m_y_size);

//--- Отступы от крайней точки
   m_area.XGap(CElement::CalculateXGap(x));
   m_area.YGap(CElement::CalculateYGap(y));
//--- Сохраним указатель объекта
   CElementBase::AddToArray(m_area);
   return(true);
  }


Nas versões mais recentes da biblioteca, o cálculo das coordenadas do objeto era diferente. Você precisa usar as novas regras para especificar as coordenadas do objeto ou em seus próprios métodos para recalcular as coordenadas da maneira usual .

Por exemplo, você precisa:

Em WndEvents.mqh, na área pública, crie um novo método:
   //--- Cria uma paleta de cores para a seleção de cores
   bool              CreateColorPicker(CColorPicker &color_picker, CWindow &wnd_pointer, int wnd_index,int x,int y);
Fora do corpo da classe, você cria um corpo de método:
//+------------------------------------------------------------------+
//|| Cria uma paleta de cores para selecionar uma cor
//+------------------------------------------------------------------+
bool CWndEvents::CreateColorPicker(CColorPicker &color_picker, CWindow &wnd_pointer, int wnd_index, int x, int y)
  {
//--- recalcular as coordenadas
   int x_gap=x-wnd_pointer.X();
   int y_gap=y-wnd_pointer.Y();
//--- Salvar o ponteiro da janela
   color_picker.WindowPointer(wnd_pointer);
//--- Criando um elemento
   if(!color_picker.CreateColorPicker(m_chart_id,m_subwin,x_gap,y_gap))
      return(false);
//--- Adicione um ponteiro ao elemento na base
   CWndContainer::AddToElementsArray(wnd_index,color_picker);
   return(true);
  }
//+------------------------------------------------------------------+

E em CProgram.mqh, crie seu ColorPicker:
   //--- Seletor de cores
   x=m_window_main.X2()+1;
   y=m_window_main.Y();
   if(!CreateColorPicker(m_color_picker,m_window_main,m_window_main_index,x,y))
      return(false);
Veja este exemplo:


 
stt:
...
Eu sei que você não suporta a versão MQL4, mas acho que a MQL4 não é o motivo.
Por favor, mostre capturas de tela ou vídeos mostrando o problema e anexe arquivos de teste (MetaTrader 5) à mensagem.
 
Artyom Trishkin:
Nas versões mais recentes da biblioteca, o cálculo das coordenadas do objeto era diferente. Você precisa usar as novas regras para especificar as coordenadas do objeto ou usar seus próprios métodos para recalcular as coordenadas da maneira usual .
......

Obrigado pelo tutorial. Verifiquei e alterei o cálculo das coordenadas . O ColorPicker funciona bem em meu ambiente , mas somente quando exibido na janela principal (W_MAIN).

Você poderia verificar isso na janela W_DIALOG?

O ColorPicker dessa biblioteca é uma ferramenta muito poderosa para o ajuste fino de cores personalizadas, mas eu me pergunto se uma simples tabela de cores não seria mais conveniente para o uso diário.
 
Obrigado pelo seu empenho!!! É possível classificar por coluna e excluir linhas nesta versão?
 
stt:
Obrigado pelo tutorial. Verifiquei e alterei o cálculo de coordenadas . O ColorPicker funciona bem em meu ambiente , mas somente quando exibido na janela principal (W_MAIN).

Você poderia verificar isso na janela W_DIALOG?

O ColorPicker dessa biblioteca é uma ferramenta muito poderosa para o ajuste fino de cores personalizadas, mas gostaria de saber se uma simples tabela de cores seria mais conveniente para o uso diário.
Por favor. Dê uma olhada nisso:

 
dantetemp:
Obrigado pelo seu trabalho!!! A classificação por coluna e a exclusão de linhas são possíveis nesta versão?
Ainda não. Mas será possível em breve.
 
dantetemp:
obrigado pelo seu trabalho!!! a classificação por coluna e a exclusão de linhas são possíveis nesta versão?
@dantetemp, isso já é possível. Faça download da versão mais recente da biblioteca neste artigo: Graphical Interfaces X: Sorting, Table Reconstruction and Cell Controls (build 11)
 

Boa tarde. Tenho a seguinte dúvida: há um campo de entrada SpinEdit:

bool CProgram::CreateSpinEdit_TradingLot(const string text)
{
//--- Salvar o ponteiro da janela
   m_spin_edit_Trading_lot.WindowPointer(m_window);
   m_tabs.AddToElementsArray(1,m_spin_edit_Trading_lot);
//--- Coordenadas
   int x=m_window.X()+SPINEDIT14_GAP_X;
   int y=m_window.Y()+SPINEDIT14_GAP_Y;
//--- Valor
   double v=(m_spin_edit_Trading_lot.GetValue()==WRONG_VALUE) ? 0.01 : m_spin_edit_Trading_lot.GetValue();
//--- Definir propriedades antes da criação
   m_spin_edit_Trading_lot.XSize(90);
   m_spin_edit_Trading_lot.YSize(18);
   m_spin_edit_Trading_lot.EditXSize(50);
   m_spin_edit_Trading_lot.MaxValue(100);
   m_spin_edit_Trading_lot.MinValue(0.01);
   m_spin_edit_Trading_lot.StepValue(0.01);
   m_spin_edit_Trading_lot.SetDigits(2);
   m_spin_edit_Trading_lot.SetValue(v);
   m_spin_edit_Trading_lot.ResetMode(false);
   m_spin_edit_Trading_lot.AreaColor(clrWhite);
//--- Criar um controle
   if(!m_spin_edit_Trading_lot.CreateSpinEdit(m_chart_id,m_subwin,text,x,y))
      return(false);
//--- Adicione o objeto à matriz comum de grupos de objetos
   CWndContainer::AddToElementsArray(0,m_spin_edit_Trading_lot);
   return(true);
}


Há um manipulador de eventos:

void CProgram::OnEventSpinEdit_TradingLot(void)
{
   TradingLot = m_spin_edit_Trading_lot.GetValue();
   Print("TradingLot = " + NormalizeDouble(TradingLot,2));
}

E mesmo depois da função NormalizeDouble , obtenho esses valores quando clico no incremento/decremento à direita do campo de entrada:


Ao digitar pelo teclado, tudo está correto.

Qual pode ser o motivo?