Обсуждение статьи "Улучшаем работу с Панелями: добавляем прозрачность, меняем цвет фона и наследуемся от CAppDialog/CWndClient" - страница 2

 

Владимир, спасибо за статьи, очень полезный материал. У меня может быть ламерский вопрос...

Есть объект типа CBmpButton - кнопка с изображением. Так вот, само изображение кнопки выступает тут в качестве ресурса. Как получить доступ к его свойствам? Или нельзя?

Пример из Документации. 

Там я поиграл с методом CControlsDialog::CreateBmpButton1():

//+------------------------------------------------------------------+
//| Create the "BmpButton1" button                                   |
//+------------------------------------------------------------------+
bool CControlsDialog::CreateBmpButton1(void)
  {
//--- coordinates
   int x1 = INDENT_LEFT;
   int y1 = INDENT_TOP + (EDIT_HEIGHT + CONTROLS_GAP_Y);
   int x2 = x1 + BUTTON_WIDTH;
   int y2 = y1 + BUTTON_HEIGHT;
//--- create
   if(!m_bmpbutton1.Create(m_chart_id, m_name + "BmpButton1", m_subwin, x1, y1, x2, y2))
      return(false);
//--- sets the name of bmp files of the control CBmpButton
   string name1, name2;
   name1 = "\\Images\\euro.bmp";
   name2 = "\\Images\\dollar.bmp";
   m_bmpbutton1.BmpNames(name1, name2);
   if(!Add(m_bmpbutton1))
      return(false);
   m_chart.Redraw();
   if(ObjectFind(m_chart_id, name1) >= 0)
     {
      DebugBreak();
     }
//--- succeed
   return(true);
  }
//+------------------------------------------------------------------+

Объект самого изображения на панели не находится с помощью функции ObjectFind(), что вполне ест-но. А как его найти, если это вообще возможно?

Спасибо.

 
Denis Kirichenko:

Владимир, спасибо за статьи, очень полезный материал. У меня может быть ламерский вопрос...

Есть объект типа CBmpButton - кнопка с изображением. Так вот, само изображение кнопки выступает тут в качестве ресурса. Как получить доступ к его свойствам? Или нельзя?

Пример из Документации. 

Там я поиграл с методом CControlsDialog::CreateBmpButton1():

Объект самого изображения на панели не находится с помощью функции ObjectFind(), что вполне ест-но. А как его найти, если это вообще возможно?

Спасибо.

Изображение (рисунок) - это не объект. Объекты - это линии, прямоугольники ... графические элементы.

 

Здравствуйте, Владимир. Вы добавили в окно дополнительно ClientArea. И затем используете метод CMyWndClient::ShiftButton для скроллинга кнопок. Это не очень удобно, поскольку, кнопок в окне может быть много. Также, помимо кнопок может быть еще очень много элементов UI. То есть, понимаете, писать методы для каждого элемента и не забыть вызвать их в обработчиках скроллинга, та ещё задачка. А не проще скролить ClientArea? Тогда, все элементы UI, содержащиеся в нем, будут скролиться автоматически. Достаточно прописать только скроллинг ClientArea в обработчиках.

 
Mihail Matkovskij #:

Здравствуйте, Владимир. Вы добавили в окно дополнительно ClientArea. И затем используете метод CMyWndClient::ShiftButton для скроллинга кнопок. Это не очень удобно, поскольку, кнопок в окне может быть много. Также, помимо кнопок может быть еще очень много элементов UI. То есть, понимаете, писать методы для каждого элемента и не забыть вызвать их в обработчиках скроллинга, та ещё задачка. А не проще скролить ClientArea? Тогда, все элементы UI, содержащиеся в нем, будут скролиться автоматически. Достаточно прописать только скроллинг ClientArea в обработчиках.

Напишите пожалуйста такой пример. Думаю всем будет интересна такая реализация.

 
Vladimir Karputov #:

Напишите пожалуйста такой пример. Думаю всем будет интересна такая реализация.

Немного подумав я разобрался. Такую прокрутку реализовать нельзя из-за невозможности частичного скрытия любых объектов чарта (в данном случае это ClientArea и кнопки). В других UI это реализовано по-другому. Там выводится прямоугольная область которая попадает в Area скроллинга, а всё остальное скрыто. Отсюда и возникла путаница.

 
Perfect