Board.KolibriOS.org

Official KolibriOS board
It is currently Mon Jul 22, 2019 8:01 pm

All times are UTC+03:00




Post new topic  Reply to topic  [ 16 posts ]  Go to page 1 2 Next
Author Message
PostPosted: Sat Apr 23, 2011 9:58 pm 
Offline
Mentor
User avatar

Joined: Tue Jan 15, 2008 11:27 am
Posts: 752
На нетбуках, в которых нет индикаторов клавиатуры (NumLock, CapsLock, ScrollLock), можно теперь использовать следующую программу.
Пока очень сырая. Ещё не определился как более рационально выводить информацию - в заголовке или в клиентской области. Если второе - в виде кружочков, прямоугольников или кнопок...


Attachments:
keybi.zip [317 Bytes]
Downloaded 177 times
Top
   
PostPosted: Sat Apr 23, 2011 11:04 pm 
Offline
User avatar

Joined: Mon Apr 16, 2007 6:38 pm
Posts: 1222
если у ПО есть интерфейс, неплохо было бы его продемонстрировать на скриншотах.. (напр. именно сейчас мне хотелось бы взглянуть - но нет возможности закинуть файл в образ, а EXT4 и флешки на этой системе не видны)
а программа нужная, у меня на ноутбуке только капслока лампочка есмь =(

_________________
И мы уже давно не пешки,
Мы пули, мы орлы, и решки!
Война ютит бинарный код,
Умри, или иди вперед!


Top
   
PostPosted: Sun Apr 24, 2011 8:45 am 
Offline
Mentor
User avatar

Joined: Tue Jan 15, 2008 11:27 am
Posts: 752
Я уже упоминал, что как раз интерфейс не проработан. На данный момент программка выглядит так... В заголовке окна - 3 символа. Если символ "о", значит индикатор не горит, если "*" - горит. Программа работает даже когда её окно неактивно.


Attachments:
003.png
003.png [ 694 Bytes | Viewed 3734 times ]
002.png
002.png [ 748 Bytes | Viewed 3733 times ]
001.png
001.png [ 800 Bytes | Viewed 3733 times ]
Top
   
PostPosted: Sun Apr 24, 2011 9:57 am 
Offline
User avatar

Joined: Thu Mar 01, 2007 7:57 pm
Posts: 835
Отлично, осталось только научить её встраиваться в панель, как апплет.

_________________
Всех выше те, кто доброе творят,
И за дела добра не ждут наград,
Всем жертвуют для страждущих людей,
Не думая о выгоде своей.


Top
   
PostPosted: Sun Apr 24, 2011 10:52 am 
Offline
User avatar

Joined: Mon Apr 16, 2007 6:38 pm
Posts: 1222
там уж проще новую рисовать

для моей панели требуется чтобы программа умела рисовать в память, в том масштабе, который ей укажут (указывают один из размеров, второй она должна сообщить в ответ), причем, как в вертикальной, так и горизонтальной ориентации. Ну там еще протокол взаимодействия, но это на самом деле мелочи, и протокол пока в разработке.

P.S. как только закончится реализация хоть чего-то из следующего: SVG, BFG(vs), Flash, программа сможет не беспокоиться о масштабировании, а пока так

_________________
И мы уже давно не пешки,
Мы пули, мы орлы, и решки!
Война ютит бинарный код,
Умри, или иди вперед!


Top
   
PostPosted: Tue Apr 26, 2011 6:55 pm 
Offline
User avatar

Joined: Mon Oct 27, 2008 10:10 pm
Posts: 811
может быть стоит попробовать для этой программы сделать подключение библиотеки box_lib и использовать для индикации элементы checbox2 ?


Attachments:
File comment: это может выглядеть так
keybi.png
keybi.png [ 1.67 KiB | Viewed 3678 times ]
Top
   
PostPosted: Tue Apr 26, 2011 8:54 pm 
Offline
User avatar

Joined: Mon Apr 16, 2007 6:38 pm
Posts: 1222
зачем такой программе окно со скином? сделайте как моя battery, без скина, появляется/исчезает по горячей клавише окно

_________________
И мы уже давно не пешки,
Мы пули, мы орлы, и решки!
Война ютит бинарный код,
Умри, или иди вперед!


Top
   
PostPosted: Wed Apr 27, 2011 7:33 am 
Offline
Mentor
User avatar

Joined: Tue Jan 15, 2008 11:27 am
Posts: 752
Quote:
по горячей клавише
не годится. с таким же успехом можно напечатать символ, убедиться, что зажата клавиша CapsLock, стереть символ и выключить CapsLock. а вот box_lib я бы попробовал (интересно, есть ли на svn примеры и можно ли сделать checkbox2 неактивным). хотя можно просто прямоугольники рисовать...


Top
   
PostPosted: Wed Apr 27, 2011 12:14 pm 
Offline
User avatar

Joined: Mon Oct 27, 2008 10:10 pm
Posts: 811
Albom wrote:
и можно ли сделать checkbox2 неактивным

можно, для этого нужно не делать вызовы функций check_box_mouse2
Albom wrote:
хотя можно просто прямоугольники рисовать...

можно, но если вдруг возникнет необходимость менять состояние клавиатуры при нажатии мышкой в окно программы, тогда лучше всего сделать через checkbox

Код может быть таким:
Spoiler: Show
use32
org 0x0
db 'MENUET01' ;ид. исполняемого файла всегда 8 байт
dd 0x1
dd start
dd i_end ;размер приложения
dd mem
dd stacktop
dd 0
dd sys_path

include 'e:/kolibri/svn/programs/macros.inc'
include 'e:/kolibri/svn/programs/proc32.inc'
include 'e:/kolibri/svn/programs/develop/libraries/box_lib/load_lib.mac'
include 'e:/kolibri/svn/programs/develop/libraries/box_lib/trunk/box_lib.mac'
include 'mem.inc'
;include 'dll.inc'

@use_library_mem mem.Alloc,mem.Free,mem.ReAlloc, 0 ;dll.Load
caption db 'Key',0 ;подпись окна

align 4
start:
load_libraries l_libs_start,l_libs_end
mcall 48,3,sc,sizeof.system_colors
mcall 40,0x27

init_checkboxes2 check_boxes,check_boxes_end


align 4
red_win:
call draw_window


align 4
still:
mcall 10

cmp al,1 ;изм. положение окна
jz red_win
;cmp al,2
;jz key
cmp al,3
jz button

stdcall [check_box_mouse], ch1
stdcall [check_box_mouse], ch2
stdcall [check_box_mouse], ch3

jmp still


align 4
draw_window:
pushad
mcall 12,1
xor eax,eax
mov ebx,(10 shl 16)+100
mov ecx,(10 shl 16)+80
mov edx,[sc.work]
or edx,(3 shl 24)+0x10000000+0x20000000
mov edi,caption
int 0x40

stdcall [check_box_draw], ch1
stdcall [check_box_draw], ch2
stdcall [check_box_draw], ch3
mcall 12,2
popad
ret

;align 4
;key:
; mcall 2
; jmp still


align 4
button:
mcall 17
cmp ah,1
jne still
.exit:
mcall -1


check_boxes:
ch1 check_box2 (5 shl 16)+15,(5 shl 16)+10,5, 0xffffff,0x8000,0xff,\
txt_160,0+ch_flag_middle
ch2 check_box2 (5 shl 16)+15,(17 shl 16)+10,5, 0xffffff,0x8000,0xff,\
txt_159,0+ch_flag_middle
ch3 check_box2 (5 shl 16)+15,(29 shl 16)+10,5, 0xffffff,0x8000,0xff,\
txt_158,0+ch_flag_middle
check_boxes_end:

txt_160 db 'Num',0
txt_159 db 'Caps',0
txt_158 db 'Scroll',0

head_f_i:
head_f_l db 'Системная ошибка',0

system_dir_0 db '/sys/lib/'
lib_name_0 db 'box_lib.obj',0
err_msg_found_lib_0 db 'Не найдена библиотека box_lib.obj',0
err_msg_import_0 db 'Ошибка при импорте библиотеки box_lib',0

l_libs_start:
lib_0 l_libs lib_name_0, sys_path, library_path, system_dir_0,\
err_msg_found_lib_0,head_f_l,import_box_lib,err_msg_import_0,head_f_i
l_libs_end:

align 4
import_box_lib:
init dd sz_init
init_checkbox dd sz_init_checkbox
check_box_draw dd sz_check_box_draw
check_box_mouse dd sz_check_box_mouse
dd 0,0
sz_init db 'lib_init',0
sz_init_checkbox db 'init_checkbox2',0
sz_check_box_draw db 'check_box_draw2',0
sz_check_box_mouse db 'check_box_mouse2',0

mouse_dd dd 0x0
sc system_colors

align 16
procinfo process_information

i_end:
rb 1024
stacktop:
sys_path rb 1024
library_path rb 1024
mem:

Флаг установленного чек бокса:
Code:
ch_flag_en = 10b

Для изменения флага нужно менять 2-й бит. Нумерация битов в bt, bts, btr идет с 0 то 2-й будет под номером 1:
Code:
bt dword[ch1.flags],1 ;проверка ( перенесение в cf )
bts dword[ch1.flags],1 ;установка
btr dword[ch1.flags],1 ;сброс


Top
   
PostPosted: Wed Apr 27, 2011 1:25 pm 
Offline
User avatar

Joined: Mon Apr 16, 2007 6:38 pm
Posts: 1222
Albom, а что, действительно возюканье мышью по маршруту Меню-Системные-Железо-Индикаторы_клавиатуры будет быстрее чем Ctrl+Alt+i ?

_________________
И мы уже давно не пешки,
Мы пули, мы орлы, и решки!
Война ютит бинарный код,
Умри, или иди вперед!


Top
   
PostPosted: Wed Apr 27, 2011 2:01 pm 
Offline
User avatar

Joined: Tue Aug 25, 2009 4:45 pm
Posts: 794
может делать так - когда капс лок включен - индикатор раскладки показывает большими буквами "EN", например, когда выключен - маленькими "en", например


Top
   
PostPosted: Wed Apr 27, 2011 7:57 pm 
Offline
Mentor
User avatar

Joined: Tue Jan 15, 2008 11:27 am
Posts: 752
Gluk
возюканья мыши не будет, так как если индикатор будет нужен, он будет постоянно висеть где-нибудь в уголке.

IgorA
Спасибо за код! Будет время, скомпоную всё воедино.

XVilka
Спасибо! Отличная идея! Для большинства случаев индикации CapsLock достаточно. Будет время - и в код панели залезу. :)


