Board.KolibriOS.org

Официальный форум KolibriOS
Текущее время: Ср май 24, 2017 1:20 am

Часовой пояс: UTC+03:00




Начать новую тему  Ответить на тему  [ 16 сообщений ]  На страницу 1 2 След.
Автор Сообщение
 Заголовок сообщения: Индикатор клавиатуры
СообщениеДобавлено: Сб апр 23, 2011 9:58 pm 
Не в сети
Mentor
Аватара пользователя

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


Вложения:
keybi.zip [317 байт]
99 скачиваний
Вернуться к началу
 Заголовок сообщения: Re: Индикатор клавиатуры
СообщениеДобавлено: Сб апр 23, 2011 11:04 pm 
Не в сети
Аватара пользователя

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

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


Вернуться к началу
 Заголовок сообщения: Re: Индикатор клавиатуры
СообщениеДобавлено: Вс апр 24, 2011 8:45 am 
Не в сети
Mentor
Аватара пользователя

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


Вложения:
003.png
003.png [ 694 байт | 2550 просмотров ]
002.png
002.png [ 748 байт | 2549 просмотров ]
001.png
001.png [ 800 байт | 2549 просмотров ]
Вернуться к началу
 Заголовок сообщения: Re: Индикатор клавиатуры
СообщениеДобавлено: Вс апр 24, 2011 9:57 am 
Не в сети
Аватара пользователя

Зарегистрирован: Чт мар 01, 2007 7:57 pm
Сообщения: 834
Отлично, осталось только научить её встраиваться в панель, как апплет.

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


Вернуться к началу
 Заголовок сообщения: Re: Индикатор клавиатуры
СообщениеДобавлено: Вс апр 24, 2011 10:52 am 
Не в сети
Аватара пользователя

Зарегистрирован: Пн апр 16, 2007 6:38 pm
Сообщения: 1222
там уж проще новую рисовать

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

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

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


Вернуться к началу
 Заголовок сообщения: Re: Индикатор клавиатуры
СообщениеДобавлено: Вт апр 26, 2011 6:55 pm 
Не в сети
Аватара пользователя

Зарегистрирован: Пн окт 27, 2008 10:10 pm
Сообщения: 739
может быть стоит попробовать для этой программы сделать подключение библиотеки box_lib и использовать для индикации элементы checbox2 ?


Вложения:
Комментарий к файлу: это может выглядеть так
keybi.png
keybi.png [ 1.67 КБ | 2494 просмотра ]
Вернуться к началу
 Заголовок сообщения: Re: Индикатор клавиатуры
СообщениеДобавлено: Вт апр 26, 2011 8:54 pm 
Не в сети
Аватара пользователя

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

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


Вернуться к началу
 Заголовок сообщения: Re: Индикатор клавиатуры
СообщениеДобавлено: Ср апр 27, 2011 7:33 am 
Не в сети
Mentor
Аватара пользователя

Зарегистрирован: Вт янв 15, 2008 11:27 am
Сообщения: 750
Цитата:
по горячей клавише
не годится. с таким же успехом можно напечатать символ, убедиться, что зажата клавиша CapsLock, стереть символ и выключить CapsLock. а вот box_lib я бы попробовал (интересно, есть ли на svn примеры и можно ли сделать checkbox2 неактивным). хотя можно просто прямоугольники рисовать...


Вернуться к началу
 Заголовок сообщения: Re: Индикатор клавиатуры
СообщениеДобавлено: Ср апр 27, 2011 12:14 pm 
Не в сети
Аватара пользователя

Зарегистрирован: Пн окт 27, 2008 10:10 pm
Сообщения: 739
Albom писал(а):
и можно ли сделать checkbox2 неактивным

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

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

Код может быть таким:
Спойлер: Показать
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:

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

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


Вернуться к началу
 Заголовок сообщения: Re: Индикатор клавиатуры
СообщениеДобавлено: Ср апр 27, 2011 1:25 pm 
Не в сети
Аватара пользователя

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

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


Вернуться к началу
 Заголовок сообщения: Re: Индикатор клавиатуры
СообщениеДобавлено: Ср апр 27, 2011 2:01 pm 
В сети
Аватара пользователя

Зарегистрирован: Вт авг 25, 2009 4:45 pm
Сообщения: 788
может делать так - когда капс лок включен - индикатор раскладки показывает большими буквами "EN", например, когда выключен - маленькими "en", например


Вернуться к началу
 Заголовок сообщения: Re: Индикатор клавиатуры
СообщениеДобавлено: Ср апр 27, 2011 7:57 pm 
Не в сети
Mentor
Аватара пользователя

Зарегистрирован: Вт янв 15, 2008 11:27 am
Сообщения: 750
Gluk
возюканья мыши не будет, так как если индикатор будет нужен, он будет постоянно висеть где-нибудь в уголке.

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

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


Вернуться к началу
 Заголовок сообщения: Re: Индикатор клавиатуры
СообщениеДобавлено: Ср апр 27, 2011 9:12 pm 
Не в сети
Аватара пользователя

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

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


Вернуться к началу
 Заголовок сообщения: Re: Индикатор клавиатуры
СообщениеДобавлено: Ср апр 27, 2011 10:07 pm 
Не в сети
Аватара пользователя

Зарегистрирован: Пн окт 27, 2008 10:10 pm
Сообщения: 739
Попробовал объединить свой код с файлом keybi.asm,
сделал несколько упрощений в своем коде. Окно сделал без скина.
Спойлер: Показать
; 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 в окне программы менялись состояния кнопок.


Вложения:
Комментарий к файлу: окно без скина
keybi.png
keybi.png [ 2.25 КБ | 2398 просмотров ]
Вернуться к началу
 Заголовок сообщения: Re: Индикатор клавиатуры
СообщениеДобавлено: Чт апр 28, 2011 7:02 am 
Не в сети
Mentor
Аватара пользователя

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


Вернуться к началу
Показать сообщения за:  Поле сортировки  
Начать новую тему  Ответить на тему  [ 16 сообщений ]  На страницу 1 2 След.

Часовой пояс: UTC+03:00


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и 1 гость


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  
cron
Создано на основе phpBB® Forum Software © phpBB Limited
Русская поддержка phpBB