Автор | Сообщение |
|
| |
Пост N: 1
Зарегистрирован: 10.06.12
|
|
Отправлено: 10.06.12 14:11. Заголовок: Как переопределить поведение при нажатии Alt-C ?
Всем привет. Есть сильная потребность в следующем: при нажатии юзером (или мною) Alt-C прога должна: 1) выводить не только имя той функции, где это случилось, а вообще весь стек 2) сохранять в лог дату_время + стек Как это сделать ? Пробовал set key 302 to my_cancel_handler - не работает :( PS. OFF. А когда это сделали требование, чтобы логин содержал непременно две буквы ? Верните взад старое! :-)
|
|
|
Ответов - 4
[только новые]
|
|
|
| |
Пост N: 2404
Зарегистрирован: 17.05.05
|
|
Отправлено: 10.06.12 15:30. Заголовок: pp519446 пишет: Про..
pp519446 пишет: цитата: | Пробовал set key 302 to my_cancel_handler - не работает |
| Все работает. Setcancel(.f.) set key 302 to test wait ******** Func test() cls ? "Test "+time() return pp519446 пишет: Пиши сюда http://a.borda.ru/
|
|
|
|
| |
Пост N: 2
Зарегистрирован: 10.06.12
|
|
Отправлено: 10.06.12 21:08. Заголовок: > Все работает. ..
> Все работает. Как-то не очень сильно бросилось в глаза... ;-) Вот, запусти и попробуй замочить по Альт-Це. Получится ? 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
|
|
|
|
| |
Пост N: 2405
Зарегистрирован: 17.05.05
|
|
Отправлено: 10.06.12 21:30. Заголовок: pp519446 пишет: Вот..
pp519446 пишет: цитата: | Вот, запусти и попробуй замочить по Альт-Це. Получится ? |
| При таком подходе и любая другая комбинация не сработает. SET KEY является командой работы с клавиатурой, которая разрешает выполнение процедуры из любого состояния ожидания после нажатия обозначенной клавиши. Состояние ожидания - это любой режим ожидания ввода с клавиатуры, за исключением функции INKEY(). Эти режимы включают ACHOICE(), DBEDIT(), MEMOEDIT(), ACCEPT, INPUT, READ и WAIT. После того, как клавиша переназначена, в результате нажатия на нее выполняется заданная процедура, при этом в нее автоматически передаются три параметра, соответствующих значениям функций: PROCNAME(), PROCLINE() и READVAR(). Первый и третий параметр имеют тип - CHARACTER, а второй - NUMERIC.
|
|
|
|
| постоянный участник
|
Пост N: 776
Зарегистрирован: 27.01.07
|
|
Отправлено: 11.06.12 09:41. Заголовок: Для Inkey() можно ис..
Для Inkey() можно использовать такой заменитель (обрабатывает установку Setkey() ): #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
|
|
|
|