Лучший вариант не задержка, а вызов 68.1 ака yield(). Планировщик отработает все остальные потоки и OS_IDLE, который уничтожит поток. Но это только в том случае если надо дождаться гарантированного освобождения ресурсов из очень маленького списка.
Практической необходимости в этом в 99.(9)% случаев я не вижу.
Помогите новичку
Размеры большого окна корректируются до размеров текущего видеорежима. Если выводится маленькое окно, но его тело вылазит за пределы физических координат, то корректируются начальные координаты такого окна.0CodErr wrote:Если окно не помещается на экране, то меняются ли его размеры и координаты,
или же оно только так рисуется, чтобы уместиться?
Если окно отслеживает является ли оно верхним в оконном стеке, то при нормально реализованной логике окно не должно реагировать на события мыши, когда оно не вверху.0CodErr wrote: Как можно сделать, чтобы окно не реагировало на события мыши,
если над ним другое окно(либо частично перекрывается)?
Если подразумевается режим "Stay On Top" (например, как в Виндовс), то такой функциональности в ядре не предусмотрено.
Непонятно какие события.0CodErr wrote: Хотелось бы обрабатывать события даже если окно не активно.
Я бы не хотел так делать. Может так получиться, что моя панель будет не на всю ширину экрана, и тогда останется никогда неиспользуемое пространство. Это неправильно, я считаю.SoUrcerer wrote:Текущая панель меняет рабочую область экрана, кстати. Это может помочь.
Она в определённой степени настраивается: можно менять цвета, высоту, количество запускаемых программ, параметры командной строки для них, иконки к программам.SoUrcerer wrote:...вид панели должен быть настраиваемым.
Я хотел уточнить: здесь, ведь, не играет роли как именно поток завершён(насильственно или самостоятельно)?Serge wrote:Память выделенная 68.12 не освобождается до завершения всех потоков приложения.
256 - это максимальное число потоков в системе? Тогда, если в будущем их будет больше, надо корректировать это значение. Наверное, всё-таки 68.1 подойдёт лучше.Mario wrote:Думается мне нужно сделать задержку 0,01 * 256 = 2,56 секунды, чтобы уж совсем надежно.
События мыши.Mario wrote:Непонятно какие события.0CodErr wrote:Хотелось бы обрабатывать события даже если окно не активно.
Нет, не "Stay On Top". Я бы вот как хотел:Mario wrote: Если окно отслеживает является ли оно верхним в оконном стеке, то при нормально реализованной логике окно не должно реагировать на события мыши, когда оно не вверху.
Если подразумевается режим "Stay On Top" (например, как в Виндовс), то такой функциональности в ядре не предусмотрено.
если над моим окном какое-то другое, но закрывает его не полностью, то
в незакрытой области моё окно должно реагировать на события мыши(а в закрытой не должно).
События мыши все же отличаются по функциональности, например клик по области приложения однозначно приведет к его "активации", т.е. оно станет самым верхним в оконном стеке. Другое дело если подразумевается прокрутка скроллом или просто отслеживание координат. Можно сделать функции возвращающую из область оконного стека текущее значение для точки, которая находится под вершиной указателя мыши. Проверяя это значение узнать перекрыта ли данная точка окна точкой другого вышележащего окна. Возможно кто то предложит более выигрышную стратегию для реализации, но я такой не вижу пока.0CodErr wrote: если над моим окном какое-то другое, но закрывает его не полностью, то
в незакрытой области моё окно должно реагировать на события мыши(а в закрытой не должно).
Абсолютно никакой.0CodErr wrote:Я хотел уточнить: здесь, ведь, не играет роли как именно поток завершён(насильственно или самостоятельно)?
Как можно установить координату "горячей точки" курсора? Смотрел функцию 37.5 (установить курсор), в ней этого параметра нет.
Горячая точка устанавливается до активации курсора функцией 37.5, т.е. при загрузке курсора по 37.4. Смотри описание.
Пока не работает 37.4, горячая точка получается в левом верхнем углу, хотя задал координату 16,16.
Вроди должно быть по центру, если весь размер 32*32. Буду разбиратся что не так, если не получится буду рисовать кривые курсоры.
Code: Select all
mov edx,(16 shl 8)+16
shl edx,16
mov dx,2 ;LOAD_INDIRECT
Может баг в ядре, а может ты что то не так делаешь - надо разбираться и смотреть код.
IgorA
Никакого криминала в ядре я не нашел. Мне нужен твой код для просмотра - скинь в личку, если тебе нужна помощь.
Никакого криминала в ядре я не нашел. Мне нужен твой код для просмотра - скинь в личку, если тебе нужна помощь.
Я уже успел сделать ревизию 2482, в которой был мой код с курсорами. Есть файл (root)/programs/media/log_el/trunk/log_el.asm , в котором есть функция:
там я изменил строки 1989-1990:
Раньше было так:
И при выборе карандаша (желательно синего) рисование всеравно происходит с левого верхнего угла курсора. Красный карандаш для тестирования лучше не брать, т. к. в нем я сделал выравнивание линий на первую прорисованую точку (что-бы провода не рисовались кривыми).
Code: Select all
1984 proc set_pen_mode uses eax ebx ecx edx, mode:dword, icon:dword
Code: Select all
1989 ;mov edx,((cx shl 8) + cy) shl 16
1990 mov edx,2 ;LOAD_INDIRECT
Code: Select all
mov edx,((16 shl 8) + 16) shl 16
mov dx,2 ;LOAD_INDIRECT
- Attachments
-
-
cursor_cx_cy.png (18.05 KiB)Viewed 3387 times
-
Исправил в SVN r. 2483
Тот кто делал этот код в ядре, явно поленился проверить работоспособность реализации в этом конкретном случае. Впрочем не будем кидаться камнями - сами не без греха.
Тот кто делал этот код в ядре, явно поленился проверить работоспособность реализации в этом конкретном случае. Впрочем не будем кидаться камнями - сами не без греха.
Здравствуйте, бона таго... Не уверен, что пишу туда, куда стоит, нотакой общий вопрос: как обстоят дела в КОС с базами данных? С работой с ними, то есть.
to Scampada
Примерно так: viewtopic.php?f=24&t=1163
Примерно так: viewtopic.php?f=24&t=1163
Еще такой вопрос, думаю, лучше всего сюда.
Допустим, есть у меня массив данных:
; массив 5х5 в одномерном представлении
c0 db 0
c1 db 0
c2 db 0
c3 db 0
c4 db 0
...
c24 db 0
c_end db 'eoa' ;end of array
Могу я обрабатывать массив подобным образом:
mov ax,c0 ;помещаем _адрес_ данных в ах
do_smth_with_array:
cmp ax,c_end ;сравниваем адрес, содержащийся в ах, с адресом переменной, символизирующей конец массива
jae _break ;если содержимое ах большеравно адреса конца массива, то выходим из цикла
mov [ax],1
mov ax,ax+1
jmp do_smth_with_array
_break:
int 20h
Я мог ошибиться в строке "mov ax,ax+1", потому что не знаю точно, что нужно прибавлять, единицу или что-то другое, например, 8. Но общий смысл понятен - так вот будет ли это работать? =?
Знаю, можно попробовать и посмотреть но здесь мне могут и ответить, что и почему может не работать
Допустим, есть у меня массив данных:
; массив 5х5 в одномерном представлении
c0 db 0
c1 db 0
c2 db 0
c3 db 0
c4 db 0
...
c24 db 0
c_end db 'eoa' ;end of array
Могу я обрабатывать массив подобным образом:
mov ax,c0 ;помещаем _адрес_ данных в ах
do_smth_with_array:
cmp ax,c_end ;сравниваем адрес, содержащийся в ах, с адресом переменной, символизирующей конец массива
jae _break ;если содержимое ах большеравно адреса конца массива, то выходим из цикла
mov [ax],1
mov ax,ax+1
jmp do_smth_with_array
_break:
int 20h
Я мог ошибиться в строке "mov ax,ax+1", потому что не знаю точно, что нужно прибавлять, единицу или что-то другое, например, 8. Но общий смысл понятен - так вот будет ли это работать? =?
Знаю, можно попробовать и посмотреть но здесь мне могут и ответить, что и почему может не работать
Who is online
Users browsing this forum: No registered users and 29 guests