Page 2 of 29

Re: box_lib.obj - библиотека gui компонентов

Posted: Sun Mar 08, 2009 7:38 pm
by IgorA
немного просветили, по поводу вопросов скажу еще:
Я не совсем понял как возникла твоя ситуация.
я имел ввиду следующее, когда задан стиль окна в 0-й функции :
Функция 0 - определить и нарисовать окно
.........
Параметры:
* edx = 0xXYRRGGBB, где:
* X = DCBA (биты)
.........
* B = 1 - координаты всех графических примитивов задаются
относительно клиентской области окна
то перерисовка меню под окном (после закрытия меню) не работает правильно. Есть 2 варианта программки 1-я в которой B = 1 и перерисовка сдвинута ровно на размеры скина, а во 2-й стиль B = 0 и все нормально.
Если у тебя в процессе работы приограммы поменялся системный скин
пока скин при работе не меняю

Re: box_lib.obj - библиотека gui компонентов

Posted: Mon Mar 09, 2009 1:21 am
by Mario
IgorA
Дело в том что функция 36 работает исключительно с координатами экрана. Надо подумать как учесть в компоненте еще и эту фичу с оносительными координатами графических примитивов.
Было бы хорошо получить исходник который у тебя восстанавливает сдвинутое изображение. Это могло бы ускорить решение вопроса, мыло мое mario79[dog]bk[dot]ru или можешь здесь прикрепить к своему посту.


17.00 MCK После беседы с Mike.dld (автор B=1) сделал пару поправок в MenuBar - ревизия 1049. Попробуй, должно помочь. Есно библиотеку надо откомпилить и закинуть куда надо (в записимости откуда ты ее загружаешь).

З.Ы. Выложенный пример проверил, глюка нет. Кстати визуально наблюдается несоответсвие параметров которые предоставляются скроллбару. Если уж рабоатешь с количеством строк текста, то надо все три параметра:

Code: Select all

.max_area   dd 0  ;+16
.cur_area    dd 0  ;+20
.position     dd 0  ;+24
указывать в еденицах строк.

Re: box_lib.obj - библиотека gui компонентов

Posted: Mon Apr 13, 2009 10:18 pm
by hidnplayr
A little enlightnment about SVN revision #1060:

The changes made export two extra functions, wich should be implemented in all KolibriOS library's IMHO.

The problem I had before was the lib-init function was not exported.
So when using the standard dll macro's for kolibrios (http://new.kolibrios.org/browser/progra ... st/dll.inc),
the program crashed because lib-init was not found. (wich also means there is an error/bug in the macro's...)

Besides this little futility, I think box-lib is a good initiative and it works great.

Re: box_lib.obj - библиотека gui компонентов

Posted: Wed Apr 15, 2009 4:24 pm
by <Lrz>
Изменения в 1064 ревизи. Добавлен макрос load_lib.mac. Этот макрос служит для загрузки различных библиотек. Макрос имеет 2 модуля для загрузки это:
- test_load_library. Основная задача модуля - это проверка, если загружаемая либа в текущей дирректории, а если ее нет, проверка системной дирректории. Далее происходит импорт. Если либа так и не была найдена, создается окно с ошибкой. Если при импорте ошибка, то создается окно и выводиться в него код ошибки.

- load_library. Основная задача модуля - это проверка если загружаемая либа в системной дирректории, а если ее нет, проверка текущей дирректории, от куда была запущена программа. Далее происходит импорт. Если либа так и не была найдена, создается окно с ошибкой. Если при импорте ошибка, то создается окно и выводиться в него код ошибки.

Re: box_lib.obj - библиотека gui компонентов

Posted: Thu Apr 23, 2009 6:25 am
by <Lrz>
IgorA wrote:Немного улутшил программу:
Читал что вроди макрос новый сделали для загрузки библиотек ?
Да, новый макрос сейчас находитсья в опытной эксплуатации и доработке.
Макрос позволяет загружать библиотеку/библиотеки. Существует 2 разновидности макросов, отличия только в логике работы.
В первом макросе: В начале проверяется системная папка, затем текущая.
Во втором макросе: В начале проверяется текущая папка, затем системная.
+++
Если по указанному пути не найдена либа - формируется окно с сообщением о том что либа не найдена.
Далее, при импорте, если возникает ошибка, так же формируется окно с сообщением об ошибке.
Сейчас алгоритм линейный. Т.е. пока не закроете текущее сформированное окно об ошибке программа не будет дальше выполняться.
Допустим, вам хочеться проверить есть ли либа, но отсутствие ее для программы не критично. После отрабоки макроса загрузки, в eax - код возврата.
Альфа версия макроса доступна на SVN. ...\develop\libraries\box_lib\trunk\load_lib.mac.
Пример использования - приложение editbox_ex.asm.

Re: box_lib.obj - библиотека gui компонентов

Posted: Mon May 04, 2009 1:53 pm
by <Lrz>
Альфа версия, доработан макрос load_lib.mac Пример испльзования в editbox_ex.asm.
Полноценная загрузка библиотеки /библиотек.
Тестирование привествуется )

