(Назад к списку заданий eCo Labs)

http://ru.ecomstation.ru/ecolabs/Banners.html

Название: banners.dll
Заказчик: eCo Software


Срок: 1 неделя
Вознаграждение: -

2011/09: Сайт Banners

http://ecomstation.ru/banners

2011/04: Добавления

Задача - создать баннерную систему / баннерный механизм (коротко: БС, БМ). дополнительный слой окон на рабочем столе.

2011/03: Пример Javascript

http://boedesign.com/demos/gritter/

Понажимай: * Add regular notification * Add sticky notification:

Сценарии, какие баннеры бывают и как они себя ведут?

  • Вытолкнуть баннер. который должен висеть 3 секунды.
  • Простые примеры баннеров из 1 картинки: Примеры
  • Вытолкнуть баннер с инфо: текст и иконка
  • Вытолкнуть баннер. Юзер его должен кликнуть, иначе он висит и не исчезает.
  • Вытолкнуть баннер. Юзер там что-то кликает. Вернуть программе инфо, в какой точке кликнул и как именно (LeftMouse button, Right Mouse button, Double click, ..).
  • У баннеров должны быть ID, должны быть Family. Чтобы можно быть заменить вывешенный баннер. Поясню: От программы X уже вывешен баннер B1. Программа хочет вывесить еще один баннер B2. Должны быть разные флажки: OVERWRITE_MYFAMILY, DON'T_OWERWRITE_MY_FAMILY (default).

    Т.е. баннер B2 должен заменить ранее вывешенный B1. Либо B2 встанет в очередь, как новый.

  • Составной баннер: хочу рисовать 3 картинки в баннере. Вывод: Давать программе рисовать в окне? Посылать запрос на REFRESH?

В чем сложность проекта?

Надо обсудить..

  • Удобный API для их выталкивания / прятанья. Какой механизм?
  • Как рисовать внутри баннеров? кто рисует: программа или БаннерныйМеханизм?
  • Где рисовать? По краю? Настраивается..

Обсуждение:

Состав БС

  • Можно чтобы при установке рантайма eCo Software в StartUp добавился демон BannerMechanishm.exe (eCoSoftDaemon.exe = ..).
  • banners.dll - API для приложений.
Кто отрисовыват содержимое баннеров? 2011/04: e-co:

Отрисовывает БС. НО т.к. баннеры разные, то нужно предусмотреть разные стили, передачу N картинок, M текстов. Стили:

  • Приложение передает БС'у 1 PNG или BMP
  • НО!! очень тяжело сгенерировать битмап. ПОЭТОМУ, предлагаю и такой вариант: 1 PNG (BMP) + текстовая строчка
  • Ага! стиль "MsgBox": маленькая PIC слева, жирный заголовок сверху, пояснение ниже. т.е. 1 картинка + 2 текста
  • ..

2009: как передавать описание внешнего вида баннера? xml файл в памяти? крута.. но дорого. Лучше заполнять структуру.

Где будет открываться баннер? e-co, 2009: программа *просит* вывести в области такой-то. около себя.. или в углу.. А на самом деле где выводить? Если 5 баннеров одновременно? a) они друг друга накроют. b) Юзер не успеет прочитать. Должна быть демон.exe, которая следит за баннерами и отдает программе финальные координаты

Improver, Имхо, нет смысла возвращать программе координаты, тут нужен другой подход: должна быть некая программа, постоянно висящая в памяти и которая выводит эти баннеры от начала и до конца, работающая по принципу "сообщил и забыл". Т.е. сообщили ей необходимые сведения, а дальше она сама должна нарисовать заданный баннер с нужным стилем в нужном месте экрана и на нужное время. И при этом ещё учесть все возможные коллизии.

Какая вообще роль БС?

2009: Как результат ^ - вопрос: что это за dll? она рисует баннер? или советует программе, где выводить баннер?!

Свойства баннера:
  • стиль: a) Стандартный (т.е. 1 картинка на весь баннер), b) стиль "MsgBox",
  • Рамка: a) нет, b) 1 пиксель, c) серая, ..
  • когда прятаться: a) через N секунд, b) никогда, ждать клика
  • прячется ли, если кликаешь его. по умолчанию включено.
  • всплывать ли на поверхность: a), float on top, b) popup 1 time
  • Прозрачность, бррр.. альфа-канал? или задается % прозрачности фона? как рисовать фон? Схватить изображение рабочего стола, считать это фоном. - в принципе она нужна. Но в первый момент можно без нее. Сразу же надо заложить a) % прозрачности. b) Закругленные углы.
  • Где хочется вывести баннер? БЫЛО: *прошу* вывести в координатах x,y,w,h -- программа может рекомендовать БС вывести баннер в x,y,w,h. ЛИБО: вывести баннер по центру. либо ниже центра. либо около eCenter.

