Em seus exemplos, sempre há saída de id, lparam, dparam e sparam.
...
id - identificador de elemento
lparam - ?
dparam - ?
sparam - nome do elemento
Os controles geram mensagens e parâmetros que, na maioria dos casos, significam o seguinte:
id - identificador de evento.
lparam - identificador do elemento.
dparam - índice do elemento.
sparam - texto exibido especificado pelo usuário da biblioteca (nome do elemento).
Mais tarde, prepararei uma tabela mostrando o conjunto de parâmetros de evento de cada elemento.
Pavel Kolchin:
...
Consideramos um campo de entrada - é claro que é interessante obter o valor inserido, mas como fazer isso o mais rápido possível?
Basta usar o método CSpinEdit::GetValue() para obter o valor atual no campo de entrada.
Exemplo:
//--- Chegou um evento do campo de entrada if(id==CHARTEVENT_CUSTOM+ON_END_EDIT) { //--- Se o ID do item for do primeiro campo de entrada if(lparam==m_spin_edit1.Id()) { //--- Emite seu valor Print("m_spin_edit1.GetValue(): ",m_spin_edit1.GetValue()); } //--- return; }
Tarefa simples. Alterar a cor do rótulo da caixa de seleção ao clicar na caixa de seleção. Marcada - texto verde, desmarcada - vermelho. Isso não funciona. Se desmarcada, ela fica azul, se marcada, continua azul.
Tarefa simples. Alterar a cor do rótulo da caixa de seleção ao clicar na caixa de seleção. Marcada - texto verde, desmarcada - vermelho. Isso não funciona. Se desmarcada, ela fica azul, se marcada, continua azul.
Agora você pode definir cores para diferentes estados somente antes de o item ser instalado(exemplo abaixo):
//+------------------------------------------------------------------+ //| Cria a caixa de seleção 1| //+------------------------------------------------------------------+ bool CProgram::CreateCheckBox1(constint x_gap,constint y_gap,string text) { //--- Salvar o ponteiro da janela m_checkbox1.WindowPointer(m_window1); //--- Definir propriedades antes da criação m_checkbox1.XSize(90); m_checkbox1.YSize(18); m_checkbox1.LabelColor(clrGreen); m_checkbox1.LabelColorOff(clrRed); m_checkbox1.LabelColorHover(clrCornflowerBlue); m_checkbox1.LabelColorLocked(clrSilver); //--- Criar um controle if(!m_checkbox1.CreateCheckBox(m_chart_id,m_subwin,text,x_gap,y_gap)) return(false); //--- Adicione o objeto à matriz comum de grupos de objetos CWndContainer::AddToElementsArray(0,m_checkbox1); return(true); }
Tarefa simples. Alterar a cor do rótulo da caixa de seleção ao clicar na caixa de seleção. Marcada - texto verde, desmarcada - vermelho. Isso não funciona. Se não estiver marcada, ela fica azul, se estiver marcada, continua azul.
...
Obrigado pela dica!
Vou adicionar esse recurso. Fique atento às atualizações dos futuros artigos desta série.
Em seus exemplos, sempre há id de saída, lparam, dparam, sparam.
if(id==CHARTEVENT_CUSTOM+ON_END_EDIT)
{
::Print(__FUNCTION__," > id: ",id,"; lparam: ",lparam,"; dparam: ",dparam,"; sparam: ",sparam);
//Print(m_spin_edit1.GetValue());
}
obtemos o seguinte
TestLibrary (NZDUSD,H1) CProgram::OnEvent > id: 1020; lparam: 12; dparam: -1.0; sparam: Spin Edit 1:
id - identificador de elemento
lparam - ?
dparam - ?
sparam - nome do elemento
Estamos considerando um campo de entrada - é claro que é interessante obter o valor inserido, mas como fazer isso o mais rápido possível?
Em seus exemplos, sempre há saída de id, lparam, dparam e sparam.
...
id - identificador de elemento
lparam - ?
dparam - ?
sparam - nome do elemento
Os controles geram mensagens e parâmetros que, na maioria dos casos, significam o seguinte:
Mais tarde, prepararei uma tabela mostrando o conjunto de parâmetros de evento de cada elemento.
...
Consideramos um campo de entrada - é claro que é interessante obter o valor inserido, mas como fazer isso o mais rápido possível?
Basta usar o método CSpinEdit::GetValue() para obter o valor atual no campo de entrada.
Exemplo:
if(id==CHARTEVENT_CUSTOM+ON_END_EDIT)
{
//--- Se o ID do item for do primeiro campo de entrada
if(lparam==m_spin_edit1.Id())
{
//--- Emite seu valor
Print("m_spin_edit1.GetValue(): ",m_spin_edit1.GetValue());
}
//---
return;
}
E se não soubermos o nome ou se tivermos cem campos, talvez haja um método por id para ver o que há lá ou algo como this.GetValue().
Assim, cada elemento tem seu próprio identificador de elemento exclusivo.
if(id==CHARTEVENT_CUSTOM+ON_END_EDIT)
{
if(lparam==m_spin_edit1.Id()){Print(m_spin_edit1.GetValue());}
if(lparam==m_spin_edit2.Id()){Print(m_spin_edit2.GetValue());}
if(lparam==m_spin_edit3.Id()){Print(m_spin_edit3.GetValue());}
if(lparam==m_spin_edit4.Id()){Print(m_spin_edit4.GetValue());}
if(lparam==m_spin_edit5.Id()){Print(m_spin_edit5.GetValue());}
if(lparam==m_spin_edit6.Id()){Print(m_spin_edit6.GetValue());}
if(lparam==m_spin_edit7.Id()){Print(m_spin_edit7.GetValue());}
if(lparam==m_spin_edit8.Id()){Print(m_spin_edit8.GetValue());}
if(lparam==m_spin_edit9.Id()){Print(m_spin_edit9.GetValue());}
...
}
Eu pretendia não escrever esse código, mas talvez faça sentido fazê-lo.
if(id==CHARTEVENT_CUSTOM+ON_END_EDIT)
{
Print(GetValue(lparam));
или
Print(this.GetValue());
}
Mas como não tenho muitos campos, a primeira opção é adequada para mim.
Pavel Kolchin:
...
Eu pretendia não escrever esse código, mas talvez faça sentido fazê-lo.
if(id==CHARTEVENT_CUSTOM+ON_END_EDIT)
{
Print(GetValue(lparam));
или
Print(this.GetValue());
}
//| Função ChartEvent|
//+------------------------------------------------------------------+
void OnChartEvent(const int id,
const long &lparam,
const double &dparam,
const string &sparam)
{
program.ChartEvent(id,lparam,dparam,sparam);
if(lparam==program.m_checkbox.Id())
if(program.m_checkbox.CheckButtonState())
{
program.m_checkbox.LabelColor(clrGreen);
}
else
{
program.m_checkbox.LabelColor(clrRed);
}
}
//+------------------------------------------------------------------+
Alexander Fedosov:
Tarefa simples. Alterar a cor do rótulo da caixa de seleção ao clicar na caixa de seleção. Marcada - texto verde, desmarcada - vermelho. Isso não funciona. Se desmarcada, ela fica azul, se marcada, continua azul.Agora você pode definir cores para diferentes estados somente antes de o item ser instalado(exemplo abaixo):
//| Cria a caixa de seleção 1|
//+------------------------------------------------------------------+
bool CProgram::CreateCheckBox1(const int x_gap,const int y_gap,string text)
{
//--- Salvar o ponteiro da janela
m_checkbox1.WindowPointer(m_window1);
//--- Definir propriedades antes da criação
m_checkbox1.XSize(90);
m_checkbox1.YSize(18);
m_checkbox1.LabelColor(clrGreen);
m_checkbox1.LabelColorOff(clrRed);
m_checkbox1.LabelColorHover(clrCornflowerBlue);
m_checkbox1.LabelColorLocked(clrSilver);
//--- Criar um controle
if(!m_checkbox1.CreateCheckBox(m_chart_id,m_subwin,text,x_gap,y_gap))
return(false);
//--- Adicione o objeto à matriz comum de grupos de objetos
CWndContainer::AddToElementsArray(0,m_checkbox1);
return(true);
}
//| Função ChartEvent|
//+------------------------------------------------------------------+
void OnChartEvent(const int id,
const long &lparam,
const double &dparam,
const string &sparam)
{
program.ChartEvent(id,lparam,dparam,sparam);
if(lparam==program.m_checkbox.Id())
if(program.m_checkbox.CheckButtonState())
{
program.m_checkbox.LabelColor(clrGreen);
}
else
{
program.m_checkbox.LabelColor(clrRed);
}
}
//+------------------------------------------------------------------+
O que você acha disso?
{
if(program.m_checkbox.CheckButtonState()) program.m_checkbox.LabelColor(clrGreen);
else program.m_checkbox.LabelColor(clrRed);
}