Сейчас, если нужно подключить более 1 либы, нужно использовать другие макросы.
Доступно 4 макроса:
a) Загрузить только 1 либу
1. Обычный - load_library
2. Системный - sys_load_library
б) Зазгрузить от 2-х либ и более.
1.Обычный - load_libraries
2.Системный - sys_load_libraries
=============
Существенная разница в том, что макросы группы а), требуют следующей структуры:
load_library library_name, cur_dir_path, library_path, system_path, \
err_message_found_lib, head_f_l, myimport, err_message_import, head_f_i
Структура однатипна для группы макросов а).

Для группы макросов б) нужна другая структура, она чем-то похожа на editbox'овскую.
Начнем с того, что любой макрос из группы б) требует всего 2 параметра на вход.

load_libraries l_libs_start, end_l_libs
- т.е. начало и конец блока из структур аналогичных для первого макроса структур.
Вот эта структура - в самом низу макроса load_lib.mac

struc l_libs library_name, cur_dir_path, library_path, system_path, err_message_found_lib, head_f_l, myimport, err_message_import, head_f_i
; struct for loading libraries
{
library_name dd library_name
cur_dir_path dd cur_dir_path
library_path dd library_path
err_message_found_lib dd err_message_found_lib
head_f_l dd head_f_l
myimport dd myimport
err_message_import dd err_message_import
head_f_i dd head_f_i
status_lib dd 0x0 ;status of load library
}
- Смысл в том, что после обработки группы макросов можно самостоятельно проверить на сколько успешны загрузились либы. В каждой структуре есть поле status_lib, при успешной загрузе - поле содержит 0х0
1-я ошибка если путь не найден - выставляется значение 0х1
2-я ошибка если импорт косячный - выставляется значение 0х2
Это сделано для того, что бы можно было запускать прогу, даже если нет либ, допустим которые нужны только для расширения, т.е. желаемые либы.
Итак, для инициализации загрузки нескольких либ нужно сделать следующее:
1) В коде своей программы создаешь массив из структур загружаемых либ.(Смотри ниже)
2) Обрати внимание, что не нужно инициализировать status_lib!
Она инициализируется автоматически.
3) После отработки макроса, возможно будет желание узнать какая либа не загрузилась, понадобиться еще одно значение
- ll_struc_size - это размер структуры в байтах.
Т.е. как проверить какая либа с ошибкой загрузилась
-
после макроса делаем следующее
mov ebp,l_libs_start
mov ecx,((end_l_libs-l_libs_start)/ll_struc_size) ;ecx содержит кол-во библиотек всего в твоей структуре.
i_loop:
cmp [ebp+ll_struc_size-4],0
jnz exit
add ebp,ll_struc_size
loop i_loop
;данный цикл позволяет проверить удачно ли загрузились либа, если нет - выходит из цикла, дальше можно завершить программу передав упрление на
or eax,-1
int 0x40
;(ll_struc_size-4) - смещение до status_lib - т.е. до состояния
Можно выборочно проверить код загрузки конкретной или критичной для работы программы либы так:
mov ebp,library02
cmp [ebp+ll_struc_size-4],0
jnz exit
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
l_libs_start:
library01 library_name, cur_dir_path, library_path, system_path, err_message_found_lib, head_f_l, myimport, err_message_import, head_f_i
library02 library_name, cur_dir_path, library_path, system_path, err_message_found_lib, head_f_l, myimport, err_message_import, head_f_i
end_l_libs:

Re: box_lib.obj - библиотека gui компонентов

Posted: Tue May 05, 2009 1:49 pm
by <Lrz>
Обновление

Re: box_lib.obj - библиотека gui компонентов

Posted: Sun May 10, 2009 8:23 am
by <Lrz>
Поддержит ли сообщество переписывание программ, использующих макросы editbox, checkbox,radiobutton на то, что бы программы использовали системную библиотеку box_lib.obj ? Переписывание даст экономию ~ 1 кб для каждой программы. Я могу переписать программы RDSAVE, RUN, SCRNSHOOT и другие.

Re: box_lib.obj - библиотека gui компонентов

Posted: Sun May 10, 2009 9:37 pm
by <Lrz>
Переделал для примера RUN программу. Лучше всего оценивать упакованную kpack программу. Старая версия с макросами упакованная занимает 2175 байт, а новая версия, в которой подключается библиотека занимает 1248 байт. Т.е. экономия составляет 927 байт. Однако, при работе новая версия в ОЗУ занимает значительно больше места.
Программа RUN залита на SVN - огромная просьба провести тестирование программы.

Re: box_lib.obj - библиотека gui компонентов

Posted: Sun May 10, 2009 9:48 pm
by <Lrz>
to ALL
Если найдуться желающие действительно писать на MSVC++, специально для них, я напишу обертки на C++ для макроса load_lib.mac и сделаю несколько примеров на MSVC++, как можно быстро разрабатывать код используя системную библиотеку.

Re: box_lib.obj - библиотека gui компонентов

Posted: Mon May 11, 2009 12:09 am
by Mario
<Lrz>
Алексей, блин, у мну такое очучение последнее время, что ты прям вчера родился... Ну, нах оно им нужно?! Они же сюда оттянуться ходют - не больше не меньше...

Возможно будут пользоваться 2-3 человека от силы, но не сейчас и не для того к чему ты призываешь.

Re: box_lib.obj - библиотека gui компонентов

Posted: Mon May 11, 2009 4:44 am
by <Lrz>
Я не теряю надежды, сейчас мало людей будут писать на асме для Колибри, разработчиков знающий С++ больше, есть вероятность, что кто-то захочет писать/портировать программу, и вот для этого случая можно будет использовать системную библиотеку.
В общем, если кому нужны будут обертки и примеры использования на MSVC++ пишем мне в PM.

Re: box_lib.obj - библиотека gui компонентов

Posted: Mon May 11, 2009 3:25 pm
by shurf
<Lrz> wrote:Программа RUN залита на SVN - огромная просьба провести тестирование программы.
Ядро 1067, образ 0.7.5.0, qemu 0.10.1, fasm (linux) version 1.67.38
Размер программы на диске: было 2097, стало 1247 (разница в 850 байт)
Размер программы в памяти: было 8000, стало 20480 (разница в 12480 байт)
Программа работает нормально.

Re: box_lib.obj - библиотека gui компонентов

Posted: Thu May 14, 2009 6:12 am
by <Lrz>
Сделал описание, как можно использовать макрос load_lib.mac.
Выкладываю демо
Замечания, предложения, и т.д. прошу в личку.

Re: box_lib.obj - библиотека gui компонентов

Posted: Wed Jun 03, 2009 8:49 am
by DmitrySokolowsky
<Lrz> wrote:Программа RUN залита на SVN - огромная просьба провести тестирование программы.
Пытался запустить ac97snd с файлом mp3, содержащим пробелы в имени. Run пишет, что программа успешно запущена, но на самом деле ничего не запустилось, хотя я заключил имя файла в кавычки.