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

Discussing libraries simplifying applications development
  • 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
    
    указывать в еденицах строк.
  • 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.
    "Any intelligent fool can make things bigger, more complex, and more violent. It takes a touch of genius -- and a lot of courage -- to move in the opposite direction." Albert Einstein
  • Изменения в 1064 ревизи. Добавлен макрос load_lib.mac. Этот макрос служит для загрузки различных библиотек. Макрос имеет 2 модуля для загрузки это:
    - test_load_library. Основная задача модуля - это проверка, если загружаемая либа в текущей дирректории, а если ее нет, проверка системной дирректории. Далее происходит импорт. Если либа так и не была найдена, создается окно с ошибкой. Если при импорте ошибка, то создается окно и выводиться в него код ошибки.

    - load_library. Основная задача модуля - это проверка если загружаемая либа в системной дирректории, а если ее нет, проверка текущей дирректории, от куда была запущена программа. Далее происходит импорт. Если либа так и не была найдена, создается окно с ошибкой. Если при импорте ошибка, то создается окно и выводиться в него код ошибки.
  • IgorA wrote:Немного улутшил программу:
    Читал что вроди макрос новый сделали для загрузки библиотек ?
    Да, новый макрос сейчас находитсья в опытной эксплуатации и доработке.
    Макрос позволяет загружать библиотеку/библиотеки. Существует 2 разновидности макросов, отличия только в логике работы.
    В первом макросе: В начале проверяется системная папка, затем текущая.
    Во втором макросе: В начале проверяется текущая папка, затем системная.
    +++
    Если по указанному пути не найдена либа - формируется окно с сообщением о том что либа не найдена.
    Далее, при импорте, если возникает ошибка, так же формируется окно с сообщением об ошибке.
    Сейчас алгоритм линейный. Т.е. пока не закроете текущее сформированное окно об ошибке программа не будет дальше выполняться.
    Допустим, вам хочеться проверить есть ли либа, но отсутствие ее для программы не критично. После отрабоки макроса загрузки, в eax - код возврата.
    Альфа версия макроса доступна на SVN. ...\develop\libraries\box_lib\trunk\load_lib.mac.
    Пример использования - приложение editbox_ex.asm.
  • Альфа версия, доработан макрос 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:
    Attachments
    ALFA version
    Downloaded 267 times
  • Обновление
    Attachments
    alfa_box_lib.7z (47.98 KiB)
    Downloaded 279 times
  • Поддержит ли сообщество переписывание программ, использующих макросы editbox, checkbox,radiobutton на то, что бы программы использовали системную библиотеку box_lib.obj ? Переписывание даст экономию ~ 1 кб для каждой программы. Я могу переписать программы RDSAVE, RUN, SCRNSHOOT и другие.
  • Переделал для примера RUN программу. Лучше всего оценивать упакованную kpack программу. Старая версия с макросами упакованная занимает 2175 байт, а новая версия, в которой подключается библиотека занимает 1248 байт. Т.е. экономия составляет 927 байт. Однако, при работе новая версия в ОЗУ занимает значительно больше места.
    Программа RUN залита на SVN - огромная просьба провести тестирование программы.
  • to ALL
    Если найдуться желающие действительно писать на MSVC++, специально для них, я напишу обертки на C++ для макроса load_lib.mac и сделаю несколько примеров на MSVC++, как можно быстро разрабатывать код используя системную библиотеку.
  • <Lrz>
    Алексей, блин, у мну такое очучение последнее время, что ты прям вчера родился... Ну, нах оно им нужно?! Они же сюда оттянуться ходют - не больше не меньше...

    Возможно будут пользоваться 2-3 человека от силы, но не сейчас и не для того к чему ты призываешь.
  • Я не теряю надежды, сейчас мало людей будут писать на асме для Колибри, разработчиков знающий С++ больше, есть вероятность, что кто-то захочет писать/портировать программу, и вот для этого случая можно будет использовать системную библиотеку.
    В общем, если кому нужны будут обертки и примеры использования на MSVC++ пишем мне в PM.
  • <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 байт)
    Программа работает нормально.
  • Сделал описание, как можно использовать макрос load_lib.mac.
    Выкладываю демо
    Замечания, предложения, и т.д. прошу в личку.
    Attachments
    prog_guide.7z (18.11 KiB)
    Downloaded 278 times
  • <Lrz> wrote:Программа RUN залита на SVN - огромная просьба провести тестирование программы.
    Пытался запустить ac97snd с файлом mp3, содержащим пробелы в имени. Run пишет, что программа успешно запущена, но на самом деле ничего не запустилось, хотя я заключил имя файла в кавычки.
  • Who is online

    Users browsing this forum: No registered users and 5 guests