Page 16 of 29

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

Posted: Thu Feb 14, 2013 11:13 am
by Serge
0CodErr
Всё намного проще.

Code: Select all

======================================================================
=========== Function 40 - set the mask for expected events. ==========
======================================================================
The mask for expected events affects function working with events
10, 11, 23 - they notify only about events allowed by this mask.
Parameters:
  * eax = 40 - function number
  * ebx = mask: bit i corresponds to event i+1 (see list of events)
    (set bit permits notice on event)
    bit 31: active/inactive filter
    bit 31 = 0 - inactive window receive mouse events
    bit 31 = 1 - inactive window does not receive mouse events
    bit 30: cursor position filter
    bit 30 = 0 = the window receive mouse events if cursor
                 outside window
    bit 30 = 1 - the window does not receive mouse events if cursor
                 outside window
mcall 40, 0xC0000027

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

Posted: Thu Feb 14, 2013 11:48 am
by 0CodErr
Спасибо, Serge!
(set bit permits notice on event)
Очень полезная возможность. А давно она существует? В Wiki( http://wiki.kolibrios.org/wiki/SysFn40/ru ) же этого нет.
А то я в своей панельке(тут есть скриншот viewtopic.php?p=39992#p39992 ) самодельную использовал.

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

Posted: Thu Feb 14, 2013 11:55 am
by Serge
Почти год. svn #2410 #2414

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

Posted: Thu Feb 14, 2013 12:09 pm
by Mario_r4
Да, я и запамятовал, что для Fplay было сделано это. Больше вроде нигде не использовалось, а рабочее решение (которое я предложил) использовано во многих приложениях. Обычно не меняют по принципу - "работает хорошо? не трогай!".

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

Posted: Thu Mar 07, 2013 10:13 pm
by 0CodErr
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_:


Передвинуть ползунок до конца вниз, нажать на скроллбаре кнопку со стрелочкой вниз.

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

Posted: Fri Mar 08, 2013 4:14 pm
by Mario_r4
0CodErr wrote:Передвинуть ползунок до конца вниз, нажать на скроллбаре кнопку со стрелочкой вниз.
Исправлено в SVN r. 3353.

Кстати пример вот в таком виде намного более удобен для восприятия:
Downloaded 373 times
Я имею ввиду оформление и использование mcall

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

Posted: Fri Mar 08, 2013 9:21 pm
by Mario_r4
SVN r. 3358 - EditBox учитывает нажатые клавиши Win (и перестает принимать символы), это правильно работает лишь для ядра r.3356 или последующих. Поскольку используется флаги индикации Win клавиш, получаемых ф.66.3

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

Posted: Sat Mar 09, 2013 11:45 am
by Mario_r4
Leency wrote:Баг со скроллом. Наглядно. Без СМС. Без регистрации. Звук в видео ЕСТЬ.

https://docs.google.com/file/d/0B7UOAbB ... edit?pli=1
Проблема все-же не в скроллбаре, а в невалидном для RTFREAD файле. На видео достаточно отчетливо видна куча кракозябр, вероятно это табличное или еще какое-то форматирование. Сам открываемый файл на рассмотрение не предоставлен. RTFREAD поддерживает собственно формат RTF не полностью. Когда открывается обычный - даже очень большой файл (к примеру у меня есть мануал Fasm на русском языке в формате RTF), то такого эффекта не наблюдается. Показанный пример считаю бездоказательным в отношении предполагаемого бага в scrollbar.

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

Posted: Mon Apr 01, 2013 10:52 am
by Mario_r4
Для приложения Desktop я "изобрел" элемент Frame (рамка).
viewtopic.php?f=42&t=1509&start=17
Имеет ли смысл сделать такой элемент в библиотеку? Будет ли востребовано?

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

Posted: Tue Apr 02, 2013 12:28 am
by Leency
Судя по весьма неплохому результату, элемент ободок в библиотеке не помешает.

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

Posted: Tue Apr 02, 2013 12:56 am
by Mario_r4
Leency wrote:Судя по весьма неплохому результату, элемент ободок в библиотеке не помешает.
Требуется дизайнерский пиксельхантинг, может там полоски местами переставить или еще чего? А то у нас хардкордных программистов квадратно-гнездовой прямоугольный способ построения плоскостей элементов.

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

Posted: Tue Apr 02, 2013 1:27 am
by Leency
И так нормально.

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

Posted: Thu Apr 11, 2013 12:01 pm
by 0CodErr
Идея. Добавить в библиотеку 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
Почему-то, когда окно активное, скриншотер его сворачивает, и скриншот не получается.

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

Posted: Thu Apr 11, 2013 12:19 pm
by Mario_r4
0CodErr
У тебя есть аккаунт SVN? Если есть прикрути, если нет аккаунта, то нужно попросить у админов.
Я сам давно хотел выдрать код из KFM и прикрутить в качестве компонента, но руки не дошли.

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

Posted: Fri Apr 12, 2013 2:27 pm
by Leency
0CodErr
Выглядит хорошо внешне, в API пока не смотрел. Мне пришлось изобрести свой прогрессбар - можно увидеть в Лизе и ещё двум программам он уже нужен, а включать код прогрессбара в каждую - дополнительные расходы. Так что я за добавление.