Обсуждение статьи "Графические интерфейсы XI: Интеграция графической стандартной библиотеки (build 16)" - страница 3

 

себе сделал, может автору пригодятся.

 

Не могу заставить меняться картинку в ячейке-кнопке. Индекс изображения меняется без проблем. Но поменять само изображение не получается.

Как это делать? Какие методы перерисовывают кнопку? 

Если использовать метод Update() для экземпляра CTable - программа компилируется, но не запускается, пишет "Invalid EX5 file (4)".

Сделал публичным метод Draw() из CTable - не перерисовывает.

Попробовал метод Reset() из CWindow - судя по всему, окно перерисовал, т.к. оно стало тусклым. Но кнопочки не поменялись. 


Кто нибудь успешно сделал ячейки-кнопки?

 
Artem Virskiy:

Если использовать метод Update() для экземпляра CTable - программа компилируется, но не запускается, пишет "Invalid EX5 file (4)".


Кто нибудь успешно сделал ячейки-кнопки?

Ячейки-кнопки делал, но менять картинку задачи небыло...

У метода Update() по-умолчанию перерисовка установлена false. С перерисовкой нужно использовать Update(true)

 

Добавил в библиотеке одну строчку и заработало! Ура, товарищи!

Желтым выделено что добавил. Куда добавил:

void CTable::DrawImage(const int column_index,const int row_index)

  {

//--- Расчёт координат

   int x =m_columns[column_index].m_x+m_columns[column_index].m_image_x_offset;

   int y =m_rows[row_index].m_y+m_columns[column_index].m_image_y_offset;

//--- Выбранная картинка в ячейке и её размеры

   int  selected_image =m_columns[column_index].m_rows[row_index].m_selected_image;

   uint image_height   =m_columns[column_index].m_rows[row_index].m_images[selected_image].Height();

   uint image_width    =m_columns[column_index].m_rows[row_index].m_images[selected_image].Width();

//--- Рисуем

   for(uint ly=0,i=0; ly<image_height; ly++)

     {

      for(uint lx=0; lx<image_width; lx++,i++)

        {

         //--- Если нет цвета, перейти к следующему пикселю

         if(m_columns[column_index].m_rows[row_index].m_images[selected_image].Data(i)<1)

            continue;

         //--- Получаем цвет нижнего слоя (фона ячейки) и цвет указанного пикселя картинки

         uint background  =(row_index==m_selected_item)? m_selected_row_color : m_canvas.PixelGet(x+lx,y+ly);

         uint pixel_color =m_columns[column_index].m_rows[row_index].m_images[selected_image].Data(i);

         //--- Смешиваем цвета

         uint foreground=::ColorToARGB(m_clr.BlendColors(background,pixel_color));

         //--- Рисуем пиксель наслаиваемого изображения

         m_table.PixelSet(x+lx,y+ly,foreground);

        }

     }

   m_table.Update(true);

  }


 
Oleksii Chepurnyi:

Ячейки-кнопки делал, но менять картинку задачи небыло...

У метода Update() по-умолчанию перерисовка установлена false. С перерисовкой нужно использовать Update(true)


Так это ясный перец!

Я всегда за правду, когда мне fasle я сразу чую :)

 

как изменить пункты комбобокса после его создания?

 

а у меня такая проблема, когда выбираю пункт combobox, то не нажимается любой item на CheckBoxList

 
CE 2 10:53:44.305 BreakEvenPending (CADJPY,M15) zero divide in 'Curve.mqh' (693,9)
 
Предоставляйте краткие примеры для воспроизведения проблемы, если хотите, чтобы Вам помогли. 
 

как сместить вправо надпись с иконкой вместе:

иконка отдельно двигается методом IconXGap(...), а надпись не нашел как

Причина обращения: