On-line: гостей 0. Всего: 0 [подробнее..]
АвторСообщение





Пост N: 125
Зарегистрирован: 08.07.06
ссылка на сообщение  Отправлено: 16.08.13 19:43. Заголовок: SOLVED!!! -> TRAPANYKEY() и KEYSEND() или запись/воспроизведение клавиатурных макросов


Практически со всем разобрался и восстановил функционал.

Осталось одно и достаточно важное дело: автоматизация рутинных операций. В Clipper это происходило при помощи функций TRAPANYKEY/KEYSEND

Первая при нажатии на любую клавишу в любом месте программы (включая GET/DBEDIT/ACHOICE/INKEY и тп) вызывает указанную мною функцию и передает ей код нажатой кнопки.
Пользовательская функция тихо сидит и собирает эти коды в буфер - "записывает" нажатия клавиш юзером.

В случае, если нужно "воспроизвести" записанные нажатия на кнопки, вызывается KEYSEND() с этим буфером в качестве параметра.

Просто и логично.

---------------------------------

Встал вопрос - чем и как заменить этот функционал? Без него меня разорвут на части - делать множество рутинных операций без клавиатурных макросов чокнешься...

Спасибо: 0 
ПрофильЦитата Ответить
Ответов - 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 надо подумать и уверен что как то можно это порешать.

Спасибо: 0 
ПрофильЦитата Ответить
администратор




Пост N: 3395
Зарегистрирован: 17.05.05
ссылка на сообщение  Отправлено: 16.08.13 20:59. Заголовок: Sergy пишет: делать..


Sergy пишет:

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


Например ? Пока не очень понимаю для чего это надо. Каких таких рутинных операций.........?

Спасибо: 0 
ПрофильЦитата Ответить





Пост N: 126
Зарегистрирован: 08.07.06
ссылка на сообщение  Отправлено: 16.08.13 21:02. Заголовок: Главное - как-то соб..


Главное - как-то собрать информацию о нажатых клавишах. А уж засунуть коды в клавиатурный буфер - дело недолгое...

Может зайти к этому вопросу с другой стороны - как с минимальными переделками осуществить задуманное?
1) Есть ли в Harbour какой-нить единый для всей программы обработчик inkey? Заменить его.
2) Используя многопоточность, анализировать и сохранять изменения в LastKey() - только как отличить двойное нажатие одной и той-же кнопки?
3) ???...

Спасибо: 0 
ПрофильЦитата Ответить
администратор




Пост N: 3396
Зарегистрирован: 17.05.05
ссылка на сообщение  Отправлено: 16.08.13 21:05. Заголовок: Sergy пишет: сохран..


Sergy пишет:

 цитата:
сохранять LastKey() - только как отличить двойное нажатие одной и той-же кнопки?


А TRAPANYKEY отличал двойное нажатие ?

Спасибо: 0 
ПрофильЦитата Ответить





Пост N: 127
Зарегистрирован: 08.07.06
ссылка на сообщение  Отправлено: 16.08.13 21:12. Заголовок: Рутинные операции - ..


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

Спасибо: 0 
ПрофильЦитата Ответить





Пост N: 128
Зарегистрирован: 08.07.06
ссылка на сообщение  Отправлено: 16.08.13 21:14. Заголовок: Dima пишет: trapany..


Dima пишет:

 цитата:
trapanykey отличал двойные нажатия?


Он вызывает функцию при нажатии любой кнопки. Если два раза нажата одна кнопка - два вызова.



Спасибо: 0 
ПрофильЦитата Ответить
администратор




Пост N: 3397
Зарегистрирован: 17.05.05
ссылка на сообщение  Отправлено: 16.08.13 21:15. Заголовок: Sergy пишет: Рутин..


Sergy пишет:

 цитата:

Рутинные операции - массовое изменение цен в выбранных оптовых колонках


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

Спасибо: 0 
ПрофильЦитата Ответить





Пост N: 129
Зарегистрирован: 08.07.06
ссылка на сообщение  Отправлено: 16.08.13 21:19. Заголовок: Вот например, решили..


