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

Discussing libraries simplifying applications development
  • punk_joker wrote:По поводу edit'а
    Так понимаю:
    shift - позиция после начала выделения
    shift_old - позиция до выделения

    Правильно? И эта позиция в символах?
    Сделай в событии

    Code: Select all

    on_mouse_move:
    debug("shift:");
    debugi(shift);
    debug("shift_old:");
    debugi(shift_old);
    
    Ну и повыделяй там разные участки в эдите, посмотри как оно будет меняться.
    Из хаоса в космос
  • SVN r.4601 поддержка системного буфера обмена для компонента Editbox, через клавиши Ctrl+C|V. Также следует учесть, что требуется ядро ревизии 4588 или более новое. Рока реализовано лишь грубое применение буфера обмена, т.е. при вставке в буфер копируются все данные из Editbox, и при вставке в Editbox все существующие данные перезаписываются новыми. В общем пока выделение текста синим цветом не учитывается в работе с буфером обмена.
    Всем чмоки в этом проекте! Засуньте эти 11 лет себе в жопу!
  • Кто-то может пофиксить следующий баг? Если scrollbar btn_height==0, то не рисовать эти кнопки вообще.
    Attachments
    4sEsemF.png
    4sEsemF.png (23.51 KiB)
    Viewed 6758 times
    Из хаоса в космос
  • Пожалуйста, пофиксите и тогда я гарантирую, что в течении пары дней покажу нечто удивительное.
    Из хаоса в космос
  • В чате же был дан ответ, как в текущем коде не отображать, так зачем лишняя работа?
    Spoiler:
    0CodErr « Сб мар 22, 2014 9:27 am » Leency: а у скроллбара есть флаг sb_all_redraw. "если поставить 0, то перерисовка происходит только для области бегунка."
    Флаг задумывался для другого, но в этом случае это приемлемое решение - оно действительно полностью отключает вывод боковых кнопок. Я как автор кода скроллбара гарантирую это.
    Всем чмоки в этом проекте! Засуньте эти 11 лет себе в жопу!
  • Я так понимаю, речь идет именно о "не рисовать кнопки прокрутки", действительно этот флаг пофиксит?
  • Разговор слепого с глухим...

    Вместо того чтобы попробовать и сказать "Марио пиздит" или "О, все хорошо придумано" лучше разведем бодягу на пару страниц темы.
    Всем чмоки в этом проекте! Засуньте эти 11 лет себе в жопу!
  • Я как раз пробовал. О, все хорошо придумано. Спасибо.
    Из хаоса в космос
  • Есть ли возможность сделать неизменяемый edit_box? Вариант не вызывать edit_box_key не подходить, так как должна быть возможность выделять текст с помощью SHIFT+ARROW.
  • Игнорируй все key, которые не равны Shift+left, shift+right.
    Из хаоса в космос
  • Предлагаю запостить сюда готовую обертку и шаблон для языка Си по использованию edit_box, у самого пока готовой нет, поэтому прошу помощи у общественности. Внимание приведенный код может быть не верным, посему прошу указать на ошибки.
    Для начала декларация структуры (размер равен 76 байтам, как и положено):
    Spoiler:

    Code: Select all

    typedef struct edit_box edit_box;
    struct edit_box
    {	
    	int width;
    	int left; 
    	int top; 
    	int color; 
    	int shift_color; 
    	int focus_border_color; 
    	int blur_border_color;
    	int text_color; 
    	int max; 
    	char *text; 
    	int mouse_variable; 
    	int flags;
    	int size;
    	int pos;
    	int offset;
    	int cl_curs_x;
    	int cl_curs_y; 
    	int shift;
    	int shift_old;
    };
    
    //далее в самом коде определяем новые edit_box 
    edit_box ed_bx1 = {.width=100, .left=50, ...}
    или
    edit_box ed_bx2;
    ed_bx2.width=100;
    ed_bx2.left=11 ...
    
    
    Далее импорт функций из библиотеки:
    Spoiler:

    Code: Select all

    typedef struct __attribute__((packed))
    {
    	char	*name __attribute__((packed));
    	void	*data __attribute__((packed));
    } struct_import;
    
    
    
    struct_import* lib_load(char *name)        //Для загрузки библиотеки (не только box_lib)
    {
            struct_import* val;
            asm volatile ("int $0x40":"=a"(val):"a"(68), "b"(19), "c"(name));
            return val;
    }
    
    void* lib_procload (struct_import *imp, char *name)        //Для загрузки необходимой функции.
    {
            int i;
            for (i=0;;i++)
                    if ( NULL == ((imp+i) -> name))
                            break;
                    else
                            if ( 0 == strcmp(name, (imp+i)->name) )
                                    return (imp+i)->data;
            return NULL;
    }
    
    void load_box_lib(){                                 //эта функция вызывается в main для подключения библиотеки
       struct_import *k;
       k = lib_load("/sys/lib/box_lib.obj");
    
       edit_box_draw = (__stdcall void (*) (edit_box))lib_procload(k, "edit_box");
       edit_box_key = (__stdcall void (*) (edit_box))lib_procload(k, "edit_box_key");
       edit_box_mouse = (__stdcall void (*) (edit_box))lib_procload(k, "edit_box_mouse");
    }
    
    Макеты функций:
    Spoiler:

    Code: Select all

    struct_import* lib_load(char *name);
    void* lib_procload (struct_import *imp, char *name);
    void load_box_lib();
    
    void (* __stdcall edit_box_draw)(edit_box bx);
    void (* __stdcall edit_box_key)(edit_box bx);
    void (* __stdcall edit_box_mouse)(edit_box bx);
    
  • А не проще заливать файлы на SVN по соседству с исходниками самой библиотеки, в соседней директории к примеру?
    Всем чмоки в этом проекте! Засуньте эти 11 лет себе в жопу!
  • Mario_r4 wrote:А не проще заливать файлы на SVN по соседству с исходниками самой библиотеки, в соседней директории к примеру?
    Как только удостоверюсь что код будет работать. То что я написал содержит ошибки которые я не могу найти. Если люди помогут их локализовать, то 100 пудово работающий код можно будет и на SVN. И потом я теперь 5 раз думаю перед тем как заливать что то на сервер.
  • right-hearted, ты привёл не весь код, и не известно, что должно было работать, а что — нет. Пока что не понятно, где именно ты предлагаешь искать ошибки.
  • Who is online

    Users browsing this forum: No registered users and 5 guests