Форум » [x]Harbour » Замена Inkeytrap() » Ответить

Замена Inkeytrap()

azoo: В clipper tools есть функция inkeytrap(), расширяющая возможности inkey() ? Если аналог inkeytrap() в Harbour ? Или как сделать, чтобы при ожидании нажатия inkey() обрабатывались события, заданные SET KEY..... ?

Ответов - 9

Vlad04: У меня в главном файле написано SET KEY -40 TO Calck() SET KEY -41 TO pRekct() Калькулятор , печать из любого места программы. А дальше сплошные ожидания (KEY:=INKEY(0)) В меня, в get, brows. Но KEY обрабатываю. В зависимости, что нажато, соответствующая реакция.

azoo: Vlad04 не понял ответа. (KEY:=INKEY(0)) всё равно -40 и -41 обрабатывает. Функции Calck() и pRekct() не вызываются.

petr707: что-то навроде этого //----------------------------h_inkey()---------- FUNCTION h_inkey(q) // inkey with SETKEY Local h_key,lkey,key_bl DO WHILE .T. h_key=.F. IF q=NIL;lkey=inkey();ELSE;lkey=inkey(q);ENDIF IF lkey!=0.AND.(key_bl:=setkey(lkey))!=NIL eval(key_bl,procname(2),procline(2),"");h_key=.T. ENDIF IF !h_key;EXIT;ENDIF ENDDO return lkey


Pasha: azoo пишет: Если аналог inkeytrap() в Harbour ? В xHarbour эти функции уже реализованы. Можно оттуда взять модуль source\ct\trapkey.prg

azoo: Pasha может лучше xHarbour использовать ? Получается в xHarbоur лучше реализован CT. В принципе мне всё равно каким пользоваться, поскольку раньше не пользовался им. Уже научился как Harbour-ом компилировать, @set HB_INSTALL=c:\hb30 %HB_INSTALL%\bin\harbour %1.prg -i%HB_INSTALL%\include bcc32 -O2 -d -I%HB_INSTALL%\include -L%HB_INSTALL%\lib\win\bcc %1.c hbdebug.lib hbvm.lib hbrtl.lib gtwin.lib hbcpage.lib hblang.lib hbrdd.lib hbmacro.lib hbpp.lib ace32.lib rddads.lib rddntx.lib rddcdx.lib rddfpt.lib hbsix.lib hbcommon.lib hbct.lib такой батник для xHarbour не подошёл.

Pasha: azoo пишет: Pasha может лучше xHarbour использовать ? Получается в xHarbоur лучше реализован CT. Не думаю, что лучше. Наличие одной редкой функции - не показатель. В xHarbour последние несколько лет было очень мало изменений в ct, в отличие от Harbour. А этот модуль легко перенести в Harbour, наверное, просто он никому не бросился в глаза.

azoo: Function InkeyTrap( nDelay ) Local nKey := INKEY( 0 ) Local bKeyBlock HB_SYMBOL_UNUSED( nDelay ) IF nKey # 0 .and. ( bKeyBlock := SETKEY( nKey ) ) <> NIL EVAL( bKeyBlock, PROCNAME(1), PROCLINE(1), "" ) ENDIF Return nKey Что значит строка "HB_SYMBOL_UNUSED( nDelay )" ?

Dima: azoo STD.CH #define HB_SYMBOL_UNUSED( symbol ) ( ( symbol ) )

azoo: Данная функция не совсем такая как в Clipper. При нажатии на запрограммированную клавишу функция вызывается, но и срабатывает сама inkey, т.е. возвращается код в буфер обмена. Мне кажется так будет лучше: Function InkeyTrap( nDelay ) Local nKey, bKeyBlock while .t. nKey := INKEY( nDelay ) IF nKey # 0 .and. ( bKeyBlock := SETKEY( nKey ) ) <> NIL EVAL( bKeyBlock, PROCNAME(1), PROCLINE(1), "" ) ELSE exit ENDIF end Return nKey #define HB_SYMBOL_UNUSED( symbol ) ( ( symbol ) ) не могу понять смысл этого переназначения



полная версия страницы