Вот например, решили с завтрашнего дня устроить распродажу светильников с золотой каемочкой. Соотв. изменить цены только на них и только для клиентов из области, работающих по 5 колонке. Было "15%", а сделать только в в пятой колонке 2%. Для 40 моделей светильников.

Нажать ентер (вход в ячейку)
Нажать 2
Нажать шифт и процент
Нажать ентер
Нажать стрелку вниз

Следующим может идти белый или серебристый светильник, его пропускаем.

Нашли золотой - повторяем 5 нажатий клавиш.

Итого 200 нажатий минимум. В случае макроса - 40.

Спасибо: 0 
ПрофильЦитата Ответить
администратор




Пост N: 3398
Зарегистрирован: 17.05.05
ссылка на сообщение  Отправлено: 16.08.13 21:25. Заголовок: Sergy Да вариант ко..


Sergy
Да вариант конечно.

Спасибо: 0 
ПрофильЦитата Ответить





Пост N: 130
Зарегистрирован: 08.07.06
ссылка на сообщение  Отправлено: 16.08.13 21:26. Заголовок: Может сторонняя винд..


Может сторонняя виндовс-программулька такое может?

Спасибо: 0 
ПрофильЦитата Ответить
администратор




Пост N: 3399
Зарегистрирован: 17.05.05
ссылка на сообщение  Отправлено: 16.08.13 21:47. Заголовок: Sergy пишет: Может ..


Sergy пишет:

 цитата:
Может сторонняя виндовс-программулька такое может?


Это может и твоя прога нужно придумать как.

Спасибо: 0 
ПрофильЦитата Ответить
постоянный участник




Пост N: 223
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 16.08.13 21:48. Заголовок: Sergy пишет:Нажать е..


Sergy пишет:
 цитата:
Нажать ентер (вход в ячейку)
Нажать 2
Нажать шифт и процент
Нажать ентер
Нажать стрелку вниз


А не проще пометить строки, и кликнуть по шапке 5 колони browse и ввести 2% и пересчитать для отмеченных ...
предварительно можно ограничить список просмотра Scope или filter ...

Спасибо: 0 
ПрофильЦитата Ответить





Пост N: 131
Зарегистрирован: 08.07.06
ссылка на сообщение  Отправлено: 16.08.13 22:22. Заголовок: SergKis, это частный..


SergKis, это частный случай. Их множество по ходу работы юзеров.

Спасибо: 0 
ПрофильЦитата Ответить
администратор




Пост N: 3400
Зарегистрирован: 17.05.05
ссылка на сообщение  Отправлено: 16.08.13 22:50. Заголовок: Sergy Возможно надо..


Sergy
Возможно надо покопать функцию hb_SetKeySave , я пока не понял как она работает и пример глянуть setkeys.prg

Спасибо: 0 
ПрофильЦитата Ответить





Пост N: 132
Зарегистрирован: 08.07.06
ссылка на сообщение  Отправлено: 16.08.13 22:52. Заголовок: Это массовое сохране..


Как понимаю, это массовое сохранение/переназначение всех set key клавиш.

Спасибо: 0 
ПрофильЦитата Ответить
администратор




Пост N: 3402
Зарегистрирован: 17.05.05
ссылка на сообщение  Отправлено: 16.08.13 22:58. Заголовок: Sergy я бай пойду ,..


Sergy
я бай пойду , надо когда то и отдыхать ;)

Спасибо: 0 
ПрофильЦитата Ответить





Пост N: 133
Зарегистрирован: 08.07.06
ссылка на сообщение  Отправлено: 16.08.13 23:08. Заголовок: :sm54: ..




Спасибо: 0 
ПрофильЦитата Ответить
постоянный участник




Пост N: 224
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 17.08.13 08:24. Заголовок: Sergy Возможно это т..


Sergy
Возможно это то что надо (inkey.c):
Скрытый текст



Спасибо: 0 
ПрофильЦитата Ответить
постоянный участник




Пост 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 );


Спасибо: 0 
ПрофильЦитата Ответить
постоянный участник




Пост N: 226
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 17.08.13 09:15. Заголовок: Sergy Смотрю в верси..


Sergy
Смотрю в версии 3.2 этот текст уже другой, что в 3.0 не знаю. нет у меня, а этот текст inkey.c взят с 2.0