Top
   
PostPosted: Wed Apr 27, 2011 9:12 pm 
Offline
User avatar

Joined: Mon Apr 16, 2007 6:38 pm
Posts: 1222
Albom, "будет постоянно висеть где-нибудь" - тогда тем более окно со скином ни к чему, раз сворачиваться/закрываться приложение не будет

_________________
И мы уже давно не пешки,
Мы пули, мы орлы, и решки!
Война ютит бинарный код,
Умри, или иди вперед!


Top
   
PostPosted: Wed Apr 27, 2011 10:07 pm 
Offline
User avatar

Joined: Mon Oct 27, 2008 10:10 pm
Posts: 811
Попробовал объединить свой код с файлом keybi.asm,
сделал несколько упрощений в своем коде. Окно сделал без скина.
Spoiler: Show
; Keyboard indicators v0.1
; by Albom

use32
org 0
db 'MENUET01'
dd 1
dd _start
dd _end
dd _memory
dd stacktop
dd 0
dd sys_path

include 'e:/kolibri/svn/programs/macros.inc'
include 'e:/kolibri/svn/programs/proc32.inc'
include 'e:/kolibri/svn/programs/develop/libraries/box_lib/load_lib.mac'
include 'e:/kolibri/svn/programs/develop/libraries/box_lib/trunk/box_lib.mac'
;include 'mem.inc'
;include 'dll.inc'

