Board.KolibriOS.org

Official KolibriOS board
It is currently Sat Jan 25, 2020 11:28 pm

All times are UTC+03:00




Post new topic  Reply to topic  [ 1136 posts ]  Go to page Previous 127 28 29 30 3176 Next
Author Message
PostPosted: Sat Feb 18, 2012 9:21 pm 
Offline
Kernel Developer

Joined: Wed Mar 08, 2006 6:25 pm
Posts: 3952
Лучший вариант не задержка, а вызов 68.1 ака yield(). Планировщик отработает все остальные потоки и OS_IDLE, который уничтожит поток. Но это только в том случае если надо дождаться гарантированного освобождения ресурсов из очень маленького списка.
Практической необходимости в этом в 99.(9)% случаев я не вижу.


Top
   
PostPosted: Sat Feb 18, 2012 9:23 pm 
0CodErr wrote:
Если окно не помещается на экране, то меняются ли его размеры и координаты,
или же оно только так рисуется, чтобы уместиться?

Размеры большого окна корректируются до размеров текущего видеорежима. Если выводится маленькое окно, но его тело вылазит за пределы физических координат, то корректируются начальные координаты такого окна.
0CodErr wrote:
Как можно сделать, чтобы окно не реагировало на события мыши,
если над ним другое окно(либо частично перекрывается)?

Если окно отслеживает является ли оно верхним в оконном стеке, то при нормально реализованной логике окно не должно реагировать на события мыши, когда оно не вверху.
Если подразумевается режим "Stay On Top" (например, как в Виндовс), то такой функциональности в ядре не предусмотрено.
0CodErr wrote:
Хотелось бы обрабатывать события даже если окно не активно.

Непонятно какие события.


Top
   
 Post subject:
PostPosted: Sun Feb 19, 2012 2:42 pm 
Offline

Joined: Sun Oct 30, 2011 6:43 pm
Posts: 1499
SoUrcerer wrote:
Текущая панель меняет рабочую область экрана, кстати. Это может помочь.
Я бы не хотел так делать. Может так получиться, что моя панель будет не на всю ширину экрана, и тогда останется никогда неиспользуемое пространство. Это неправильно, я считаю.

SoUrcerer wrote:
...вид панели должен быть настраиваемым.
Она в определённой степени настраивается: можно менять цвета, высоту, количество запускаемых программ, параметры командной строки для них, иконки к программам.

Serge wrote:
Память выделенная 68.12 не освобождается до завершения всех потоков приложения.
Я хотел уточнить: здесь, ведь, не играет роли как именно поток завершён(насильственно или самостоятельно)?

Mario wrote:
Думается мне нужно сделать задержку 0,01 * 256 = 2,56 секунды, чтобы уж совсем надежно.
256 - это максимальное число потоков в системе? Тогда, если в будущем их будет больше, надо корректировать это значение. Наверное, всё-таки 68.1 подойдёт лучше.

Mario wrote:
0CodErr wrote:
Хотелось бы обрабатывать события даже если окно не активно.

Непонятно какие события.
События мыши.

Mario wrote:
Если окно отслеживает является ли оно верхним в оконном стеке, то при нормально реализованной логике окно не должно реагировать на события мыши, когда оно не вверху.
Если подразумевается режим "Stay On Top" (например, как в Виндовс), то такой функциональности в ядре не предусмотрено.
Нет, не "Stay On Top". Я бы вот как хотел:
если над моим окном какое-то другое, но закрывает его не полностью, то
в незакрытой области моё окно должно реагировать на события мыши(а в закрытой не должно).


Top
   
 Post subject: Re:
PostPosted: Sun Feb 19, 2012 3:19 pm 
0CodErr wrote:
если над моим окном какое-то другое, но закрывает его не полностью, то
в незакрытой области моё окно должно реагировать на события мыши(а в закрытой не должно).

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


Top
   
PostPosted: Sun Feb 19, 2012 3:33 pm 
Offline
Kernel Developer

Joined: Wed Mar 08, 2006 6:25 pm
Posts: 3952
0CodErr wrote:
Я хотел уточнить: здесь, ведь, не играет роли как именно поток завершён(насильственно или самостоятельно)?
Абсолютно никакой.


Top
   
