Макро-функция checkhotkey()

Здесь обсуждается всё, что касается макросов.
User avatar
GrAnD
Posts: 351
Joined: Thu 13 Oct, 2005 23:47
Location: Amsterdam
Been thanked: 3 times
Contact:

Макро-функция checkhotkey()

Post by GrAnD »

Пишу такой макрос для проверки:

[HKEY_CURRENT_USER\Software\FAR2\KeyMacros\Shell\F5]
"Sequence"="$If (checkhotkey(\"^\")) \"true\" $Else \"false\" $End"

В итоге получаю, что бы я не вводил в качестве параметра checkhotkey() всегда результат true, несмотря на то что меню не открыто.
Проверьте пожалуйста.

Far Manager, version 2.0 (build 1157) x86
WinXP sp3

Примечание модератора:
Связанные темы:
Last edited by GrAnD on Thu 01 Jan, 1970 01:00, edited 0 times in total.
Reason: Связанные темы
User avatar
Skirda
Posts: 3474
Joined: Wed 16 Mar, 2005 11:01
Been thanked: 8 times

Re: Макрокоманда checkhotkey()

Post by Skirda »

А что ты хотел от этой функции в области Shell?
Она работает только если текущая макрообласть одна из: MainMenu, Menu, Disks и UserMenu.
В остальных случаях возвращает -1.
We are the Borg. You will be assimilated.
So Say We All!
User avatar
GrAnD
Posts: 351
Joined: Thu 13 Oct, 2005 23:47
Location: Amsterdam
Been thanked: 3 times
Contact:

Re: Макрокоманда checkhotkey()

Post by GrAnD »

Skirda wrote:А что ты хотел от этой функции в области Shell?
Она работает только если текущая макрообласть одна из: MainMenu, Menu, Disks и UserMenu.
В остальных случаях возвращает -1.
просто в энциклопедии написано что возвращает 0

"Возвращает хоткей S для пункта N, если в меню присутствует горячая клавиша и текущий "объект" - меню. В противном случае (не меню; нет хоткея; N больше чем количество пунктов меню) возвращает 0."
User avatar
Skirda
Posts: 3474
Joined: Wed 16 Mar, 2005 11:01
Been thanked: 8 times

Re: Макрокоманда checkhotkey()

Post by Skirda »

хмм... надо бы уточнить про -1 в Писании (-1 - это когда не в той области вызвали)
или правильнее вернуть 0?
We are the Borg. You will be assimilated.
So Say We All!
User avatar
HaRT
Moderator
Posts: 11123
Joined: Tue 30 Aug, 2005 17:21
Has thanked: 239 times
Been thanked: 380 times

Re: Макрокоманда checkhotkey()

Post by HaRT »

Skirda
Мне кажется, лучше оставить -1 и исправить документацию. Какой смысл ветвиться по возвращаемому значению этой функции при её вызове из неправильной области?
А вот что было бы интересно, так это иметь возможность анализировать наличие горячей клавиши и в других областях: в диалоге вообще/ в выпадающем списке — наличие контрола/ пункта списка с запрошенной горячей клавишей.
Фар есть инструмент, а не нянька. © 2009 DrKnS
User avatar
Skirda
Posts: 3474
Joined: Wed 16 Mar, 2005 11:01
Been thanked: 8 times

Re: Макрокоманда checkhotkey()

Post by Skirda »

ок. Писание поправил, теперь про "вообще".
далее проверяйте:
1. 1.75
2. 2.00
здесь:
а) в диалогах (в дополнении к выше перечисленному) вернет "угу" или "неугу"
б) если текущий элемент DI_LISTBOX или открытый список (комбобокс или хистори), то вернет "угу" или "неугу" только для этого элемента.

оно?
We are the Borg. You will be assimilated.
So Say We All!
User avatar
HaRT
Moderator
Posts: 11123
Joined: Tue 30 Aug, 2005 17:21
Has thanked: 239 times
Been thanked: 380 times

Re: Макрокоманда checkhotkey()

Post by HaRT »

