Начинающий
-
Спасибо)Чем больше сыра, тем больше в нём дыр. Чем больше дыр, тем меньше в нём собственно сыра. Значит, чем больше сыра, тем меньше сыра!
Вопросы продолжаются)) Более менее разобрался с написанием драйвера. Вот только прога-запускатель должна как-то узнать загружен ли драйвер. У меня есть две идеи:
1. Хэндл драйвера сохранять в файле и для проверки загруженности драйвера просто вызывает тестовую функцию драйвера.
2. При первой загрузке драйвера создать именнованную память и в ней сохранить хэндл. При этом сразу ясно, загружен или нет драйвер. Вот только именнованую память надо как-то удерживать. Т. е. надо создать дополнительно процесс, который откроет эту память и не будет завершаться до конца работы ОС.
Второй вариант в реализации, кажется, проще. Вот только висящий процесс мне не очень нравится. Как лучше? Что б потом переделывать не пришлось.
1. Хэндл драйвера сохранять в файле и для проверки загруженности драйвера просто вызывает тестовую функцию драйвера.
2. При первой загрузке драйвера создать именнованную память и в ней сохранить хэндл. При этом сразу ясно, загружен или нет драйвер. Вот только именнованую память надо как-то удерживать. Т. е. надо создать дополнительно процесс, который откроет эту память и не будет завершаться до конца работы ОС.
Второй вариант в реализации, кажется, проще. Вот только висящий процесс мне не очень нравится. Как лучше? Что б потом переделывать не пришлось.
Чем больше сыра, тем больше в нём дыр. Чем больше дыр, тем меньше в нём собственно сыра. Значит, чем больше сыра, тем меньше сыра!
Пардон за глупый вопрос)) Больше так не буду))
Чем больше сыра, тем больше в нём дыр. Чем больше дыр, тем меньше в нём собственно сыра. Значит, чем больше сыра, тем меньше сыра!
Нужно просто загрузить драйвер. Система не будет повторно грузить уже загруженный драйвер, просто вернёт его хэндл.
Сделаем мир лучше!
Нашёл в core\heap.inc:
proc user_alloc_at stdcall, address:dword, alloc_size:dword
Я так понял она выделяет виртуальную память по нужному адресу. Если да, то это то что мне нужно. Вот только её надо как-то вызвать. Можно и из драйвера. Вот только как?
proc user_alloc_at stdcall, address:dword, alloc_size:dword
Я так понял она выделяет виртуальную память по нужному адресу. Если да, то это то что мне нужно. Вот только её надо как-то вызвать. Можно и из драйвера. Вот только как?
Чем больше сыра, тем больше в нём дыр. Чем больше дыр, тем меньше в нём собственно сыра. Значит, чем больше сыра, тем меньше сыра!
В core\exports.inc добавил экспорт этой функции. Драйвер работает, память выделяется. Всё супер вообщем. Вот только теперь у меня слегка поправленная версия ядра.
Чем больше сыра, тем больше в нём дыр. Чем больше дыр, тем меньше в нём собственно сыра. Значит, чем больше сыра, тем меньше сыра!
Так ведь есть уже
http://websvn.kolibrios.org/filedetails ... xports.inc
http://websvn.kolibrios.org/filedetails ... xports.inc
Где? user_alloc есть, а вот user_alloc_at не вижу.
Чем больше сыра, тем больше в нём дыр. Чем больше дыр, тем меньше в нём собственно сыра. Значит, чем больше сыра, тем меньше сыра!
FAQ продолжается Есть файл. Его надо в каком есть виде засунуть в бинарник. Файл содержит картинку в формате BGR. И ещё надо, что бы был указатель на него. С помощью загрузки из файла не удобно, да потери в размере значительные.
Чем больше сыра, тем больше в нём дыр. Чем больше дыр, тем меньше в нём собственно сыра. Значит, чем больше сыра, тем меньше сыра!
Code: Select all
;..............
pointer_to_my_file:
file 'file.dat'
;..............
Спасибо, то что надо.
Чем больше сыра, тем больше в нём дыр. Чем больше дыр, тем меньше в нём собственно сыра. Значит, чем больше сыра, тем меньше сыра!
Народ, помогите пожалуйста! Мне нужно знать, как расчитать смещение для документа и размер строк на scrollbar'е. Я хочу сделать автоматический расчёт внутри своего макроса scrollbar'а.
У меня структура для значений scrollbar'а, такая:
Я думаю, что если размер документа большой, то нужно взять максимальное число строкк на бегунке, и разделить на размер всего документа. Но тут есть проблема. Если документ чуть больше на одну строку, то смещение документа получается размером в один пиксель, а мне надо, чтобы смещение документа было в несколько пикселей, иначе будет сильная перерисовка. Или момжет надо делать по другому? Очень надо знать, как всё это расчитывается.
Посмотрел структуру в box_lib (чтобы понять принцип), но не понял, что значат следующие строки (так как, не понемаю всей картины в целом), вернее как они расчитываются:
У меня структура для значений 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)
- Attachments
-
-
VSrollBars.7z (14.11 KiB)Downloaded 282 times
-
Вот, нашёл следующие строки (460-477) в scrollbar.mac , в библиотекв box_lib.
Не поййму что они делают. Зачем sb_work_size, умножать на sb_cur_area? Что это даст? И зачем число 10, тоже не понятно. Просто у меня scrollbar, работает обсалютно по другому.
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
;*********************************
Спасибо всем, за игру во всеобщую молчанку!
Полное непонимание логики работы scrollbar'а, из либы box_lib, запустило процесс в моём мозгу, и я, кажется, придумал свой алгортитм, для своего scrollbar'а. Сейчас буду его обкатывать, чтобы понять, жизнеспособен он или нет.
Полное непонимание логики работы scrollbar'а, из либы box_lib, запустило процесс в моём мозгу, и я, кажется, придумал свой алгортитм, для своего scrollbar'а. Сейчас буду его обкатывать, чтобы понять, жизнеспособен он или нет.
Rock_maniak_forever, ты можешь посмотреть и на TScrollWindow из FreshLib. Там все очень просто, хотя и некоторая функциональность недостает. Например нет бутонов. А кстати, нужны ли кому нибудь эти бутоны?
Who is online
Users browsing this forum: No registered users and 3 guests