PostPosted: Mon Mar 19, 2012 4:46 pm 
Offline
User avatar

Joined: Mon Oct 27, 2008 10:10 pm
Posts: 813
Как можно установить координату "горячей точки" курсора? Смотрел функцию 37.5 (установить курсор), в ней этого параметра нет.


Top
   
PostPosted: Mon Mar 19, 2012 4:58 pm 
Горячая точка устанавливается до активации курсора функцией 37.5, т.е. при загрузке курсора по 37.4. Смотри описание.


Top
   
PostPosted: Mon Mar 19, 2012 5:49 pm 
Offline
User avatar

Joined: Mon Oct 27, 2008 10:10 pm
Posts: 813
Пока не работает 37.4, горячая точка получается в левом верхнем углу, хотя задал координату 16,16.
Code:
mov edx,(16 shl 8)+16
shl edx,16
mov dx,2 ;LOAD_INDIRECT

Вроди должно быть по центру, если весь размер 32*32. Буду разбиратся что не так, если не получится буду рисовать кривые курсоры.


Top
   
PostPosted: Mon Mar 19, 2012 6:30 pm 
Может баг в ядре, а может ты что то не так делаешь - надо разбираться и смотреть код.


Top
   
PostPosted: Tue Mar 20, 2012 12:45 am 
IgorA
Никакого криминала в ядре я не нашел. Мне нужен твой код для просмотра - скинь в личку, если тебе нужна помощь.


Top
   
PostPosted: Tue Mar 20, 2012 1:54 am 
Offline
User avatar

Joined: Mon Oct 27, 2008 10:10 pm
Posts: 813
Я уже успел сделать ревизию 2482, в которой был мой код с курсорами. Есть файл (root)/programs/media/log_el/trunk/log_el.asm , в котором есть функция:
Code:
1984   proc set_pen_mode uses eax ebx ecx edx, mode:dword, icon:dword

там я изменил строки 1989-1990:
Code:
1989                   ;mov edx,((cx shl 8) + cy) shl 16
1990                   mov edx,2 ;LOAD_INDIRECT

Раньше было так:
Code:
mov edx,((16 shl 8) + 16) shl 16
mov dx,2 ;LOAD_INDIRECT

И при выборе карандаша (желательно синего) рисование всеравно происходит с левого верхнего угла курсора. Красный карандаш для тестирования лучше не брать, т. к. в нем я сделал выравнивание линий на первую прорисованую точку (что-бы провода не рисовались кривыми).


Attachments:
cursor_cx_cy.png
cursor_cx_cy.png [ 18.05 KiB | Viewed 839 times ]
Top
   
PostPosted: Tue Mar 20, 2012 6:02 pm 
Исправил в SVN r. 2483

Тот кто делал этот код в ядре, явно поленился проверить работоспособность реализации в этом конкретном случае. Впрочем не будем кидаться камнями - сами не без греха.


Top
   
PostPosted: Fri Apr 27, 2012 3:01 pm 
Offline
User avatar

Joined: Thu Apr 26, 2012 10:10 pm
Posts: 37
Здравствуйте, бона таго... Не уверен, что пишу туда, куда стоит, нотакой общий вопрос: как обстоят дела в КОС с базами данных? С работой с ними, то есть.


Top
   
PostPosted: Fri Apr 27, 2012 5:50 pm 
Offline
Just Flooding

Joined: Sat Jan 06, 2007 2:30 pm
Posts: 269
to Scampada
Примерно так: viewtopic.php?f=24&t=1163


Top
   
PostPosted: Sat Apr 28, 2012 7:22 pm 
Offline
User avatar

Joined: Thu Apr 26, 2012 10:10 pm
Posts: 37
Еще такой вопрос, думаю, лучше всего сюда.
Допустим, есть у меня массив данных:

; массив 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. ;) Но общий смысл понятен - так вот будет ли это работать? =?
Знаю, можно попробовать и посмотреть :mrgreen: но здесь мне могут и ответить, что и почему может не работать :roll:


Top
   
Display posts from previous:  Sort by  
Post new topic  Reply to topic  [ 1136 posts ]  Go to page Previous 127 28 29 30 3176 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:  
Powered by phpBB® Forum Software © phpBB Limited