Начинающий

Applications development, KoOS API questions
  • Вопросы продолжаются)) Более менее разобрался с написанием драйвера. Вот только прога-запускатель должна как-то узнать загружен ли драйвер. У меня есть две идеи:
    1. Хэндл драйвера сохранять в файле и для проверки загруженности драйвера просто вызывает тестовую функцию драйвера.
    2. При первой загрузке драйвера создать именнованную память и в ней сохранить хэндл. При этом сразу ясно, загружен или нет драйвер. Вот только именнованую память надо как-то удерживать. Т. е. надо создать дополнительно процесс, который откроет эту память и не будет завершаться до конца работы ОС.
    Второй вариант в реализации, кажется, проще. Вот только висящий процесс мне не очень нравится. Как лучше? Что б потом переделывать не пришлось.
    Чем больше сыра, тем больше в нём дыр. Чем больше дыр, тем меньше в нём собственно сыра. Значит, чем больше сыра, тем меньше сыра!
  • Пардон за глупый вопрос)) Больше так не буду))
    Чем больше сыра, тем больше в нём дыр. Чем больше дыр, тем меньше в нём собственно сыра. Значит, чем больше сыра, тем меньше сыра!
  • Нужно просто загрузить драйвер. Система не будет повторно грузить уже загруженный драйвер, просто вернёт его хэндл.
    Сделаем мир лучше!
  • Нашёл в core\heap.inc:
    proc user_alloc_at stdcall, address:dword, alloc_size:dword
    Я так понял она выделяет виртуальную память по нужному адресу. Если да, то это то что мне нужно. Вот только её надо как-то вызвать. Можно и из драйвера. Вот только как?
    Чем больше сыра, тем больше в нём дыр. Чем больше дыр, тем меньше в нём собственно сыра. Значит, чем больше сыра, тем меньше сыра!
  • В core\exports.inc добавил экспорт этой функции. Драйвер работает, память выделяется. Всё супер вообщем. Вот только теперь у меня слегка поправленная версия ядра.
    Чем больше сыра, тем больше в нём дыр. Чем больше дыр, тем меньше в нём собственно сыра. Значит, чем больше сыра, тем меньше сыра!
  • Где? user_alloc есть, а вот user_alloc_at не вижу.
    Чем больше сыра, тем больше в нём дыр. Чем больше дыр, тем меньше в нём собственно сыра. Значит, чем больше сыра, тем меньше сыра!
  • FAQ продолжается :) Есть файл. Его надо в каком есть виде засунуть в бинарник. Файл содержит картинку в формате BGR. И ещё надо, что бы был указатель на него. С помощью загрузки из файла не удобно, да потери в размере значительные.
    Чем больше сыра, тем больше в нём дыр. Чем больше дыр, тем меньше в нём собственно сыра. Значит, чем больше сыра, тем меньше сыра!
  • Code: Select all

    ;..............
    pointer_to_my_file:
    file 'file.dat'
    ;..............
  • Спасибо, то что надо.
    Чем больше сыра, тем больше в нём дыр. Чем больше дыр, тем меньше в нём собственно сыра. Значит, чем больше сыра, тем меньше сыра!
  • Народ, помогите пожалуйста! Мне нужно знать, как расчитать смещение для документа и размер строк на 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)
    Вот как-то так.
    Attachments
    VSrollBars.7z (14.11 KiB)
    Downloaded 280 times
  • Вот, нашёл следующие строки (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, работает обсалютно по другому.
  • Спасибо всем, за игру во всеобщую молчанку! :D

    Полное непонимание логики работы scrollbar'а, из либы box_lib, запустило процесс в моём мозгу, и я, кажется, придумал свой алгортитм, для своего scrollbar'а. Сейчас буду его обкатывать, чтобы понять, жизнеспособен он или нет.
  • Rock_maniak_forever, ты можешь посмотреть и на TScrollWindow из FreshLib. Там все очень просто, хотя и некоторая функциональность недостает. Например нет бутонов. А кстати, нужны ли кому нибудь эти бутоны?
  • Who is online

    Users browsing this forum: No registered users and 39 guests