@use_library ;_mem mem.Alloc,mem.Free,mem.ReAlloc, dll.Load

align 4
_start:
load_libraries l_libs_start,l_libs_end
mcall 48,3,sc,sizeof.system_colors
mcall 40,0x27

init_checkboxes2 check_boxes,check_boxes_end
check_boxes_set_sys_color2 check_boxes,check_boxes_end,sc
call _key_set

align 4
red_win:
call draw_window


align 4
still:
mcall 10

cmp al,1 ;изм. положение окна
jz red_win
cmp al,2
jz key
cmp al,3
jz button

;stdcall [check_box_mouse], ch1
;stdcall [check_box_mouse], ch2
;stdcall [check_box_mouse], ch3

jmp still

;установить общесистемные "горячие клавиши"
align 4
_key_set:
mov eax, 66
mov ebx, 4
mov edx, 0
mov cl, 69
int 0x40

mov eax, 66
mov ebx, 4
mov edx, 0
mov cl, 58
int 0x40

mov eax, 66
mov ebx, 4
mov edx, 0
mov cl, 70
int 0x40

ret

align 4
draw_window:
pushad
mcall 12,1
xor eax,eax
mov ebx,(10 shl 16)+100
mov ecx,(10 shl 16)+75
mov edx,[sc.work]
or edx,(2 shl 24)+0x10000000+0x20000000
mov edi,[sc.grab] ;[sc.frame]
mov esi,[sc.grab]
int 0x40