Спасибо: 0 
ПрофильЦитата Ответить





Пост N: 134
Зарегистрирован: 08.07.06
ссылка на сообщение  Отправлено: 17.08.13 10:17. Заголовок: SergKis, это возможн..


SergKis, это возможно то что нужно - буду изучать.

Вот что еще нарыл ночью: http://www.freevbcode.com/ShowCode.asp?ID=4042

Private Function KeyDown(ByVal vKey As KeyCodeConstants) _ 
As Boolean
KeyDown = GetAsyncKeyState(vKey) And &H8000
End Function

'DEMO USAGE
Private Sub Timer1_Timer()
If KeyDown(vbKeyF10) Then MsgBox "You pressed F10!" 'This msgbox will appear regardless of the active app.
End Sub


Как понимаю - по таймеру вызывается GetAsyncKeyState и проверяется - если нажата F10 - выводится окно. У наст такое-же можно сделать через LastKey().
Но посмотрю подобные API функции - наверняка можно будет что-то найти "рядом", подходящее по условию.

Спасибо: 0 
ПрофильЦитата Ответить
администратор




Пост N: 3404
Зарегистрирован: 17.05.05
ссылка на сообщение  Отправлено: 17.08.13 18:16. Заголовок: Sergy пишет: Вот чт..


Sergy пишет:

 цитата:
Вот что еще нарыл ночью


Тогда до кучи https://groups.google.com/forum/#!topic/comp.lang.xharbour/e77vVVb1Kuc

Спасибо: 1 
ПрофильЦитата Ответить
администратор




Пост N: 3411
Зарегистрирован: 17.05.05
ссылка на сообщение  Отправлено: 21.08.13 11:09. Заголовок: Sergy Вопрос решил ..


Sergy
Вопрос решил ?

Спасибо: 0 
ПрофильЦитата Ответить





Пост N: 167
Зарегистрирован: 08.07.06
ссылка на сообщение  Отправлено: 21.08.13 12:05. Заголовок: Dima пишет: Вопрос ..


Dima пишет:

 цитата:
Вопрос решил ?


к сожалению, нет, но очень нужно.

Пока из идей - в фоне сидит функция, которая мониторит клавиатуру по LastKey(). Если установлен флаг "запись" - складывает в буффер.

Только как отличить два подряд нажатия одной клавиши... ???


Спасибо: 0 
ПрофильЦитата Ответить
постоянный участник




Пост N: 233
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 24.08.13 17:45. Заголовок: Sergy пишет:к сожале..


Sergy пишет:
 цитата:
к сожалению, нет, но очень нужно


посмотрите в harbour\doc\en\set.txt и harbour\test\setkeys.prg
используя aKey := hb_SetKeySave() // сохранить рабочие
hb_SetKeyArray( { 49, 50, 52, 53 }, {| x | QOut( hb_keyChar( x ) ) } ) //блок кода на все клавиши поставить для записи и работы
вполне можно организовать запись всех нажатий
hb_SetKeySave(aKey) // восстановить рабочие


Спасибо: 0 
ПрофильЦитата Ответить
постоянный участник




Пост N: 234
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 24.08.13 17:50. Заголовок: Sergy пишет:Только к..


Sergy пишет:
 цитата:
Только как отличить два подряд нажатия одной клавиши... ???


есть LastKey() и NextKey(), а также Ваш буфер куда складываете ...

Спасибо: 0 
ПрофильЦитата Ответить





Пост N: 219
Зарегистрирован: 08.07.06
ссылка на сообщение  Отправлено: 24.08.13 18:15. Заголовок: SergKis пишет: посм..


SergKis пишет:

 цитата:
посмотрите в harbour\doc\en\set.txt и harbour\test\setkeys.prg
используя aKey := hb_SetKeySave() // сохранить рабочие
hb_SetKeyArray( { 49, 50, 52, 53 }, {| x | QOut( hb_keyChar( x ) ) } ) //блок кода на все клавиши поставить для записи и работы
вполне можно организовать запись всех нажатий
hb_SetKeySave(aKey) // восстановить рабочие



