Discussão do artigo "Interfaces Gráficas VI: Os Controles Caixa de Seleção, Campo de Edição e seus Tipos Combinados (Capítulo 1)" - página 2
Você está perdendo oportunidades de negociação:
- Aplicativos de negociação gratuitos
- 8 000+ sinais para cópia
- Notícias econômicas para análise dos mercados financeiros
Registro
Login
Você concorda com a política do site e com os termos de uso
Se você não tem uma conta, por favor registre-se
...
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);
}