Содержимое:

  • Картинка (картинки) путь к PNG? Хэндл картинки?
  • Фон: путь к обоям PNG? Или цвет
  • text (тексты)
Функции в dll

  • Создать баннер, CreateBanner()
  • показать баннер (или отдельно не нужно. создали - сразу в очередь на показ)
  • свойства сменить, ChangeProperties()
  • убрать баннер, forceClose()
  • UpdateBanner (ID, ..) - т.е. для уже созданного обновить его содержимое и свойства.
Сложности

  • Совместимость с ePager. Sticky (липкие окна).. если ничего не делать, то юзер переходит на другой вирт.стол и все баннеры остались на предыдущем столе. А нужно чтобы они были на всех столах.
Где разворачивать баннеры?

  • (по умолчанию) квадратные маленькие - сверху, около eCenter
  • (по умолчанию) длинные баннеры по правому краю экрана
  • плюс это все можно настраивать

Одна программа выталкивает баннеры 200x200, другая 240x120, .. Другая 468x64, .. Хрен их компактно нарисуешь.

Обратная связь

Программисту хочется не только баннер вытолкнуть, но и получить в ответ какую-то инфо:

Каким-то образом программа получает результат:

  • сразу же: что баннер вывешен в x,y,w,h
  • позже, что по баннеру кликнули или он сам испарился.
  • еще?
  • Как организовать все эти call_back функции?
Взаимодействие?
  • e-co: Через пайпы? через shared memory? через DDE?
  • Capricorn: всё это неправильно ^ , есть WinSendMsg, есть Dos* SendMsg
  • e-co: ну хорошо.. а как передать описание баннера? и как создать баннер из REXX?
REXX как из REXX это юзать? как из Паскаля? - Если есть из СИ, то остальное можно реализовать. Конечно нужно думать и о REXX.. Может быть описать баннер в виде текстового файла и его подавать?

 

Какие баннеры бывают?

MsgBox Виджеты eCenter

Стандартный (1 картинка на весь баннер)

Системные процессы

Интернет-радио

Сложный

WiFi

Сложный раскрашенный

Skype

В какие программы встроить?

SysTray * There were plans in 2007 (?) add SysTray widget to eComStation: http://www.eros2.info/systray_widget_en.shtml => this can change UserInterface significantly. Let's include to eCS 2.01 ?!
IBM Peers Sometimes it's necessary popup banners (notifications), not MsgBoxes.

* LOGON: One or more of your connections failed - OK => MsgBox: http://ecomstation.ru/temp/200904/share-fail.png

WiFi widget * Message from WiFi widget .. MsgBox.. don't remember details.
eCenter widgets USB Widget, etc

Авторы:

  • Разработчик: Capricorn
  • Проектирование: e-co, Capricorn


X)
Как рисовать содержимое баннера?


Вариант 1:
просто рисовать 1 картинку.
пусть программы генерируют .bmp как хотят.
тогда:
сделать демку, как сгенерировать битмап.



Вариант 2:

Предлагается передавать сценарий вида:

в виде файла! чтобы передавать большой обхем. чтобы из REXX генерировать..

==============

draw image
e:\programs\myprogram\welcome.png
x,y,w,h

draw text
Hello world
WORDWRAP | ..

draw text 
..

draw text 
..

draw rectangle
x,y,w,h
#ffeeff   // color

ADD-2: Capricorn: Решение по той ссылке, которую ты давал в самом начале, очень удачное. Все банеры выстраиваются столбиком друг за другом. Это и есть очередь. По-моему, давать программам возможность самим решать, где появится баннеру - дохлый номер. Просто замусорим экран всяким хлалмом - он будет напоминать веб-страницу сайта с халявной порнухой. Пусть будет одна глобальная настройка - где отображать баннеры: справа, или слева, выстраивая сверху, или снизу. И эту настройку будет крутить пользователь, а не программы.

В XXXXX тоже, используется похожий баннерный механизм для уведомления о новых сообщений. Когда я дам тебе дистрибутив попробовать - сам увидишь.

ADD-3: e-co TO CaPr|c0rN: по поводу баннерного механизма - пайпы.. можно пакетный режим.. режим сообщений тогда демон слушает 1 пайп прога P1 отправила ему msg. демон принял. закрыл пайп - открыл. опять готов. P2 отправила.. P3 отправила.. не нужно N пайпов.

------------------