| 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 |  | 
	
		|  | 
	
		|  |