Board.KolibriOS.org
http://board.kolibrios.org/

@notify
http://board.kolibrios.org/viewtopic.php?f=42&t=1439
Page 1 of 7

Author:  SoUrcerer [ Thu Apr 29, 2010 1:04 pm ]
Post subject:  @notify

Набросал маленькую программку, выводящую текст, переданный ей, в маленькое окошко в правом верхнем углу экрана.
Окно закрывается само через 5 секунд.
Синтаксис примитивен:
@notify [строка для вывода]

Зачем? С ее помощью можно уведомлять пользователя о включении/выключении эмулятора мыши, переключении песни в ac97 и о многих других событиях.

В планах: расширение синтаксиса. Вывод в несколько строк с использованием управляющих префиксов (например \n), передача времени отображения окна через командную строку. Заготовки иконок для различных событий (например, если событие связано со звуком - рисовать динамик, с мышью - рисовать мышку и так далее). Возможно - ini-файл с настройками (угол экрана, где окно должно появиться; цвет окна и другие параметры).

Подскажите, пожалуйста, как убрать этот мерзкий синий контур вокруг окна? //каюсь, мало курил мануалы :)//

Attachments:
File comment: @notify 0.1
@notify.7z [1.41 KiB]
Downloaded 216 times

Author:  Nasarus [ Thu Apr 29, 2010 1:33 pm ]
Post subject:  Re: @notify

Отличная идея :) . Нечто подобное и я хочу сделать, только для отображения отчетов об ошибках в программе, сохранения отчетов и т.п, потому что Board'ом не очень удобно пользоваться из-за отсутствия скроллинга, копирования и т.д. Мое мнение - продолжай в том же духе =)
Sorcerer wrote:
Подскажите, пожалуйста, как убрать этот мерзкий синий контур вокруг окна? //каюсь, мало курил мануалы :)//

Как вариант сделай цвет рамки такой же как и у фона, то есть:
Code:
mov EAX, 0
...
mov EDI, 0 ; черный цвет рамки
int 0x40

Только, на черном рабочем столе (например, в ночных сборках) без рамки будет смотреться не очень :)

Author:  diamond [ Thu Apr 29, 2010 3:14 pm ]
Post subject:  Re: @notify

Sorcerer wrote:
Подскажите, пожалуйста, как убрать этот мерзкий синий контур вокруг окна?

Использовать окно стиля 1, где система самостоятельно не рисует вообще ничего?

Author:  SoUrcerer [ Tue May 25, 2010 11:52 am ]
Post subject:  Re: @notify

Делаю многопоточную версию notify (ведь может же одновременно или почти одновременно произойти несколько событий)
Вопрос - как лучше передавать параметры?
Через IPC, dll, или доску отладки?
Довольно логично сделать какой-нибудь префикс для отладочных сообщений пользователю... Тогда эти сообщения можно будет увидеть и через уведомлялку, и на доске отладки.

Буфер доски отладки очищается при чтении, правильно?

Author:  Mario [ Tue May 25, 2010 2:52 pm ]
Post subject:  Re: @notify

Можно еще использовать общую память, как я сделал для OpenDialog, но готовых процедур с событиями и прочим в этом случае нету.

Author:  SoUrcerer [ Thu Jan 20, 2011 12:14 pm ]
Post subject:  Re: @notify

Увидел в ночной сборке @notify, и стало мне стыдно за то, что такой крокодил присутствует в образе.
В связи с этим переписал его с нуля, и стал он заметно легче (раза в 4), и вдобавок выводит текст не на черном фоне, а на сетке (что позволяет видеть рабочий стол под окном уведомления).

Архиватор почему-то отказался архивировать файл с именем @notify, поэтому не забудьте переименовать файл из notify в @notify.
Исходные коды прилагаются.

Attachments:
notify.7z [1.82 KiB]
Downloaded 190 times

Author:  SoUrcerer [ Thu Jan 20, 2011 1:09 pm ]
Post subject:  Re: @notify

Более корректная версия, перерисовывающая окно и отлавливающая события.

