Обсуждение статьи "Графические интерфейсы VI: Элементы "Чекбокс", "Поле ввода" и их смешанные типы (Глава 1)" - страница 2

 
Anatoli Kazharski:
Так у каждого элемента как раз и есть свой уникальный идентификатор элемента.


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());

}

У меня пока нет решения, как это сделать для всех get-методов всех элементов. Но я подумаю над этим.
 
//+------------------------------------------------------------------+
//| 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);
  }
 
Alexander Fedosov:
//+------------------------------------------------------------------+
//| 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(lparam==program.m_checkbox.Id())
     {
      if(program.m_checkbox.CheckButtonState()) program.m_checkbox.LabelColor(clrGreen);
      else program.m_checkbox.LabelColor(clrRed);
     }
 
А есть возможность получить значение типа string из элемента CSpinEdit ? Или возможно для этого есть другой (элемент) класс ?
 
Evgenii Bakai:
А есть возможность получить значение типа string из элемента CSpinEdit ? Или возможно для этого есть другой (элемент) класс ?
Получайте значение с помощью метода GetValue() и преобразуйте его в тип string.
 
Anatoli Kazharski:
Получайте значение с помощью метода GetValue() и преобразуйте его в тип string.
Толь, что-то долго обновлений нету. Не из-за запрета кастинга структур и ввода юнионов?
 
Artyom Trishkin:
Толь, что-то долго обновлений нету. Не из-за запрета кастинга структур и ввода юнионов?

Не увидел, как бы это могло помешать дальнейшему развитию библиотеки. У меня это событие прошло незамеченным. 

Сейчас идёт большая работа по оптимизации кода. Общий объём сократится приблизительно на 30%. Общие свойства элементов будут вынесены в базовые классы. Файлов станет меньше, так как некоторые элементы будут объединены в один. Без потери функционала, так как можно будет выбирать режим. Будет существенно уменьшено количество графических объектов. Теперь будет только один тип объектов - bitmap label, так как все элементы будут рисоваться. Сложные составные элементы будут теперь собираться из готовых элементов, а не графических объектов-примитивов. 

В общем, много всего нужно пересобрать и протестировать прежде, чем представлять новую версию. Не могу сказать, когда будет следующая статья.

 
Anatoli Kazharski:

Не увидел, как бы это могло помешать дальнейшему развитию библиотеки. У меня это событие прошло незамеченным. 

Сейчас идёт большая работа по оптимизации кода. Общий объём сократится приблизительно на 30%. Общие свойства элементов будут вынесены в базовые классы. Файлов станет меньше, так как некоторые элементы будут объединены в один. Без потери функционала, так как можно будет выбирать режим. Будет существенно уменьшено количество графических объектов. Теперь будет только один тип объектов - bitmap label, так как все элементы будут рисоваться. Сложные составные элементы будут теперь собираться из готовых элементов, а не графических объектов-примитивов. 

В общем, много всего нужно пересобрать и протестировать прежде, чем представлять новую версию. Не могу сказать, когда будет следующая статья.

Ну..., главное, что идёт работа, и это здорово. А то подумалось, что может там проблемы с совместимостью всплыли.
Причина обращения: