Board.KolibriOS.org

Official KolibriOS board
It is currently Tue Dec 10, 2019 5:19 am

All times are UTC+03:00




Post new topic  Reply to topic  [ 100 posts ]  Go to page 1 2 3 4 57 Next
Author Message
 Post subject: @notify
PostPosted: Thu Apr 29, 2010 1:04 pm 
Offline

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

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

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

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


Attachments:
File comment: @notify 0.1
@notify.7z [1.41 KiB]
Downloaded 204 times
Top
   
 Post subject: Re: @notify
PostPosted: Thu Apr 29, 2010 1:33 pm 
Offline
User avatar

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

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

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

_________________
ушёл...


Top
   
 Post subject: Re: @notify
PostPosted: Thu Apr 29, 2010 3:14 pm 
Offline
Kernel Developer
User avatar

Joined: Mon Nov 28, 2005 8:00 pm
Posts: 1601
Sorcerer wrote:
Подскажите, пожалуйста, как убрать этот мерзкий синий контур вокруг окна?

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

_________________
Ушёл к умным, знающим и культурным людям.


Top
   
 Post subject: Re: @notify
PostPosted: Tue May 25, 2010 11:52 am 
Offline

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

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


Top
   
 Post subject: Re: @notify
PostPosted: Tue May 25, 2010 2:52 pm 
Можно еще использовать общую память, как я сделал для OpenDialog, но готовых процедур с событиями и прочим в этом случае нету.


Top
   
 Post subject: Re: @notify
PostPosted: Thu Jan 20, 2011 12:14 pm 
Offline

Joined: Mon Sep 24, 2007 11:11 am
Posts: 2814
Увидел в ночной сборке @notify, и стало мне стыдно за то, что такой крокодил присутствует в образе.
В связи с этим переписал его с нуля, и стал он заметно легче (раза в 4), и вдобавок выводит текст не на черном фоне, а на сетке (что позволяет видеть рабочий стол под окном уведомления).

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


Attachments:
notify.7z [1.82 KiB]
Downloaded 177 times
Top
   
 Post subject: Re: @notify
PostPosted: Thu Jan 20, 2011 1:09 pm 
Offline

Joined: Mon Sep 24, 2007 11:11 am
Posts: 2814
Более корректная версия, перерисовывающая окно и отлавливающая события.

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

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


Attachments:
notify.7z [1.95 KiB]
Downloaded 178 times
Top
   
 Post subject: Re: @notify
PostPosted: Thu Jan 20, 2011 5:58 pm 
Offline
User avatar

Joined: Thu Mar 01, 2007 7:57 pm
Posts: 835
Так вроде Колибри пока не поддерживает полноценную прозрачность.

_________________
Всех выше те, кто доброе творят,
И за дела добра не ждут наград,
Всем жертвуют для страждущих людей,
Не думая о выгоде своей.


Top
   
 Post subject: Re: @notify
PostPosted: Thu Jan 20, 2011 6:09 pm 
Sorcerer
А как ты себе представляешь объективную отрисовку? Первичный захват точек для микширования происходит еще до вывода окна, а вторичный уже при наличии окна. На самом деле физически все, что под окном не существует, потому что ядро отрисовывает только ту информацию, которая в данный момент видна для пользователя. Слоев для восстановления информации по сути нет. Если бы они были это все отжирало бы память на хранение. В текущем виде простого решения для проблемы которую ты обозначил нет.


Top
   
 Post subject: Re: @notify
PostPosted: Thu Jan 20, 2011 8:33 pm 
Offline
User avatar

Joined: Mon Apr 16, 2007 6:38 pm
Posts: 1222
вероятный workaround: при просьбе ядра перерисовать окно, изменить размер окна в ноль, затем обратно, и рисовать.

_________________
И мы уже давно не пешки,
Мы пули, мы орлы, и решки!
Война ютит бинарный код,
Умри, или иди вперед!


Top
   
 Post subject: Re: @notify
PostPosted: Thu Jan 20, 2011 9:56 pm 
Gluk
Я хотел предложить такой метод, но он дюже неправильный - моргать будет. К тому же массовое использование несколькими приложениями такого метода будет "кошмарить" систему. В общем как и утверждалось ранее - прозрачность в Колибри это не самая перспективная и нужная вещь, особенно при отсутствующем аппаратном ускорении.


Top
   
 Post subject: Re: @notify
PostPosted: Thu Jan 20, 2011 9:58 pm 
Offline

Joined: Mon Sep 24, 2007 11:11 am
Posts: 2814
Только что проверил, не работает. Не моргает, а просто все выглядит точно так же. Что с изменением размера 67й функцией, что с изменением формы 50й.


Top
   
 Post subject: Re: @notify
PostPosted: Thu Jan 20, 2011 10:39 pm 
Sorcerer
Скорее всего ты неправильно выводишь. Мало изменить 67 функцией - надо еще отрисовать после этого все той-же комбинацией функций 12+0+12, затем поменять обратно на исходные 67 функцией и снова отрисовать 12+0+12. А вообще выводить так как сделал ты не самый лучший вариант, на некоторых мониторах такой сетчатый вывод вызывает муар и режет глаза. Лучше комбинировать с захватом куска изображения после минимизации в 0 окна, через функцию 36, а затем затемнив и\или размыв захваченную картинку вывести ее, а поверх нее текст. Конечно это медленней, но это будет ближе к тому что ты хочешь получить.


Top
   
 Post subject: Re: @notify
PostPosted: Thu Jan 20, 2011 10:50 pm 
Offline

Joined: Mon Sep 24, 2007 11:11 am
Posts: 2814
Именно так и делал, 67я, потом 12, потом 0, потом 12, потом 67, потом 12, 0 и 12. Эффект нулевой (или руки кривые).

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


Top
   
 Post subject: Re: @notify
PostPosted: Sat Apr 02, 2011 6:42 pm 
Offline
User avatar

Joined: Mon Apr 16, 2007 6:38 pm
Posts: 1222
Sorcerer, где-то на форуме валяется прога для отображения заряда батареи by me, там сделано сворачивание в точку, вроде работает =)

_________________
И мы уже давно не пешки,
Мы пули, мы орлы, и решки!
Война ютит бинарный код,
Умри, или иди вперед!


Top
   
Display posts from previous:  Sort by  
Post new topic  Reply to topic  [ 100 posts ]  Go to page 1 2 3 4 57 Next

All times are UTC+03:00


Who is online

Users browsing this forum: No registered users and 2 guests


You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum
You cannot post attachments in this forum

Search for:
Jump to:  
cron
Powered by phpBB® Forum Software © phpBB Limited