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.
Кстати пример вот в таком виде намного более удобен для восприятия:
Я имею ввиду оформление и использование 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
Проблема все-же не в скроллбаре, а в невалидном для 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:
-
- pb_lib.obj должен быть в "/sys/lib"
Downloaded 363 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 пока не смотрел. Мне пришлось изобрести свой прогрессбар - можно увидеть в Лизе и ещё двум программам он уже нужен, а включать код прогрессбара в каждую - дополнительные расходы. Так что я за добавление.