View previous topic :: View next topic |
Author |
Message |
Dimych
Joined: 01 Feb 2006 Posts: 27
|
(Separately) Posted: Sun Jul 16, 2006 04:03 Post subject: Задачи для nnCron |
|
|
Две задачи для nnCron по управлению сепаратором. Для тех, кто больше с клавой дружен, а не с мышкой.
1. Задача для nnCron, с помощью которой можно по горячим клавишам
"раскрывать" правую или левую панели TC. Размер и положение окна TC - не важно. Начальное положение сепаратора - не важно
Клавиши работают как переключатели (раскрыть --> 50% -->раскрыть).
К сожалению, не смог сделать раскрытие для _активной (текущей)_ панели. Не получается отловить его. Может кто помочь?
# ------------ начало -----------
SET TC_WIN_PATTERN="*Total Commander * - *"
#
# Открывает полностью левую/правую панель TC (переключатель)
#
#( TC_SET_FULL_PANELS
WINAPI: GetKeyState USER32.DLL
\ Сравнение двух чисел с заданной точностью 1..N пикселов: abs ( x1 - x2 ) < (N + 1)
: EQU_POS_SEPARATOR ( n1 n2 -- flag ) - ABS 3 < ;
\ Нажата клавиша такая-то?
: KEY-PRESSED? ( n -- flag ) GetKeyState 128 AND? ;
USER TC_xc
USER TC_yc
USER TC_bc
USER TC_rc
VARIABLE TC_x
VARIABLE TC_y
VARIABLE TC_LBox_X
VARIABLE TC_RBox_X
VARIABLE TC_RBox_Y
VARIABLE TC_CUR_X
VARIABLE TC_MID_X
VARIABLE TC_FUT_X
VARIABLE TC_DELTA_X
50 CONSTANT cDX \ На противоположенной панели оставляем N пикселов
49 CONSTANT cTC_KEYCODE_NUM1 \ Код клавиши "1"
50 CONSTANT cTC_KEYCODE_NUM2 \ Код клавиши "2"
WatchHotKey: "@1" \ Горячая клавиша "ALT+1"
WatchHotKey: "@2" \ Горячая клавиша "ALT+2"
SingleInstance
Rule: WIN-ACTIVE: %TC_WIN_PATTERN%
\ NoActive
Action:
WIN-EXIST: %TC_WIN_PATTERN% IF
WIN-HWND WIN-RECT TC_xc ! TC_yc ! TC_bc ! TC_rc !
0 TC_LBox_X !
0 TC_RBox_X !
\ 1. Вычисляет ТЕКУЩЕЕ положение сепаратора (по X) --> TC_CUR_X
FOR-CHILD-WINDOWS: "TMyListBox"
WIN-CHILD-HWND WIN-POS TC_y ! TC_x !
TC_RBox_X @ 0= IF
TC_x @ TC_RBox_X !
TC_y @ TC_RBox_Y !
ELSE
TC_LBox_X @ 0= IF TC_x @ TC_LBox_X ! THEN
THEN
\ Внимание, строчка ниже - не комментарий
;FOR-CHILD-WINDOWS
TC_LBox_X @ TC_RBox_X @ > IF TC_LBox_X @ TC_RBox_X ! THEN
TC_RBox_X @ 4 - TC_CUR_X !
\ 2. Вычисляем 50% положение сепаратора (по X) --> TC_MID_X
TC_bc @ TC_xc @ - 2 / TC_xc @ + 1 - TC_MID_X !
\ 3. Определяем теоретическое РАСКРЫТОЕ положение панели, сепаратор --> TC_FUT_X
cTC_KEYCODE_NUM2 KEY-PRESSED? IF
TC_bc @ cDX - 6 - TC_FUT_X ! \ ALT+1
ELSE
TC_xc @ cDX + 4 + TC_FUT_X ! \ ALT+2
THEN
TC_CUR_X @ TC_FUT_X @ EQU_POS_SEPARATOR IF TC_MID_X @ TC_FUT_X ! THEN
MOUSE-POS
TC_CUR_X @ TC_RBox_Y @ 20 + MOUSE-MOVE
MOUSE-LBDN TC_FUT_X @ TC_RBox_Y @ 20 + MOUSE-MOVE MOUSE-LBUP
MOUSE-MOVE
THEN
)#
# ------------ конец -----------
2. Выводит по горячей клавише меню (20/80, 30/70 и т. д.) на сепараторе.
Размер и положение окна TC - не важно.
Начальное положение сепаратора - не важно.
Если первая задача не используется то для второй необходимо определить
SET TC_WIN_PATTERN="*Total Commander * - *"
# ------------ начало -----------
#
# Меню на сепараторе TC
#
#( TC_VIEW_MENU_SEPARATOR
VARIABLE TC_LBox_X
VARIABLE TC_RBox_X
VARIABLE TC_RBox_Y
VARIABLE TC_x
VARIABLE TC_y
\ NoActive
WatchHotKey: "@3"
SingleInstance
Rule: WIN-ACTIVE: %TC_WIN_PATTERN%
Action:
WIN-EXIST: %TC_WIN_PATTERN% IF
0 TC_LBox_X !
0 TC_RBox_X !
FOR-CHILD-WINDOWS: "TMyListBox"
WIN-CHILD-HWND WIN-POS TC_y ! TC_x !
TC_RBox_X @ 0= IF
TC_x @ TC_RBox_X !
TC_y @ TC_RBox_Y !
ELSE
TC_LBox_X @ 0= IF TC_x @ TC_LBox_X ! THEN
THEN
;FOR-CHILD-WINDOWS
TC_LBox_X @ TC_RBox_X @ > IF TC_LBox_X @ TC_RBox_X ! THEN
MOUSE-POS TC_RBox_X @ 2 - TC_RBox_Y @ 20 + MOUSE-MOVE
MOUSE-RBDN MOUSE-RBUP MOUSE-MOVE
THEN
)#
# ------------ конец ----------- |
|
Back to top |
|
|
Igor_A.
Joined: 23 Mar 2006 Posts: 83
|
(Separately) Posted: Sun Sep 03, 2006 12:35 Post subject: |
|
|
Спасибо за оличное дополнение в кронтаб. Только я не совсем понял, а как сделать так, чтобы если я использую \"ушки\" (вкладки) то у меня по горячим клавишам происходило бы раскрытие не на 80 % а на 100 процентов? |
|
Back to top |
|
|
Volniy
Joined: 15 Dec 2004 Posts: 585 Location: Местный
|
|
Back to top |
|
|
Igor_A.
Joined: 23 Mar 2006 Posts: 83
|
(Separately) Posted: Sun Sep 03, 2006 22:37 Post subject: |
|
|
2 Volniy:
Отдельное спасибо!
Всё заработало. |
|
Back to top |
|
|
|