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

Discussing libraries simplifying applications development
  • Спасибо, Serge!
    (set bit permits notice on event)
    Очень полезная возможность. А давно она существует? В Wiki( http://wiki.kolibrios.org/wiki/SysFn40/ru ) же этого нет.
    А то я в своей панельке(тут есть скриншот viewtopic.php?p=39992#p39992 ) самодельную использовал.
  • Почти год. svn #2410 #2414
  • Да, я и запамятовал, что для Fplay было сделано это. Больше вроде нигде не использовалось, а рабочее решение (которое я предложил) использовано во многих приложениях. Обычно не меняют по принципу - "работает хорошо? не трогай!".
    Всем чмоки в этом проекте! Засуньте эти 11 лет себе в жопу!
  • Spoiler:

    Code: Select all

    org 0
    BITS 32
    
    STACK_SIZE      equ 256
    
    MENUET01           db 'MENUET01'
    version            dd 1
    program.start      dd start_
    program.end        dd end_
    program.memory     dd end_ + STACK_SIZE
    program.stack      dd end_ + STACK_SIZE
    program.params     dd 0
    program.path       dd 0
    start_:
    jmp main
    
    
    
    REDRAW_EVENT               equ 1
    KEY_EVENT                  equ 2
    BUTTON_EVENT               equ 3
    MOUSE_EVENT                equ 6
    
    
    
    
    
        
    box_lib dd 0
    
    scrollbar1:
      .size_x         dw 15
      .start_x        dw 20
      .size_y         dw 300
      .start_y        dw 20
      .btn_high       dd 15
      .type           dd 1
      .max_area       dd 30
      .cur_area       dd 7
      .position       dd 0
      .bckg_col       dd 0xEEEEEE
      .frnt_col       dd 0xBBDDFF
      .line_col       dd 0
      .redraw         dd 0
      .delta          dw 0
      .delta2         dw 0
      .r_size_x       dw 0
      .r_start_x      dw 0
      .r_size_y       dw 0
      .r_start_y      dw 0
      .m_pos          dd 0
      .m_pos_2        dd 0
      .m_keys         dd 0
      .run_size       dd 0
      .position2      dd 0
      .work_size      dd 0
      .all_redraw     dd 1
      .ar_offset      dd 10
        
    		
    scrollbar_v_draw     dd 0
    scrollbar_v_mouse    dd 0
    
    
    sz_box_lib                  db "/sys/lib/box_lib.obj",0
    sz_scrollbar_v_draw         db "scrollbar_v_draw",0
    sz_scrollbar_v_mouse        db "scrollbar_v_mouse",0
    
    
    
    main:
    
        ; set.event
        mov eax, 40
        mov ebx, 39
        int 64
        
            push sz_box_lib
        call load.library
        mov [box_lib], eax
        
            push dword[box_lib]
            push sz_scrollbar_v_draw
        call getprocaddress
        mov [scrollbar_v_draw], eax
        
            push dword[box_lib]
            push sz_scrollbar_v_mouse
        call getprocaddress
        mov [scrollbar_v_mouse], eax
        
    
        
        call on_redraw
        
    .loop:
    
          ; wait.event
          mov eax, 10
          int 64
    
          cmp eax, REDRAW_EVENT
          jne .check_key
              call on_redraw
              jmp .loop
              
    .check_key:
    
          cmp eax, KEY_EVENT
          jne .check_button
              ; get.key.code
              mov eax, 2
              int 64
              jmp .loop
    
                
          
    .check_button:
    
          cmp eax, BUTTON_EVENT
          jne .check_mouse
    
    				; program.terminate
    				or eax, -1
    				int 64
              
                
          
    .check_mouse:
    
          cmp eax, MOUSE_EVENT
          jne .loop
              
                push scrollbar1
            call [scrollbar_v_mouse]
    				
    
    				call draw_scrollbar_position
    				
            jmp .loop
    
    
    draw_scrollbar_position:
    	; draw.number
    	mov eax, 47
    	mov ebx, 196608 ; decimal, count = 3
    	mov ecx,[scrollbar1.position]
    	mov edx, 3276850 ; 50, 50
    	mov esi, 40000000h
    	mov edi, 00FFFFFFh  
    	int 64
    ret				
    				
    
    on_redraw:
        
        ; redraw.start
        mov eax, 12
        mov ebx, 1
        int 64
    
        ; draw.window
        xor eax, eax
        mov ebx, 400
        mov ecx, 400
        mov edx, 240000DDh
        int 64
    
    		mov [scrollbar1.all_redraw], dword 1
        
            push scrollbar1
        call [scrollbar_v_draw]
        
    		call draw_scrollbar_position
    		
        ; redraw.finish
        mov eax, 12
        mov ebx, 2
        int 64
        
    ret
    
    
    
    
    load.library:
      mov eax, 68
      mov ebx, 19
      mov ecx, [esp + 4]
      int 64
      ret 4
    ;
    
    getprocaddress:
      mov   edx, [esp + 8] ; hlib
      xor   eax, eax
      test edx, edx ; If hlib = 0 then goto .end
      jz  .end
      
      .next:      
        cmp  [edx], dword 0 ; If end of export table then goto .end
        jz  .end
    
              xor  eax, eax
              mov  esi, [edx]
              mov  edi, [esp + 4] ; name
              
              .next_: 
                lodsb
                scasb
              jne  .fail
                or  al, al
              jnz  .next_
              jmp .ok
            .fail:  
    
          add  edx, 8
        jmp  .next
        
       .ok:               ; return address
          mov  eax, [edx + 4]
       .end:   
    ret 8
    ;
    
    end_:
    
    
    
    Передвинуть ползунок до конца вниз, нажать на скроллбаре кнопку со стрелочкой вниз.
  • 0CodErr wrote:Передвинуть ползунок до конца вниз, нажать на скроллбаре кнопку со стрелочкой вниз.
    Исправлено в SVN r. 3353.

    Кстати пример вот в таком виде намного более удобен для восприятия:
    Downloaded 373 times
    Я имею ввиду оформление и использование mcall
    Всем чмоки в этом проекте! Засуньте эти 11 лет себе в жопу!
  • SVN r. 3358 - EditBox учитывает нажатые клавиши Win (и перестает принимать символы), это правильно работает лишь для ядра r.3356 или последующих. Поскольку используется флаги индикации Win клавиш, получаемых ф.66.3
    Всем чмоки в этом проекте! Засуньте эти 11 лет себе в жопу!
  • Leency wrote:Баг со скроллом. Наглядно. Без СМС. Без регистрации. Звук в видео ЕСТЬ.

    https://docs.google.com/file/d/0B7UOAbB ... edit?pli=1
    Проблема все-же не в скроллбаре, а в невалидном для RTFREAD файле. На видео достаточно отчетливо видна куча кракозябр, вероятно это табличное или еще какое-то форматирование. Сам открываемый файл на рассмотрение не предоставлен. RTFREAD поддерживает собственно формат RTF не полностью. Когда открывается обычный - даже очень большой файл (к примеру у меня есть мануал Fasm на русском языке в формате RTF), то такого эффекта не наблюдается. Показанный пример считаю бездоказательным в отношении предполагаемого бага в scrollbar.
    Всем чмоки в этом проекте! Засуньте эти 11 лет себе в жопу!
  • Для приложения Desktop я "изобрел" элемент Frame (рамка).
    viewtopic.php?f=42&t=1509&start=17
    Имеет ли смысл сделать такой элемент в библиотеку? Будет ли востребовано?
    Всем чмоки в этом проекте! Засуньте эти 11 лет себе в жопу!
  • Судя по весьма неплохому результату, элемент ободок в библиотеке не помешает.
    Из хаоса в космос
  • Leency wrote:Судя по весьма неплохому результату, элемент ободок в библиотеке не помешает.
    Требуется дизайнерский пиксельхантинг, может там полоски местами переставить или еще чего? А то у нас хардкордных программистов квадратно-гнездовой прямоугольный способ построения плоскостей элементов.
    Всем чмоки в этом проекте! Засуньте эти 11 лет себе в жопу!
  • И так нормально.
    Из хаоса в космос
  • Идея. Добавить в библиотеку ProgressBar.

    Мой вариант:
    Spoiler:Image
    pb_lib.obj должен быть в "/sys/lib"
    Downloaded 363 times
    pb.asm (4.05 KiB)
    Downloaded 288 times
    pb_test.asm (4.5 KiB)
    Downloaded 278 times
    Почему-то, когда окно активное, скриншотер его сворачивает, и скриншот не получается.
  • 0CodErr
    У тебя есть аккаунт SVN? Если есть прикрути, если нет аккаунта, то нужно попросить у админов.
    Я сам давно хотел выдрать код из KFM и прикрутить в качестве компонента, но руки не дошли.
    Всем чмоки в этом проекте! Засуньте эти 11 лет себе в жопу!
  • 0CodErr
    Выглядит хорошо внешне, в API пока не смотрел. Мне пришлось изобрести свой прогрессбар - можно увидеть в Лизе и ещё двум программам он уже нужен, а включать код прогрессбара в каждую - дополнительные расходы. Так что я за добавление.
    Last edited by Leency on Fri Apr 12, 2013 2:29 pm, edited 2 times in total.
    Из хаоса в космос
  • Who is online

    Users browsing this forum: No registered users and 15 guests