Честно говоря, не очень понял метода...
Как понимаю, hb_SetKeyArray() предназначена для "оптового" назначения блоков кода клавишам.
а hb_SetKeySave() - для быстрого снятия/установки блоков кода группе клавиш.

Если поставить блок кода на клавишу - он сможет ее перехватить. Но как эта кнопка доберется туда, куда она была предназначена ? В get поле, memoedit() и тп...


 цитата:
есть LastKey() и NextKey(), а также Ваш буфер куда складываете ...


При помощи LastKey() и планировал отслеживать нажатия.
Вот вызвана функция "записи" по таймеру, скажем, каждые 0,2 сек.

Она видит через LastKey() что нажата кнопка F1, складывает в буфер, возвращает управление назад.
Следующий вызов через 0,2 сек - LastKey() опять показывает K_F1 - как понять, это предыдущее нажатие или юзер еще раз успел за это время нажать ?
В хвосте буфера мы видим, что уже есть F1.

NextKey() покажет что-нибудь только если в буфере клавиатуры есть необработанные кнопки. Как она сможет помочь, если юзер, допустим, нажал два раза F1 с интервалом в 2 секунды ?

Спасибо: 0 
ПрофильЦитата Ответить
постоянный участник




Пост N: 236
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 24.08.13 20:32. Заголовок: Sergy конечно, я не ..


Sergy
конечно, я не очень понимаю как работает задача и юзера. но включив запись, я понимаю должно писаться ВСЕ, что нажимается иначе это уже алгоритмизация процесса (If ... else ... endif), а второй раз нажатая right(buffer, 1) == chr(Lastkey()). а определить где находитесь procname(1/2/...) или для get-ов делаем arraykey свой, для memoedit свой, ну т.д.

Спасибо: 0 
ПрофильЦитата Ответить
администратор




Пост N: 3462
Зарегистрирован: 17.05.05
ссылка на сообщение  Отправлено: 24.08.13 21:48. Заголовок: Sergy Покажи нам ес..


Sergy
Покажи нам если не секрет процедуру записи макроса и его воспроизведения с комментариями ,
возможно тогда у кого то мысли появятся.
PS
О Clipper грю

Спасибо: 0 
ПрофильЦитата Ответить





Пост N: 222
Зарегистрирован: 08.07.06
ссылка на сообщение  Отправлено: 24.08.13 21:53. Заголовок: В начале программы: ..


Dima пишет:

 цитата:
если не секрет






В начале программы:

SETKEY(K_CTRL_F10,{|x,y,z|DefMacro(x,y,z,"Ctrl+F10",17408)})
SETKEY(K_F10 ,{||PlayMacro()})

Далее:

Скрытый текст


Спасибо: 0 
ПрофильЦитата Ответить
постоянный участник




Пост N: 237
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 25.08.13 09:12. Заголовок: Sergy может в таком ..


Sergy
может в таком направлении:
 
STATIC cBuf := ''
...
SetKey(-29, {|| MyTest() })
SetKey(254, {|| MyTest(.T.) })
cTest := 'aaaabbbbb '
nTest := 1234567.89
@ 2, 10 GET cTest
@ 3, 10 GET nTest
READ
...
FUNC myTest( lReg )
LOCAL nKey
IF empty(lReg) // start records
cBuf := ''
KEYBOARD chr(254)
ELSE // records
DO WHILE ( nKey := inkey(0) ) != -9
cBuf += chr(nKey)
IF nKey > 31
KEYBOARD chr(nKey)+chr(254)
RETURN
ENDIF
ENDDO
ENDIF
RETURN


Спасибо: 0 
ПрофильЦитата Ответить





Пост N: 223
Зарегистрирован: 08.07.06
ссылка на сообщение  Отправлено: 25.08.13 11:43. Заголовок: идея - ОФИГИТЕЛЬНАЯ ..


идея - ОФИГИТЕЛЬНАЯ и все работает.
Ровно до тех пор, пока не возникнет потребность в спец. клавишах F1..F10, стрелки и тп...

SergKis пишет:
 цитата:
IF nKey > 31



Вот блин засада... если я правильно понимаю, Clipper с легкостью засовывал в буфер клавиатуры все спец. символы, включая K_CTRL_F4 и прочие...

