Обсуждение статьи "Графические интерфейсы VI: Элементы "Чекбокс", "Поле ввода" и их смешанные типы (Глава 1)" - страница 2
Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
...
Спасибо за подсказку!
Я добавлю эту возможность. Следите за обновлениями будущих статей в этой серии.
в ваших примерах всегда присутствует вывод id, 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());
}
получаем следующее
TestLibrary (NZDUSD,H1) CProgram::OnEvent > id: 1020; lparam: 12; dparam: -1.0; sparam: Spin Edit 1:
id - индификатор элемента
lparam - ?
dparam - ?
sparam - название элемента
мы рассматриваем поле ввода - конечно же интересно получить введенное значение, как это сделать максимально быстро?
в ваших примерах всегда присутствует вывод id, lparam, dparam, sparam.
...
id - индификатор элемента
lparam - ?
dparam - ?
sparam - название элемента
Элементы управления генерируют сообщения и параметры в большинстве случаев означают следующее:
Я подготовлю потом таблицу, где будет показан набор параметров события от каждого элемента.
...
мы рассматриваем поле ввода - конечно же интересно получить введенное значение, как это сделать максимально быстро?
Как раз с помощью метода CSpinEdit::GetValue() и можно получить текущее значение в поле ввода.
Пример:
if(id==CHARTEVENT_CUSTOM+ON_END_EDIT)
{
//--- Если идентификатор элемента от первого поля ввода
if(lparam==m_spin_edit1.Id())
{
//--- Выведем его значение
Print("m_spin_edit1.GetValue(): ",m_spin_edit1.GetValue());
}
//---
return;
}
а если мы не знаем название или у нас сотня полей, может есть метод по id посмотреть что там или что то типа this.GetValue()
Так у каждого элемента как раз и есть свой уникальный идентификатор элемента.
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());}
...
}
я имел ввиду чтобы не писать такой код, может есть смысл сделать
if(id==CHARTEVENT_CUSTOM+ON_END_EDIT)
{
Print(GetValue(lparam));
или
Print(this.GetValue());
}
но у меня полей не много, мне и первый вариант подойдет
Pavel Kolchin:
...
я имел ввиду чтобы не писать такой код, может есть смысл сделать
if(id==CHARTEVENT_CUSTOM+ON_END_EDIT)
{
Print(GetValue(lparam));
или
Print(this.GetValue());
}
//| ChartEvent function |
//+------------------------------------------------------------------+
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:
Простая задачка. Изменить цвет лейбла чекбокса при нажатии на чекбокс. Стоит галочка - зеленый текст, не стоит - красный. Не работает. Снимаю становится синей, ставлю галочку всё равно синий.Сейчас можно установить цвета для разных состояний только до установки элемента (пример ниже):
//| Создаёт чекбокс 1 |
//+------------------------------------------------------------------+
bool CProgram::CreateCheckBox1(const int x_gap,const int y_gap,string text)
{
//--- Сохраним указатель на окно
m_checkbox1.WindowPointer(m_window1);
//--- Установим свойства перед созданием
m_checkbox1.XSize(90);
m_checkbox1.YSize(18);
m_checkbox1.LabelColor(clrGreen);
m_checkbox1.LabelColorOff(clrRed);
m_checkbox1.LabelColorHover(clrCornflowerBlue);
m_checkbox1.LabelColorLocked(clrSilver);
//--- Создадим элемент управления
if(!m_checkbox1.CreateCheckBox(m_chart_id,m_subwin,text,x_gap,y_gap))
return(false);
//--- Добавим объект в общий массив групп объектов
CWndContainer::AddToElementsArray(0,m_checkbox1);
return(true);
}
//| ChartEvent function |
//+------------------------------------------------------------------+
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);
}
}
//+------------------------------------------------------------------+
А если так?
{
if(program.m_checkbox.CheckButtonState()) program.m_checkbox.LabelColor(clrGreen);
else program.m_checkbox.LabelColor(clrRed);
}