Вопрос такой: у notify окно, в котором система ничего не рисует. Когда вызывается команда рисования окна, notify рисует сетку и выводит текст. Если под окном notify есть другое окно, то его будет видно насквозь.

Теперь я убираю окно, которое было под окном notify. Notify получает сообщение о необходимости перерисовать окно, и заново ставит точки. Но рисуются эти точки поверх прошлого состояния окна notify (т.е. когда сквозь него видно другое окно), а не с нуля. Это баг в ядре, связанный с рисованием окон? Или это фича? Как с этим бороться?

Attachments:
notify.7z [1.95 KiB]
Downloaded 190 times

Author:  DmitrySokolowsky [ Thu Jan 20, 2011 5:58 pm ]
Post subject:  Re: @notify

Так вроде Колибри пока не поддерживает полноценную прозрачность.

Author:  Mario [ Thu Jan 20, 2011 6:09 pm ]
Post subject:  Re: @notify

Sorcerer
А как ты себе представляешь объективную отрисовку? Первичный захват точек для микширования происходит еще до вывода окна, а вторичный уже при наличии окна. На самом деле физически все, что под окном не существует, потому что ядро отрисовывает только ту информацию, которая в данный момент видна для пользователя. Слоев для восстановления информации по сути нет. Если бы они были это все отжирало бы память на хранение. В текущем виде простого решения для проблемы которую ты обозначил нет.

Author:  Gluk [ Thu Jan 20, 2011 8:33 pm ]
Post subject:  Re: @notify

вероятный workaround: при просьбе ядра перерисовать окно, изменить размер окна в ноль, затем обратно, и рисовать.

Author:  Mario [ Thu Jan 20, 2011 9:56 pm ]
Post subject:  Re: @notify

Gluk
Я хотел предложить такой метод, но он дюже неправильный - моргать будет. К тому же массовое использование несколькими приложениями такого метода будет "кошмарить" систему. В общем как и утверждалось ранее - прозрачность в Колибри это не самая перспективная и нужная вещь, особенно при отсутствующем аппаратном ускорении.

Author:  SoUrcerer [ Thu Jan 20, 2011 9:58 pm ]
Post subject:  Re: @notify

Только что проверил, не работает. Не моргает, а просто все выглядит точно так же. Что с изменением размера 67й функцией, что с изменением формы 50й.

Author:  Mario [ Thu Jan 20, 2011 10:39 pm ]
Post subject:  Re: @notify

Sorcerer
Скорее всего ты неправильно выводишь. Мало изменить 67 функцией - надо еще отрисовать после этого все той-же комбинацией функций 12+0+12, затем поменять обратно на исходные 67 функцией и снова отрисовать 12+0+12. А вообще выводить так как сделал ты не самый лучший вариант, на некоторых мониторах такой сетчатый вывод вызывает муар и режет глаза. Лучше комбинировать с захватом куска изображения после минимизации в 0 окна, через функцию 36, а затем затемнив и\или размыв захваченную картинку вывести ее, а поверх нее текст. Конечно это медленней, но это будет ближе к тому что ты хочешь получить.

Author:  SoUrcerer [ Thu Jan 20, 2011 10:50 pm ]
Post subject:  Re: @notify

Именно так и делал, 67я, потом 12, потом 0, потом 12, потом 67, потом 12, 0 и 12. Эффект нулевой (или руки кривые).

Да, я думал о том, чтобы сделать через 36ю функцию, но натерпелся глюков с программой transp, и решил попробовать сделать так, как было сделано в игрушке Seiken Densetsu 2 для SNES. Там результаты очень хорошие получались

Author:  Gluk [ Sat Apr 02, 2011 6:42 pm ]
Post subject:  Re: @notify

Sorcerer, где-то на форуме валяется прога для отображения заряда батареи by me, там сделано сворачивание в точку, вроде работает =)

Page 1 of 7 All times are UTC+03:00
Powered by phpBB® Forum Software © phpBB Limited
https://www.phpbb.com/