mov eax,8
mov ebx,(80 shl 16)+10
mov cx,-15
shl ecx,16
mov cx,10
mov edx,1
mov esi,[sc.grab_button]
int 0x40

stdcall [check_box_draw], ch1
stdcall [check_box_draw], ch2
stdcall [check_box_draw], ch3
mcall 12,2
popad
ret

align 4
key:
mcall 2
call _indicators_check
jmp still

align 4
_indicators_check:
pusha
mov eax, 66
mov ebx, 3
int 40h

test_ins:
test eax, 0x80
jz @f
bts dword[ch1.flags],1
jmp test_caps
@@:
btr dword[ch1.flags],1

test_caps:
test eax, 0x40
jz @f
bts dword[ch2.flags],1
jmp test_scroll
@@:
btr dword[ch2.flags],1

test_scroll:
test eax, 0x100
jz @f
bts dword[ch3.flags],1
jmp test_ok
@@:
btr dword[ch3.flags],1

test_ok:
call draw_window
popa
ret

align 4
button:
mcall 17
cmp ah,1
jne still
.exit:
mcall -1


check_boxes:
ch1 check_box2 (5 shl 16)+15,(5 shl 16)+10,5, 0xffffff,0x8000,0xff,\
txt_160,0+ch_flag_middle
ch2 check_box2 (5 shl 16)+15,(17 shl 16)+10,5, 0xffffff,0x8000,0xff,\
txt_159,0+ch_flag_middle
ch3 check_box2 (5 shl 16)+15,(29 shl 16)+10,5, 0xffffff,0x8000,0xff,\
txt_158,0+ch_flag_middle
check_boxes_end:

txt_160 db 'Num',0
txt_159 db 'Caps',0
txt_158 db 'Scroll',0

head_f_i:
head_f_l db 'Системная ошибка',0

system_dir_0 db '/sys/lib/'
lib_name_0 db 'box_lib.obj',0
err_msg_found_lib_0 db 'Не найдена библиотека box_lib.obj',0
err_msg_import_0 db 'Ошибка при импорте библиотеки box_lib',0

l_libs_start:
lib_0 l_libs lib_name_0, sys_path, library_path, system_dir_0,\
err_msg_found_lib_0,head_f_l,import_box_lib,err_msg_import_0,head_f_i
l_libs_end:

align 4
import_box_lib:
;init dd sz_init
init_checkbox dd sz_init_checkbox
check_box_draw dd sz_check_box_draw
check_box_mouse dd sz_check_box_mouse
dd 0,0
;sz_init db 'lib_init',0
sz_init_checkbox db 'init_checkbox2',0
sz_check_box_draw db 'check_box_draw2',0
sz_check_box_mouse db 'check_box_mouse2',0

;mouse_dd dd 0x0
sc system_colors

_end:
align 32
rb 2048
stacktop:
sys_path rb 1024
library_path rb 1024
_memory:

Почему то у меня в KlbrInWin программа с окном без скина не запускается, а в Qemu все нормально. Если автор программы не против можно кинуть на svn, предварительно заменив пути к файлам в includ-ах на относительные.
Можно ли программно менять состояние кнопок Num, Caps, Scroll или это зависит только от клавиатуры ? Если да то можно еще сделать что-бы при нажатии на checkbox в окне программы менялись состояния кнопок.


Attachments:
File comment: окно без скина
keybi.png
keybi.png [ 2.25 KiB | Viewed 3582 times ]
Top
   
PostPosted: Thu Apr 28, 2011 7:02 am 
Offline
Mentor
User avatar

Joined: Tue Jan 15, 2008 11:27 am
Posts: 752
В KlbrInWin (по крайней мере в версии, которая у меня) и состояние клавиш не получится получить. Так что я тоже при разработке использую QEMU.
Насчёт программного изменения состояния... В учебниках такого не написано (пишут, что можно зажигать индикаторы, но контроллер всё равно переключит их), но думаю, что нужно всё равно документацию почитать.
Как соавтор я обеими руками за svn, даже спрашивать не нужно было. Сейчас заменил пути, дописал IgorA в соавторы, изменил версию на 0.2 и залил на SVN.
Так почему все так против окна со скином? :) (не пойму) :)
А в целом неплохая программка получилась! :)


Top
   
Display posts from previous:  Sort by  
Post new topic  Reply to topic  [ 16 posts ]  Go to page 1 2 Next

All times are UTC+03:00


Who is online

Users browsing this forum: No registered users and 1 guest


You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum
You cannot post attachments in this forum

Search for:
Jump to:  
cron
Powered by phpBB® Forum Software © phpBB Limited