Skirda wrote:"угу" или "неугу" только для этого элемента
В каком смысле?
Хотелось бы знать, есть ли в списке хоть один элемент с заданной горячей клавишей — как в меню.
Фар есть инструмент, а не нянька. © 2009 DrKnS
User avatar
Skirda
Posts: 3474
Joined: Wed 16 Mar, 2005 11:01
Been thanked: 8 times

Re: Макрокоманда checkhotkey()

Post by Skirda »

HaRT wrote:
Skirda wrote:"угу" или "неугу" только для этого элемента
В каком смысле?
в таком - если текущий элемент список (листбокс или открытый комбобокс или открытый хистори).
HaRT wrote:Хотелось бы знать, есть ли в списке хоть один элемент с заданной горячей клавишей — как в меню.
ну так стяни тестовый билд и попробуй.
We are the Borg. You will be assimilated.
So Say We All!
User avatar
HaRT
Moderator
Posts: 11123
Joined: Tue 30 Aug, 2005 17:21
Has thanked: 239 times
Been thanked: 380 times

Re: Макрокоманда checkhotkey()

Post by HaRT »

Skirda wrote:ну так стяни тестовый билд и попробуй
Вроде работает, как и хотелось. Спасибо!
Но мысль не стоит на месте. Сложно ли сделать, чтобы, передав пустую строку, проверить наличие элемента (в т.ч. контрола) без горячей клавиши?
Фар есть инструмент, а не нянька. © 2009 DrKnS
User avatar
Skirda
Posts: 3474
Joined: Wed 16 Mar, 2005 11:01
Been thanked: 8 times

Re: Макрокоманда checkhotkey()

Post by Skirda »

не понял, разжуй.
We are the Borg. You will be assimilated.
So Say We All!
User avatar
HaRT
Moderator
Posts: 11123
Joined: Tue 30 Aug, 2005 17:21
Has thanked: 239 times
Been thanked: 380 times

Re: Макрокоманда checkhotkey()

Post by HaRT »

Skirda
Всё очень просто: хочу узнать, есть ли в меню/ диалоге/ списке хоть один элемент без горячей клавиши. Мне кажется вполне естественным, чтобы на этот вопрос отвечала функция checkHotkey. Как бы её об этом спросить? Предлагаю для этого передать ей параметром пустую строку.
Фар есть инструмент, а не нянька. © 2009 DrKnS
User avatar
Skirda
Posts: 3474
Joined: Wed 16 Mar, 2005 11:01
Been thanked: 8 times

Re: Макрокоманда checkhotkey()

Post by Skirda »

нарисуй хотелку на мантис - мысли есть, но сходу пока не соображу как это красиво сделать (и, главное, не сломать ничего ;-))
We are the Borg. You will be assimilated.
So Say We All!
User avatar
HaRT
Moderator
Posts: 11123
Joined: Tue 30 Aug, 2005 17:21
Has thanked: 239 times
Been thanked: 380 times

Re: Макрокоманда checkhotkey()

Post by HaRT »

Skirda wrote:нарисуй хотелку на мантис
№1099
Фар есть инструмент, а не нянька. © 2009 DrKnS
User avatar
Skirda
Posts: 3474
Joined: Wed 16 Mar, 2005 11:01
Been thanked: 8 times

Re: Макрокоманда checkhotkey()

Post by Skirda »

пробуем
1.75-2
2.00-2
здесь

Code: Select all

N=checkhotkey(S[,N1])
возвращает:
-1 - не в своей области
0 - нет такого
>0 - позицию элемента

Параметр N1 - с какой позиции начать искать
Если S пустая строка, то функция возвращает -1, 0 или номер позиции, у которой отсутствует хоткей
We are the Borg. You will be assimilated.
So Say We All!
User avatar
HaRT
Moderator
Posts: 11123
Joined: Tue 30 Aug, 2005 17:21
Has thanked: 239 times
Been thanked: 380 times

Re: Макрокоманда checkhotkey()

Post by HaRT »

Skirda wrote:пробуем
Я погонял в разных контекстах в 1.75 с разными сочетаниями параметров — вроде бы всё в порядке.
Спасибо большое!

Эх, теперь бы ещё доп. параметры для Menu.Select()…
Фар есть инструмент, а не нянька. © 2009 DrKnS
Post Reply

Return to “Обсуждение макросов”