Пока разбираюсь с HB_KeyPut()...

Спасибо: 0 
ПрофильЦитата Ответить
постоянный участник




Пост N: 238
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 25.08.13 12:41. Заголовок: Sergy пишет:Вот блин..


Sergy пишет:
 цитата:
Вот блин засада...


это код с S87, его конечно надо перевести на aBuf, aadd(aBuf, nKey) и hb_keyput ..., к своей ситуации

Спасибо: 0 
ПрофильЦитата Ответить





Пост N: 224
Зарегистрирован: 08.07.06
ссылка на сообщение  Отправлено: 25.08.13 18:13. Заголовок: Короче бился и так и..


Короче бился и так и эдак, получилось вот что:

Скрытый текст


Вроде заработало. Но не могу подружить с DBEDIT() - не работает вообще никак. Ничего не записывается. А он очень нужен...

Любая команда наподобие CLEAR TYPEAHEAD, KEYBOARD ломает алгоритм полностью.
У себя в коде вычистил. Возможно что-то внутри RTL осталось...

Вот что нашел в ChangeLog.txt:


 цитата:
2012-11-23 17:14 UTC+0100 Przemyslaw Czerpak (druzus/at/poczta.onet.pl) 
* harbour/contrib/xhb/xhbtedit.prg
* harbour/contrib/hbmysql/tsqlbrw.prg
* harbour/contrib/hbodbc/browodbc.prg
% eliminated NextKey() calls
; TOFIX: BrowseODBC() just like dbEdit() ignore setKey() actions
If key is pressed during stabilization faze.
I think it's
implementation problem not intentional decision and it
should be fixed - there is nothing worse then application
which ignores some keystrokes if user types to fast ;)
I'd like to ask authors of above code to check it.




Причем заметил, что если комбинацию записать в другом месте программы, а потом воспроизвести ее в DBEDIT - все работает.

Спасибо: 0 
ПрофильЦитата Ответить
Администратор




Пост N: 2954
Зарегистрирован: 23.05.05
ссылка на сообщение  Отправлено: 25.08.13 20:19. Заголовок: Извините, я не следи..


Извините, я не следил за обсуждением, у самого есть некоторые вопросы.
Идея записи и воспроизведения клавиатурных макросов сама по себе неплохая. Реализовать ее можно следующим образом:

Запись кодов клавиш:

#include "hbgtinfo.ch"

Static aKeys := {} // массив клавиш

hb_gtInfo(HB_GTI_INKEYFILTER, {|nk| KeyRec(nk)})

Static func KeyRec(nk)
AADD(aKeys, nk)
Return nk

Остановить запись:

hb_gtInfo(HB_GTI_INKEYFILTER, nil)


Воспроизвести можно той же функцией hb_KeyPut, которая в качестве параметра принимает и массив:

hb_KeyPut(aKeys)


Спасибо: 1 
ПрофильЦитата Ответить





Пост N: 226
Зарегистрирован: 08.07.06
ссылка на сообщение  Отправлено: 25.08.13 21:30. Заголовок: Pasha пишет: hb_gtI..


Pasha пишет:

 цитата:
hb_gtInfo(HB_GTI_INKEYFILTER, {|nk| KeyRec(nk)})



Методо работает ОТЛИЧНО. Во всех возможных режимах прогнал.

Все воскресенье прошло впустую...

Спасибо!!!
Harbour - сила.

Спасибо: 0 
ПрофильЦитата Ответить



Пост N: 1
Зарегистрирован: 24.09.13
ссылка на сообщение  Отправлено: 24.09.13 20:36. Заголовок: Как тут уже пробегал..


Как тут уже пробегало, с помощью hb_gtInfo( HB_GTI_INKEYFILTER, ...) можно подменить код клавиши, например
 
hb_gtInfo( HB_GTI_INKEYFILTER, { | nKey |
SWITCH nKey
CASE HB_K_F10
RETURN K_ESC
ENDSWITCH
RETURN nKey
} )


а как бы сделать еще один "финт ушами" и вставить еще несколько "нажатий"?

Спасибо: 0 
ПрофильЦитата Ответить





