Форум » Clipper » Как переопределить поведение при нажатии Alt-C ? » Ответить

Как переопределить поведение при нажатии Alt-C ?

pp519446: Всем привет. Есть сильная потребность в следующем: при нажатии юзером (или мною) Alt-C прога должна: 1) выводить не только имя той функции, где это случилось, а вообще весь стек 2) сохранять в лог дату_время + стек Как это сделать ? Пробовал set key 302 to my_cancel_handler - не работает :( PS. OFF. А когда это сделали требование, чтобы логин содержал непременно две буквы ? Верните взад старое! :-)

Ответов - 4

Dima: pp519446 пишет: Пробовал set key 302 to my_cancel_handler - не работает Все работает. [pre2] Setcancel(.f.) set key 302 to test wait ******** Func test() cls ? "Test "+time() return [/pre2] pp519446 пишет: Верните взад старое! :-) Пиши сюда http://a.borda.ru/

pp519446: > Все работает. Как-то не очень сильно бросилось в глаза... ;-) Вот, запусти и попробуй замочить по Альт-Це. Получится ? cls Setcancel(.f.) set key 302 to test i=1 @ 5,0 say 'i`ve started! try to cancel me if you can. . . :-)' whil .t. if mod(i,1000)=0 @ 6,0 say i endi i=i+1 endd wait ******** Func test() cls ?'catch cancellation in '+PROCNAME()+' at '+time()+' '+PROCNAME(1)+':'+LTRI(STR( PROCLINE(1) )) quit return

Dima: pp519446 пишет: Вот, запусти и попробуй замочить по Альт-Це. Получится ? При таком подходе и любая другая комбинация не сработает. [pre2] SET KEY является командой работы с клавиатурой, которая разрешает выполнение процедуры из любого состояния ожидания после нажатия обозначенной клавиши. Состояние ожидания - это любой режим ожидания ввода с клавиатуры, за исключением функции INKEY(). Эти режимы включают ACHOICE(), DBEDIT(), MEMOEDIT(), ACCEPT, INPUT, READ и WAIT. После того, как клавиша переназначена, в результате нажатия на нее выполняется заданная процедура, при этом в нее автоматически передаются три параметра, соответствующих значениям функций: PROCNAME(), PROCLINE() и READVAR(). Первый и третий параметр имеют тип - CHARACTER, а второй - NUMERIC. [/pre2]


PSP: Для Inkey() можно использовать такой заменитель (обрабатывает установку Setkey() ): [pre2] #include "common.ch" /*** * InkeyEval( [nSecs] ) --> nInkeyCode * Заменяет InKey() с обработкой SetKey() * nSecs - аналогично функции Inkey() */ FUNCTION InkeyEval( nSecs ) LOCAL nKey LOCAL nStart := Seconds() LOCAL bKeyBlock WHILE .T. nKey := Inkey() IF ISNIL( nSecs ) EXIT END // IF IF ( bKeyBlock := SetKey( nKey ) ) <> NIL Eval( bKeyBlock, PROCNAME( 2 ), PROCLINE( 2 ) ) nStart := Seconds() LOOP END // IF IF ( nSecs <> 0 .and. ( Seconds() - nStart > nSecs ) ) .or. ; ( nSecs == 0 .and. nKey <> 0 ) EXIT END // IF END // WHILE RETURN nKey [/pre2]



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