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 ; размер одной строки.
Я думаю, что если размер документа большой, то нужно взять максимальное число строкк на бегунке, и разделить на размер всего документа. Но тут есть проблема. Если документ чуть больше на одну строку, то смещение документа получается размером в один пиксель, а мне надо, чтобы смещение документа было в несколько пикселей, иначе будет сильная перерисовка. Или момжет надо делать по другому? Очень надо знать, как всё это расчитывается.
Посмотрел структуру в 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
Спасибо всем, за игру во всеобщую молчанку!
Полное непонимание логики работы scrollbar'а, из либы box_lib, запустило процесс в моём мозгу, и я, кажется, придумал свой алгортитм, для своего scrollbar'а. Сейчас буду его обкатывать, чтобы понять, жизнеспособен он или нет.
Re: Начинающий
Posted: Mon Feb 04, 2013 4:11 pm
by johnfound
Rock_maniak_forever, ты можешь посмотреть и на
TScrollWindow из FreshLib. Там все очень просто, хотя и некоторая функциональность недостает. Например нет бутонов. А кстати, нужны ли кому нибудь эти бутоны?