Page 11 of 12

Re: Начинающий

Posted: Thu Jan 17, 2013 5:43 pm
by GerdtR
Спасибо)

Re: Начинающий

Posted: Sat Jan 19, 2013 4:00 pm
by GerdtR
Вопросы продолжаются)) Более менее разобрался с написанием драйвера. Вот только прога-запускатель должна как-то узнать загружен ли драйвер. У меня есть две идеи:
1. Хэндл драйвера сохранять в файле и для проверки загруженности драйвера просто вызывает тестовую функцию драйвера.
2. При первой загрузке драйвера создать именнованную память и в ней сохранить хэндл. При этом сразу ясно, загружен или нет драйвер. Вот только именнованую память надо как-то удерживать. Т. е. надо создать дополнительно процесс, который откроет эту память и не будет завершаться до конца работы ОС.
Второй вариант в реализации, кажется, проще. Вот только висящий процесс мне не очень нравится. Как лучше? Что б потом переделывать не пришлось.

Re: Начинающий

Posted: Sun Jan 20, 2013 11:46 pm
by GerdtR
Пардон за глупый вопрос)) Больше так не буду))

Posted: Mon Jan 21, 2013 11:53 am
by CleverMouse
Нужно просто загрузить драйвер. Система не будет повторно грузить уже загруженный драйвер, просто вернёт его хэндл.

Re: Начинающий

Posted: Fri Jan 25, 2013 5:08 pm
by GerdtR
Нашёл в core\heap.inc:
proc user_alloc_at stdcall, address:dword, alloc_size:dword
Я так понял она выделяет виртуальную память по нужному адресу. Если да, то это то что мне нужно. Вот только её надо как-то вызвать. Можно и из драйвера. Вот только как?

Re: Начинающий

Posted: Sun Jan 27, 2013 7:08 pm
by GerdtR
В core\exports.inc добавил экспорт этой функции. Драйвер работает, память выделяется. Всё супер вообщем. Вот только теперь у меня слегка поправленная версия ядра.

Re: Начинающий

Posted: Sun Jan 27, 2013 7:38 pm
by Asper

Re: Начинающий

Posted: Mon Jan 28, 2013 7:29 pm
by GerdtR
Где? user_alloc есть, а вот user_alloc_at не вижу.

Re: Начинающий

Posted: Sat Feb 02, 2013 1:47 am
by GerdtR
FAQ продолжается :) Есть файл. Его надо в каком есть виде засунуть в бинарник. Файл содержит картинку в формате BGR. И ещё надо, что бы был указатель на него. С помощью загрузки из файла не удобно, да потери в размере значительные.

Re: Начинающий

Posted: Sat Feb 02, 2013 1:55 am
by 0CodErr

Code: Select all

;..............
pointer_to_my_file:
file 'file.dat'
;..............

Re: Начинающий

Posted: Sat Feb 02, 2013 1:58 am
by GerdtR
Спасибо, то что надо.

Re: Начинающий

Posted: Mon Feb 04, 2013 2:15 am
by Rock_maniak_forever
Народ, помогите пожалуйста! Мне нужно знать, как расчитать смещение для документа и размер строк на scrollbar'е. Я хочу сделать автоматический расчёт внутри своего макроса scrollbar'а.

У меня структура для значений scrollbar'а, такая:

Code: Select all

 scroller_position:  dd  0      ; текущее положение бегунка.
 number_of_lines:    dd  4      ; число строк.
 line_size:          dd  3      ; размер одной строки.
Image

Я думаю, что если размер документа большой, то нужно взять максимальное число строкк на бегунке, и разделить на размер всего документа. Но тут есть проблема. Если документ чуть больше на одну строку, то смещение документа получается размером в один пиксель, а мне надо, чтобы смещение документа было в несколько пикселей, иначе будет сильная перерисовка. Или момжет надо делать по другому? Очень надо знать, как всё это расчитывается.

Посмотрел структуру в box_lib (чтобы понять принцип), но не понял, что значат следующие строки (так как, не понемаю всей картины в целом), вернее как они расчитываются:
sb_max_area - область максимальная, актуально когда не влазит в отображаемую область, т.е. случай активности компонента (весь максимальный размер документа)
sb_cur_area - область отображаемая (какая часть документа влазит в экран)
sb_position - позиция бегунка изменяемая от 0 до значения (sb_max_area-sb_cur_area)
Вот как-то так.

Re: Начинающий

Posted: Mon Feb 04, 2013 12:54 pm
by Rock_maniak_forever
Вот, нашёл следующие строки (460-477) в scrollbar.mac , в библиотекв box_lib.

Code: Select all

;*********************************
	mov	eax,sb_work_size
	mov	ebx,sb_max_area
	cmp	ebx,sb_cur_area
	ja	@f
	jmp	.no_size

@@: 
	imul	eax,sb_cur_area
	xor	edx,edx
	div	ebx
	cmp	eax,10
	jae	@f
	mov	eax,10
@@:
.no_size:
	mov	sb_run_size,eax
;*********************************
Не поййму что они делают. Зачем sb_work_size, умножать на sb_cur_area? Что это даст? И зачем число 10, тоже не понятно. Просто у меня scrollbar, работает обсалютно по другому.

Re: Начинающий

Posted: Mon Feb 04, 2013 2:20 pm
by Rock_maniak_forever
Спасибо всем, за игру во всеобщую молчанку! :D

Полное непонимание логики работы scrollbar'а, из либы box_lib, запустило процесс в моём мозгу, и я, кажется, придумал свой алгортитм, для своего scrollbar'а. Сейчас буду его обкатывать, чтобы понять, жизнеспособен он или нет.

Re: Начинающий

Posted: Mon Feb 04, 2013 4:11 pm
by johnfound
Rock_maniak_forever, ты можешь посмотреть и на TScrollWindow из FreshLib. Там все очень просто, хотя и некоторая функциональность недостает. Например нет бутонов. А кстати, нужны ли кому нибудь эти бутоны?