Пост N: 304
Зарегистрирован: 08.07.06
ссылка на сообщение  Отправлено: 24.09.13 23:08. Заголовок: Marquis31 пишет: а ..


Marquis31 пишет:

 цитата:
а как бы сделать еще один "финт ушами" и вставить еще несколько "нажатий"?



KEYSEND() - вставляет сколько душе угодно.

Спасибо: 0 
ПрофильЦитата Ответить



Пост N: 2
Зарегистрирован: 24.09.13
ссылка на сообщение  Отправлено: 25.09.13 08:04. Заголовок: Сейчас проверю, но е..


Сейчас проверю, но есть у меня подозрение, что это "нажатие" вернется в тот же обработчик, заданный в hb_gtInfo(...



Спасибо: 0 
ПрофильЦитата Ответить





Пост N: 306
Зарегистрирован: 08.07.06
ссылка на сообщение  Отправлено: 25.09.13 12:44. Заголовок: Конечно вернется - м..


Конечно вернется - можно даже не проверять. Иначе этот обработчик не работал-бы...

Только ведь в нем не все кнопки должны быть заменены, а только те, что нужны.

Спасибо: 0 
ПрофильЦитата Ответить



Пост N: 3
Зарегистрирован: 24.09.13
ссылка на сообщение  Отправлено: 25.09.13 13:32. Заголовок: Да в том-то и пробле..


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

(я чужой проект переношу, а там разработчик понимал толк в извращениях, хехе)

Спасибо: 0 
ПрофильЦитата Ответить





Пост N: 308
Зарегистрирован: 08.07.06
ссылка на сообщение  Отправлено: 25.09.13 14:35. Заголовок: Если нужна помощь - ..


Если нужна помощь - есть смысл привести пример кода. У меня тоже, как оказалось, был "толк в извращениях", которые 10 лет назад написал на Clipper и забыл. А сейчас с переходом на Harbour пришлось вспоминать... хехе)

Спасибо: 0 
ПрофильЦитата Ответить



Пост N: 4
Зарегистрирован: 24.09.13
ссылка на сообщение  Отправлено: 25.09.13 14:57. Заголовок: Все, кажись, выкрути..


Все, кажись, выкрутился ))

В hb_KeyPut загонял нужные клавиши массивом, как выше и рекомендовалось, а перед его вызовом сделал hb_gtInfo(HB_GTI_INKEYFILTER, nil)



Спасибо: 0 
ПрофильЦитата Ответить
администратор




Пост N: 4716
Зарегистрирован: 17.05.05
ссылка на сообщение  Отправлено: 12.04.15 15:31. Заголовок: Хорошая штука hb_gtI..


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


Спасибо: 0 
ПрофильЦитата Ответить
администратор




Пост N: 5331
Зарегистрирован: 17.05.05
ссылка на сообщение  Отправлено: 05.11.15 11:16. Заголовок: Иногда юзера стали ж..


Иногда юзера стали жаловаться что прога подвисает (ранее таких жалоб вроде не было)
В программе живет вот такой код
hb_gtInfo(HB_GTI_INKEYFILTER, {|nk| aadd(aDownKeys,nk)})

В отдельном потоке этот массив обнуляется (aDownKeys) при достижении его длины больше двух.
Не может это обнуление вызвать зависон ?
Гонял у себя прогу , на такой эффект попасть не смог.

Спасибо: 0 
ПрофильЦитата Ответить
Ответов - 45 , стр: 1 2 3 All [только новые]
Ответ:
1 2 3 4 5 6 7 8 9
большой шрифт малый шрифт надстрочный подстрочный заголовок большой заголовок видео с youtube.com картинка из интернета картинка с компьютера ссылка файл с компьютера русская клавиатура транслитератор  цитата  кавычки моноширинный шрифт моноширинный шрифт горизонтальная линия отступ точка LI бегущая строка оффтопик свернутый текст

показывать это сообщение только модераторам
не делать ссылки активными
Имя, пароль:      зарегистрироваться    
Тему читают:
- участник сейчас на форуме
- участник вне форума
Все даты в формате GMT  3 час. Хитов сегодня: 18
Права: смайлы да, картинки да, шрифты да, голосования нет
аватары да, автозамена ссылок вкл, премодерация откл, правка нет