@notify

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

    Code: Select all

    mov EAX, 0
    ...
    mov EDI, 0 ; черный цвет рамки
    int 0x40 
    Только, на черном рабочем столе (например, в ночных сборках) без рамки будет смотреться не очень :)
    ушёл...
  • Sorcerer wrote:Подскажите, пожалуйста, как убрать этот мерзкий синий контур вокруг окна?
    Использовать окно стиля 1, где система самостоятельно не рисует вообще ничего?
    Ушёл к умным, знающим и культурным людям.
  • Делаю многопоточную версию notify (ведь может же одновременно или почти одновременно произойти несколько событий)
    Вопрос - как лучше передавать параметры?
    Через IPC, dll, или доску отладки?
    Довольно логично сделать какой-нибудь префикс для отладочных сообщений пользователю... Тогда эти сообщения можно будет увидеть и через уведомлялку, и на доске отладки.

    Буфер доски отладки очищается при чтении, правильно?
  • Можно еще использовать общую память, как я сделал для OpenDialog, но готовых процедур с событиями и прочим в этом случае нету.
  • Увидел в ночной сборке @notify, и стало мне стыдно за то, что такой крокодил присутствует в образе.
    В связи с этим переписал его с нуля, и стал он заметно легче (раза в 4), и вдобавок выводит текст не на черном фоне, а на сетке (что позволяет видеть рабочий стол под окном уведомления).

    Архиватор почему-то отказался архивировать файл с именем @notify, поэтому не забудьте переименовать файл из notify в @notify.
    Исходные коды прилагаются.
    Attachments
    notify.7z (1.82 KiB)
    Downloaded 389 times
  • Более корректная версия, перерисовывающая окно и отлавливающая события.

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

    Теперь я убираю окно, которое было под окном notify. Notify получает сообщение о необходимости перерисовать окно, и заново ставит точки. Но рисуются эти точки поверх прошлого состояния окна notify (т.е. когда сквозь него видно другое окно), а не с нуля. Это баг в ядре, связанный с рисованием окон? Или это фича? Как с этим бороться?
    Attachments
    notify.7z (1.95 KiB)
    Downloaded 400 times
  • Так вроде Колибри пока не поддерживает полноценную прозрачность.
  • Sorcerer
    А как ты себе представляешь объективную отрисовку? Первичный захват точек для микширования происходит еще до вывода окна, а вторичный уже при наличии окна. На самом деле физически все, что под окном не существует, потому что ядро отрисовывает только ту информацию, которая в данный момент видна для пользователя. Слоев для восстановления информации по сути нет. Если бы они были это все отжирало бы память на хранение. В текущем виде простого решения для проблемы которую ты обозначил нет.
  • вероятный workaround: при просьбе ядра перерисовать окно, изменить размер окна в ноль, затем обратно, и рисовать.
    И мы уже давно не пешки,
    Мы пули, мы орлы, и решки!
    Война ютит бинарный код,
    Умри, или иди вперед!
  • Gluk
    Я хотел предложить такой метод, но он дюже неправильный - моргать будет. К тому же массовое использование несколькими приложениями такого метода будет "кошмарить" систему. В общем как и утверждалось ранее - прозрачность в Колибри это не самая перспективная и нужная вещь, особенно при отсутствующем аппаратном ускорении.
  • Только что проверил, не работает. Не моргает, а просто все выглядит точно так же. Что с изменением размера 67й функцией, что с изменением формы 50й.
  • Sorcerer
    Скорее всего ты неправильно выводишь. Мало изменить 67 функцией - надо еще отрисовать после этого все той-же комбинацией функций 12+0+12, затем поменять обратно на исходные 67 функцией и снова отрисовать 12+0+12. А вообще выводить так как сделал ты не самый лучший вариант, на некоторых мониторах такой сетчатый вывод вызывает муар и режет глаза. Лучше комбинировать с захватом куска изображения после минимизации в 0 окна, через функцию 36, а затем затемнив и\или размыв захваченную картинку вывести ее, а поверх нее текст. Конечно это медленней, но это будет ближе к тому что ты хочешь получить.
  • Именно так и делал, 67я, потом 12, потом 0, потом 12, потом 67, потом 12, 0 и 12. Эффект нулевой (или руки кривые).

    Да, я думал о том, чтобы сделать через 36ю функцию, но натерпелся глюков с программой transp, и решил попробовать сделать так, как было сделано в игрушке Seiken Densetsu 2 для SNES. Там результаты очень хорошие получались
  • Sorcerer, где-то на форуме валяется прога для отображения заряда батареи by me, там сделано сворачивание в точку, вроде работает =)
    И мы уже давно не пешки,
    Мы пули, мы орлы, и решки!
    Война ютит бинарный код,
    Умри, или иди вперед!
  • Who is online

    Users browsing this forum: No registered users and 3 guests