Хорошая идея. Нужно просто сделать процесс курсор. Тогда проверка будет коректной. И работать будет быстро.'display_data' где определяется принадлежность точки процессу, к сожалению все биты заняты под номер процесса
Курсоры
Разобрался как проверяются боксы и рисунки, там используется 'WinMapAddress' имеющий тот же адрес что и 'display_data'.
Pavia
Я бы не стал выносить курсор из ядра, номер процесса нужен только для идентификации точки как курсорной. Если ядро не имеет своих точек на экране, то никаких новых процессов фиксировать не зачем.
Вопрос: незанятые приложениями точки рабочего стола имеют нулевой идентификатор процесса или ядра?
Pavia
Я бы не стал выносить курсор из ядра, номер процесса нужен только для идентификации точки как курсорной. Если ядро не имеет своих точек на экране, то никаких новых процессов фиксировать не зачем.
Вопрос: незанятые приложениями точки рабочего стола имеют нулевой идентификатор процесса или ядра?
Незанятые приложениями точки экрана заняты ядром - оно там, между прочим, рисует фон, и код отрисовки фона работает только с пикселами процесса 1 (aka OS/IDLE).
Если увеличить размер данных точки в display_data до двух байт, то и памяти этот буфер будет жрать в два раза больше.
Если увеличить размер данных точки в display_data до двух байт, то и памяти этот буфер будет жрать в два раза больше.
А процесс с 0-м номером существует? (По крайней мере используется в WinMapAddress?)
Люди, знаете или нет что если демки из папки "3D" закрывать по крестику (соответствующей кнопке), то курсор не исчезает. А вот если закрывать по Alt+F4 (как все и делают, т.к. в окне курсор слишком сильно мерцает), то курсор исчезает с некоторой вероятностью ~50x50.
вроде бы замечал такое
Alver
Процесса с номером 0 не существует.
Leency
Знаем. Это объясняется тем, что закрытие по крестику - корректное закрытие, поскольку в этом случае система всего лишь сообщает программе, что пользователь приказывает программе закрыться (а программа вольна уточнить у пользователя, действительно ли он этого хочет, что делать с несохранёнными данными, а в принципе может вообще это игнорировать), а при нажатии на Alt+F4 панель безусловно прибивает процесс, не давая ему никаких шансов на очистку - в результате с некоторой вероятностью процесс был в процессе отрисовки, когда курсор выключен, и тогда курсор уже не включается.
Процесса с номером 0 не существует.
Leency
Знаем. Это объясняется тем, что закрытие по крестику - корректное закрытие, поскольку в этом случае система всего лишь сообщает программе, что пользователь приказывает программе закрыться (а программа вольна уточнить у пользователя, действительно ли он этого хочет, что делать с несохранёнными данными, а в принципе может вообще это игнорировать), а при нажатии на Alt+F4 панель безусловно прибивает процесс, не давая ему никаких шансов на очистку - в результате с некоторой вероятностью процесс был в процессе отрисовки, когда курсор выключен, и тогда курсор уже не включается.
Ушёл к умным, знающим и культурным людям.
А если приложения прибивает @Panel, нельзя ли сделать что-бы оно само восстанавливало курсор?
Понял откуда иногда выскакивают некоторые артефакты.
(Например затирание куска сноски 'end' на панели при выборе меню выход, или перекрытие хвоста курсора приложением и т.п.)
В проце '__sys_disable_mouse' (и возможно не только) при проверки на необходимость стирания курсора проверяется вариант курсора 16x16,
в то время как на самом деле он 32x32.
mistifi(ator
Чтобы грамотно закрывать процесс необходимо сопоставить ему еще один флаг на состояние курсора, хотябы 1 бит а лучше 2 : 1 - включен/нет а 2 - заморожен/нет( если будет вариант с отрисовкой точек в буфере курсора)
(Например затирание куска сноски 'end' на панели при выборе меню выход, или перекрытие хвоста курсора приложением и т.п.)
В проце '__sys_disable_mouse' (и возможно не только) при проверки на необходимость стирания курсора проверяется вариант курсора 16x16,
в то время как на самом деле он 32x32.
mistifi(ator
Половинчатая мера - процесс можно будет убить и другими приложениями.А если приложения прибивает @Panel, нельзя ли сделать что-бы оно само восстанавливало курсор?
Чтобы грамотно закрывать процесс необходимо сопоставить ему еще один флаг на состояние курсора, хотябы 1 бит а лучше 2 : 1 - включен/нет а 2 - заморожен/нет( если будет вариант с отрисовкой точек в буфере курсора)
Я ошибся, '__sys_disable_mouse' не проверяет 16x16, но очепятка кажется есть.
Мне думается надо 'imul ebx, 24'
Кроме того интересно, так как нет проверки на зашкаливание хвоста курсора за границы экрана, не случаются ли глюки с курсором на максимальном разрешении kolibri?
Code: Select all
mov ebx,[ScreenWidth]
inc ebx
imul ebx,10
Кроме того интересно, так как нет проверки на зашкаливание хвоста курсора за границы экрана, не случаются ли глюки с курсором на максимальном разрешении kolibri?
Alver
Нет.Кроме того интересно, так как нет проверки на зашкаливание хвоста курсора за границы экрана, не случаются ли глюки с курсором на максимальном разрешении kolibri?
Проверка есть, в функции рисования пиксела.
Мне кажется, если сделать так, чтобы нажатие Alt+F4 посылало тот же сигнал, что и нажатие кнопки закрытия, то это поможет.diamond wrote:Alver
Процесса с номером 0 не существует.
Leency
Знаем. Это объясняется тем, что закрытие по крестику - корректное закрытие, поскольку в этом случае система всего лишь сообщает программе, что пользователь приказывает программе закрыться (а программа вольна уточнить у пользователя, действительно ли он этого хочет, что делать с несохранёнными данными, а в принципе может вообще это игнорировать), а при нажатии на Alt+F4 панель безусловно прибивает процесс, не давая ему никаких шансов на очистку - в результате с некоторой вероятностью процесс был в процессе отрисовки, когда курсор выключен, и тогда курсор уже не включается.
Я рылся в старых доках и случайно наткнулся на одну статью.Читайте вырезку ниже.
Мужики возможно я ошибаюсь,но мне кажется что мышь мерцает из-за того что в Колибри нет двойной буферизации видео памяти.Если я не прав то оъясните в чем.
Мужики возможно я ошибаюсь,но мне кажется что мышь мерцает из-за того что в Колибри нет двойной буферизации видео памяти.Если я не прав то оъясните в чем.
Last edited by Rock_maniak_forever on Mon Feb 09, 2009 6:12 am, edited 3 times in total.
Rock_maniak_forever
Нам достаточно сказать "двойная буферизация", чтобы всё было понятно. Не обязательно приводить никому не нужную цитату и выделять её синим цветом.
Нам достаточно сказать "двойная буферизация", чтобы всё было понятно. Не обязательно приводить никому не нужную цитату и выделять её синим цветом.
in code we trust