Внимание, конкурс! - страница 13

 

Упс )

Я согласен с вариантом деребана и публичным обсуждением, полезнее всего будет.

 
TheXpert:
Да-да! Проблемка однако. В топик призываются komposter и tol64

Спасибо. Я не участвовал в конкурсе по причине, что работаю сейчас над очень большим проектом. Уже скоро он будет всем доступен. Там будет что обсудить и на его основе возможно тоже можно будет устраивать различные конкурсы. Больше подробностей пока дать не могу. )

 
Ну, поехали :)
Класс для работы с кнопками произвольной формы
Класс для работы с кнопками произвольной формы
  • 2015.03.18
  • Dmitriy Parfenovich
  • www.mql5.com
Класс предназначен для создания интерактивных кнопок на графике цены с различными состояниями.
 
fyords:
Ну, поехали :)

Мой пока проверяется... Как посмотрю отпишу..

Добавлено:

Вот и мой вариант появился :)

 
fyords:

Посмотрел – 5 балов :) Если пользователю не нужна стандартная библиотека – то Ваш вариант лучше.

Я, собственно, из-за чего так с этой библиотекой загоняюсь – у меня программа, с которой сейчас работаю, написана на её основе. Дизайн сильно топорный, хотел улучшить. А тут как раз конкурс – мне получилось очень в тему.

Из плюсов Вашей реализации:

1)      Нет никаких костылей. У меня это и наследование стандартных классов и пр. радости для поддержки совместимости со стандартной библиотекой.  

2)      Статус кнопки и статус объекта на чарте совпадают.

3)      В функциях присутствует контроль входных значений на предмет ошибок. Я это, кое-где, упустил из виду…

4)      Кнопки в эксперте изящнее создаются (через вложенный цикл). Я, чёт, не додумался до этого.

5)      Можно задать не только угол привязки графика, но и угол привязки кнопки. Честно – не знаю где это может пригодится :) но вдруг…

6)      Картинок 6 шт используется. У меня 4.

7)      CCanvas – можно на кнопке что-нибудь написать. Пару функций добавить и всё. Очень удобно в случае мультиязычности приложения. Мне придется опять костыли городить.

8)      В Вашем коде гораздо быстрее можно разобраться.

Что заметил, из того что можно улучшить:

1)      Если уменьшить чат, так чтобы кнопка была частично скрыта (снизу или сверху) – подсветка кнопки не сбрасывается (см. картинку).  

 

2)      Не увидел возможность создания “не западающих кнопок”. Т.е. которая запала и тут же отпала (ну по аналогии со стандартными).

3)      У Вас значительно более сложный способ определения прозрачности. Даже не везде понял как он работает. Если картинки готовить самому, то проще сделать как у меня. Т.е. я просто извлекаю прозрачность из картинки функцией (спасибо за неё Integer ):

double GetAlfa(uint  aColor)
  {
   return((aColor>>24)&0xff);
  }

И дальше сверяю её с пороговым уровнем (взял 250, но, конечно нужно функцию добавить, чтобы можно было задавать его):

 double alfa=GetAlfa(data[y*m_SizeX+x]);
 if(alfa>250)
   {
    m_T[y*m_SizeX+x]=true;
   }
 else
   {
   m_T[y*m_SizeX+x]=false;
   }

Хотя, если работать с готовыми картинками, не открывая граф. редактор, то Ваш вариант, скорее всего, будет удобнее.

 

ЗЫ: Только что заметил, что в классе CCanvas тоже есть функция по определению прозрачности:

#define GETRGBA(clr)   uchar((clr)>>24)
 

 Спасибо. Сейчас Ваш гляну. 

MigVRN:

Что заметил, из того что можно улучшить: ...

  1. Если указатель уходит за пределы окна, то не генерируется событие "перемещение мыши", а отсюда похоже и невозможность исправить сей баг.
  2. В задании таких не было, хотя допилить труда большого не составит.
  3. С прозрачностью мне кажется все проще: берем 2е точки (самую темную и самую светлую), средне значение будет пороговым. Если на картинке есть прозрачные места, то самый темный цвет сместится в сторону 0. Следовательно и пороговое значение тоже.
    Такое решение было принято в связи с тем, что одна и та же функция работает как с прозрачностью так и с отдельной маской.
    Отдельно хочу отметить - такой метод (отдельная маска) позволяет использовать картинки без прозрачности. Ну, может разработчик с графическим редактором не дружит :)
    Ну, или вариант с указанием цвета маски - как вариант указать белый цвет для зеленой кнопки и "он станет прозрачным", без дополнительных плясок с бубном около прозрачности и доп.масок.
 
MigVRN:

Я вам там работу сделал... Жду респонса.

Спасибо участникам.

 
TheXpert #:
Да. Область кнопки на картинке это непрозрачная область.