Автор | Сообщение |
|
| |
Пост N: 125
Зарегистрирован: 08.07.06
|
|
Отправлено: 16.08.13 19:43. Заголовок: SOLVED!!! -> TRAPANYKEY() и KEYSEND() или запись/воспроизведение клавиатурных макросов
Практически со всем разобрался и восстановил функционал. Осталось одно и достаточно важное дело: автоматизация рутинных операций. В Clipper это происходило при помощи функций TRAPANYKEY/KEYSEND Первая при нажатии на любую клавишу в любом месте программы (включая GET/DBEDIT/ACHOICE/INKEY и тп) вызывает указанную мною функцию и передает ей код нажатой кнопки. Пользовательская функция тихо сидит и собирает эти коды в буфер - "записывает" нажатия клавиш юзером. В случае, если нужно "воспроизвести" записанные нажатия на кнопки, вызывается KEYSEND() с этим буфером в качестве параметра. Просто и логично. --------------------------------- Встал вопрос - чем и как заменить этот функционал? Без него меня разорвут на части - делать множество рутинных операций без клавиатурных макросов чокнешься...
|
|
|
Ответов - 45
, стр:
1
2
3
All
[только новые]
|
|
|
| |
Пост N: 3393
Зарегистрирован: 17.05.05
|
|
Отправлено: 16.08.13 20:16. Заголовок: По поводу KEYSEND , ..
По поводу KEYSEND , смотри hb_keyins() , HB_KEYPUT() , FT_PUTKEY() , KEYBOARD ,__KEYBOARD() Насчет TRAPANYKEY надо подумать и уверен что как то можно это порешать.
|
|
|
|
| |
Пост N: 3395
Зарегистрирован: 17.05.05
|
|
Отправлено: 16.08.13 20:59. Заголовок: Sergy пишет: делать..
Sergy пишет: цитата: | делать множество рутинных операций без клавиатурных макросов чокнешься... |
| Например ? Пока не очень понимаю для чего это надо. Каких таких рутинных операций.........?
|
|
|
|
| |
Пост N: 126
Зарегистрирован: 08.07.06
|
|
Отправлено: 16.08.13 21:02. Заголовок: Главное - как-то соб..
Главное - как-то собрать информацию о нажатых клавишах. А уж засунуть коды в клавиатурный буфер - дело недолгое... Может зайти к этому вопросу с другой стороны - как с минимальными переделками осуществить задуманное? 1) Есть ли в Harbour какой-нить единый для всей программы обработчик inkey? Заменить его. 2) Используя многопоточность, анализировать и сохранять изменения в LastKey() - только как отличить двойное нажатие одной и той-же кнопки? 3) ???...
|
|
|
|
| |
Пост N: 3396
Зарегистрирован: 17.05.05
|
|
Отправлено: 16.08.13 21:05. Заголовок: Sergy пишет: сохран..
Sergy пишет: цитата: | сохранять LastKey() - только как отличить двойное нажатие одной и той-же кнопки? |
| А TRAPANYKEY отличал двойное нажатие ?
|
|
|
|
| |
Пост N: 127
Зарегистрирован: 08.07.06
|
|
Отправлено: 16.08.13 21:12. Заголовок: Рутинные операции - ..
Рутинные операции - массовое изменение цен в выбранных оптовых колонках, редактирование шаблонов документов, ценников, гтд, сформировать отчет, убрав из него ненужную (например конфиденциальную) инфу перед отправкой по почте - т.е. тогда, когда юзеру нужно вводить/изменить множество однотипной информации, которую нельзя автоматизировать другим способм (напр.при помощи справочников).
|
|
|
|
| |
Пост N: 128
Зарегистрирован: 08.07.06
|
|
Отправлено: 16.08.13 21:14. Заголовок: Dima пишет: trapany..
Dima пишет: цитата: | trapanykey отличал двойные нажатия? |
| Он вызывает функцию при нажатии любой кнопки. Если два раза нажата одна кнопка - два вызова.
|
|
|
|
| |
Пост N: 3397
Зарегистрирован: 17.05.05
|
|
Отправлено: 16.08.13 21:15. Заголовок: Sergy пишет: Рутин..
Sergy пишет: цитата: | Рутинные операции - массовое изменение цен в выбранных оптовых колонках |
| Не представляю как это решает макрос. Цены разные на каждый товар и могут меняться в любую сторону. Проще педальку сделать с условиями пересчета.
|
|
|
|
| |
Пост N: 129
Зарегистрирован: 08.07.06
|
|
Отправлено: 16.08.13 21:19. Заголовок: Вот например, решили..
Вот например, решили с завтрашнего дня устроить распродажу светильников с золотой каемочкой. Соотв. изменить цены только на них и только для клиентов из области, работающих по 5 колонке. Было "15%", а сделать только в в пятой колонке 2%. Для 40 моделей светильников. Нажать ентер (вход в ячейку) Нажать 2 Нажать шифт и процент Нажать ентер Нажать стрелку вниз Следующим может идти белый или серебристый светильник, его пропускаем. Нашли золотой - повторяем 5 нажатий клавиш. Итого 200 нажатий минимум. В случае макроса - 40.
|
|
|
|
| |
Пост N: 3398
Зарегистрирован: 17.05.05
|
|
Отправлено: 16.08.13 21:25. Заголовок: Sergy Да вариант ко..
Sergy Да вариант конечно.
|
|
|
|
| |
Пост N: 130
Зарегистрирован: 08.07.06
|
|
Отправлено: 16.08.13 21:26. Заголовок: Может сторонняя винд..
Может сторонняя виндовс-программулька такое может?
|
|
|
|
| |
Пост N: 3399
Зарегистрирован: 17.05.05
|
|
Отправлено: 16.08.13 21:47. Заголовок: Sergy пишет: Может ..
Sergy пишет: цитата: | Может сторонняя виндовс-программулька такое может? |
| Это может и твоя прога нужно придумать как.
|
|
|
|
|
| постоянный участник
|
Пост N: 223
Зарегистрирован: 17.02.12
|
|
Отправлено: 16.08.13 21:48. Заголовок: Sergy пишет:Нажать е..
Sergy пишет: цитата: | Нажать ентер (вход в ячейку) Нажать 2 Нажать шифт и процент Нажать ентер Нажать стрелку вниз |
| А не проще пометить строки, и кликнуть по шапке 5 колони browse и ввести 2% и пересчитать для отмеченных ... предварительно можно ограничить список просмотра Scope или filter ...
|
|
|
|
| |
Пост N: 131
Зарегистрирован: 08.07.06
|
|
Отправлено: 16.08.13 22:22. Заголовок: SergKis, это частный..
SergKis, это частный случай. Их множество по ходу работы юзеров.
|
|
|
|
| |
Пост N: 3400
Зарегистрирован: 17.05.05
|
|
Отправлено: 16.08.13 22:50. Заголовок: Sergy Возможно надо..
Sergy Возможно надо покопать функцию hb_SetKeySave , я пока не понял как она работает и пример глянуть setkeys.prg
|
|
|
|
| |
Пост N: 132
Зарегистрирован: 08.07.06
|
|
Отправлено: 16.08.13 22:52. Заголовок: Это массовое сохране..
Как понимаю, это массовое сохранение/переназначение всех set key клавиш.
|
|
|
|
| |
Пост N: 3402
Зарегистрирован: 17.05.05
|
|
Отправлено: 16.08.13 22:58. Заголовок: Sergy я бай пойду ,..
Sergy я бай пойду , надо когда то и отдыхать ;)
|
|
|
|
| |
Пост N: 133
Зарегистрирован: 08.07.06
|
|
Отправлено: 16.08.13 23:08. Заголовок: :sm54: ..
|
|
|
|
| постоянный участник
|
Пост N: 224
Зарегистрирован: 17.02.12
|
|
Отправлено: 17.08.13 08:24. Заголовок: Sergy Возможно это т..
Sergy Возможно это то что надо (inkey.c): Скрытый текст HB_FUNC( INKEY ) { PHB_INKEYBLOCK pInkeyBlock = ( PHB_INKEYBLOCK ) hb_stackTestTSD( &s_inkeyBlock ); int iPCount = hb_pcount(); PHB_ITEM pKey = NULL; int iKey; if( pInkeyBlock && pInkeyBlock->before ) hb_vmEvalBlock( pInkeyBlock->before ); // БЛОК КОДА ДО ... do { iKey = hb_inkey( iPCount == 1 || ( iPCount > 1 && HB_ISNUM( 1 ) ), hb_parnd( 1 ), HB_ISNUM( 2 ) ? hb_parni( 2 ) : hb_setGetEventMask() ); if( iKey == 0 || !pInkeyBlock || !pInkeyBlock->after ) // БЛОК КОДА ПОСЛЕ ... break; pKey = hb_itemPutNI( pKey, iKey ); iKey = hb_itemGetNI( hb_vmEvalBlockV( pInkeyBlock->after, 1, pKey ) ); hb_inkeySetLast( iKey ); } while( iKey == 0 ); if( pKey ) hb_itemRelease( pKey ); hb_retni( iKey ); } /* temporary disabled */ #if 0 // ЗДЕСЬ #if 1 HB_FUNC( HB_SETINKEYBEFOREBLOCK ) { PHB_INKEYBLOCK pInkeyBlock = ( PHB_INKEYBLOCK ) hb_stackGetTSD( &s_inkeyBlock ); if( pInkeyBlock->before ) hb_itemReturn( pInkeyBlock->before ); if( hb_pcount() > 0 ) { PHB_ITEM pBlock = hb_param( 1, HB_IT_BLOCK ); if( pInkeyBlock->before ) hb_itemRelease( pInkeyBlock->before ); pInkeyBlock->before = pBlock ? hb_itemNew( pBlock ) : pBlock; } } HB_FUNC( HB_SETINKEYAFTERBLOCK ) { PHB_INKEYBLOCK pInkeyBlock = ( PHB_INKEYBLOCK ) hb_stackGetTSD( &s_inkeyBlock ); if( pInkeyBlock->after ) hb_itemReturn( pInkeyBlock->after ); if( hb_pcount() > 0 ) { PHB_ITEM pBlock = hb_param( 1, HB_IT_BLOCK ); if( pInkeyBlock->after ) hb_itemRelease( pInkeyBlock->after ); pInkeyBlock->after = pBlock ? hb_itemNew( pBlock ) : pBlock; } } #endif
|
|
|
|
|
| постоянный участник
|
Пост N: 225
Зарегистрирован: 17.02.12
|
|
Отправлено: 17.08.13 08:27. Заголовок: Sergy правильнее: ..
Sergy правильнее: if( iKey == 0 || !pInkeyBlock || !pInkeyBlock->after ) break; pKey = hb_itemPutNI( pKey, iKey ); iKey = hb_itemGetNI( hb_vmEvalBlockV( pInkeyBlock->after, 1, pKey ) ); // БЛОК КОДА ПОСЛЕ ... hb_inkeySetLast( iKey );
|
|
|
|
| постоянный участник
|
Пост N: 226
Зарегистрирован: 17.02.12
|
|
Отправлено: 17.08.13 09:15. Заголовок: Sergy Смотрю в верси..
Sergy Смотрю в версии 3.2 этот текст уже другой, что в 3.0 не знаю. нет у меня, а этот текст inkey.c взят с 2.0
|
|
|
Ответов - 45
, стр:
1
2
3
All
[только новые]
|
|