|
Как контролировать вызовы по on key label
|
|||
---|---|---|---|
#18+
в головном модуле есть "горячие" вызовы других модулей вида ... on key label F2 do PROC00 with(1) in MAIN && Справочник 1 on key label F3 do PROC00 with(2) in MAIN && Справочник 2 ... в вызываемых модулях ... - какие-то подготовительные действия в процедуре - окно просмотра (browse или запертое read'ом окно) - какие-то завершающие действия в процедуре ... При вызове модулей через меню проблем не возникает, а при чрезмерных "скаканиях" по модулям через горячие клавиши очень быстро добиваемся сообщения 'Insufficient stack space'. Переполнение вложения do меня не волнует. Волнует то, что при скаканиях я не могу выполнить завершающие операции в процедурах. Вопрос. Как контролировать вызовы по on key label таким образом, чтобы можно было при вызове on key label завершить текущую процедуру. FPD 2.6 ... |
|||
:
Нравится:
Не нравится:
|
|||
21.04.2011, 17:19 |
|
Как контролировать вызовы по on key label
|
|||
---|---|---|---|
#18+
предполагаю - вот вызвана процедура по он кей, - первой же строкой нужно переопределить он кей или не на что не назначить - без параметров, либо назначить на завершающий код, который выделить в отдельную процедуру... По типу булевой переменной сначала да... вызвал - переменная стала "нет", и потом когда нужно, включаешь переменную снова ("да") ... |
|||
:
Нравится:
Не нравится:
|
|||
23.04.2011, 19:51 |
|
Как контролировать вызовы по on key label
|
|||
---|---|---|---|
#18+
guestT1, Не могу сказать за FPD 2.6, но в VFP9 Код: plaintext 1. 2. 3.
... |
|||
:
Нравится:
Не нравится:
|
|||
24.04.2011, 04:01 |
|
Как контролировать вызовы по on key label
|
|||
---|---|---|---|
#18+
На входе в процедуру ставишь: Код: plaintext
Код: plaintext
... |
|||
:
Нравится:
Не нравится:
|
|||
24.04.2011, 09:22 |
|
Как контролировать вызовы по on key label
|
|||
---|---|---|---|
#18+
Спасибо всем ответившим. Ответа на свой вопрос не получил, видимо из-за его не правильной формулировки. Я в курсе о PUSH KEY и POP KEY, вопрос не технической реализации, а логической. Если к примеру в коде Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40.
вызовы из меню, то отрабатывается все что написано до browse и после его как и задумано (создал - уничтожил, связал-отключил, сохранил-восстановил и т.д.), а если в момент работы browse нажали "горячую клавишу", то после browse нет отработки что задумывалось, и возврата нет, и лезут ошибки типа уже открыто, используется и т.д. Т.е. получается что on key label глобальный не имеет смысла (т.к. в модуле его надо "заглушить" и восстановить при выходе), либо я его не умею готовить. О чем собственно сабж. ... |
|||
:
Нравится:
Не нравится:
|
|||
26.04.2011, 11:52 |
|
Как контролировать вызовы по on key label
|
|||
---|---|---|---|
#18+
Как написал - так и работает, ничего странного в этом нет. Твой код работает так: Код: plaintext 1. 2. 3. 4. 5. 6.
Код: plaintext 1. 2. 3. 4. 5. 6. 7.
нажали F3 (do BBB) причем выхода из AAA не происходит, там все ожидается закрытие BROW Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10.
Т.е. при нажатии на F3 в выше описанном примере должно произойти что-то типа: Код: plaintext 1.
... |
|||
:
Нравится:
Не нравится:
|
|||
26.04.2011, 13:01 |
|
Как контролировать вызовы по on key label
|
|||
---|---|---|---|
#18+
Dima TКак написал - так и работает, ничего странного в этом нет. Твой код работает так: Пример привел для демонстрации аварийной ситуации. С одной стороны преследуется надежность работы приложения, с другой - ищется компромис между количеством проверок типа if used() и т.п. а так как модулей очень много, а в них процедур тьма то если все на все проверять, то за деревьями и леса не видать. Хотелось бы иметь ясный код с прозрачной логикой выполнения, но судя по откликам народ подход использует в основном "блинчиком": Меню - вызов процедуры. Думал меня кто на read подтолкнет. Dima T... поэтому только писать извраты с командой KEYBOARD Спасибо за хинт, думаю написать один обработчик который бы "разруливал" вызова и завершал нормально процедуры. ... |
|||
:
Нравится:
Не нравится:
|
|||
26.04.2011, 17:00 |
|
Как контролировать вызовы по on key label
|
|||
---|---|---|---|
#18+
guestT1Думал меня кто на read подтолкнет.А что, до сих пор без Read cycle? Если да, то ничего удивительного... ... |
|||
:
Нравится:
Не нравится:
|
|||
26.04.2011, 17:14 |
|
Как контролировать вызовы по on key label
|
|||
---|---|---|---|
#18+
Sergey SizovА что, до сих пор без Read cycle? Если да, то ничего удивительногоЯ вижу, что вы поняли мою проблему. Прошу подсказать куда подставить Read cycle хотя бы в мой выше приведенный маленький пример для решения проблемы. ... |
|||
:
Нравится:
Не нравится:
|
|||
26.04.2011, 17:24 |
|
Как контролировать вызовы по on key label
|
|||
---|---|---|---|
#18+
guestT1Sergey SizovА что, до сих пор без Read cycle? Если да, то ничего удивительногоЯ вижу, что вы поняли мою проблему. Прошу подсказать куда подставить Read cycle хотя бы в мой выше приведенный маленький пример для решения проблемы.Да сразу после вызова меню. Но в меню или в коде, который из него вызывается, должно быть изменение условия выхода из цикла. Тогда и получиться нечто похожее на Read events. ... |
|||
:
Нравится:
Не нравится:
|
|||
26.04.2011, 17:40 |
|
Как контролировать вызовы по on key label
|
|||
---|---|---|---|
#18+
Sergey SizovДа сразу после вызова менюНечто подобное, "подпирающее" меню должно быть в любой программе на фоксе для реализации состояния "ожидания", иначе программа завершится. У меня тоже это есть, без этого никак. Вы предлагаете между "подпоркой" и меню вставить read и для каждого вызова из меню менять его условия выхода и таким образом контролировать переход на browse по on key label? Или я не правильно понял? ... |
|||
:
Нравится:
Не нравится:
|
|||
26.04.2011, 18:10 |
|
Как контролировать вызовы по on key label
|
|||
---|---|---|---|
#18+
guestT1Sergey SizovДа сразу после вызова менюНечто подобное, "подпирающее" меню должно быть в любой программе на фоксе для реализации состояния "ожидания", иначе программа завершится. У меня тоже это есть, без этого никак.А вот и нет. Read cycle и является "подпоркой". Вы предлагаете между "подпоркой" и меню вставить read и для каждого вызова из меню менять его условия выхода и таким образом контролировать переход на browse по on key label? Или я не правильно понял?Не правильно. ... |
|||
:
Нравится:
Не нравится:
|
|||
26.04.2011, 18:18 |
|
Как контролировать вызовы по on key label
|
|||
---|---|---|---|
#18+
Я так в своих прогах на FPD специально расписывал UDF вместо push/pop key, со стеком переопределений функциональных клавиш. То есть перед вызовами интерактивов (menu/activate, browse, @get/read cycle) предыдущее состояние запоминалось, затем необходимое переопределялось, после отработки и возврата на текущий уровень - восстанавливалось... ... |
|||
:
Нравится:
Не нравится:
|
|||
01.05.2011, 06:19 |
|
Как контролировать вызовы по on key label
|
|||
---|---|---|---|
#18+
А, да, примерчик... переписывать не стал (производство 96-го года) - думаю, разберётесь. RESTER Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. 45. 46. 47. 48. 49. 50. 51. 52.
Пользуемся примерно так: ONKEY Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19.
Приложение - таблицы ... |
|||
:
Нравится:
Не нравится:
|
|||
01.05.2011, 06:35 |
|
Как контролировать вызовы по on key label
|
|||
---|---|---|---|
#18+
По идее, это аналог push/pop. Но позволяющий не обращать внимание на ограничения и неявные действия фокса (типа сброса по CLEAR). ... |
|||
:
Нравится:
Не нравится:
|
|||
01.05.2011, 06:46 |
|
Как контролировать вызовы по on key label
|
|||
---|---|---|---|
#18+
Спасибо всем ответившим, но повторюсь, вопрос не касается технической реализации манипуляций с on key label (запомнить, восстановить, переопределить и т.п.) а логической организации приложения, когда на browse вызывается on key label и не отрабатывается завершающие действия перед вызовом. Ближе всех понял вопрос "Dima T ", ему отдельное спасибо за "писать извраты с командой KEYBOARD". Это не значит, что буду делать именно так, но мысли полезные появились )). Если процедура по on key label отработала и управление вернулось на browse из которого она вызывалась, то и вопросов нет. А когда вызывающая процедура например переопределила связи, индексы и из нее был переход (может не сразу а через другие процедуры) на первую происходит error который бы не хотелось допускать. ... |
|||
:
Нравится:
Не нравится:
|
|||
04.05.2011, 10:27 |
|
Как контролировать вызовы по on key label
|
|||
---|---|---|---|
#18+
guestT1вызывающая процедура например переопределила связи, индексы и из нее был переход (может не сразу а через другие процедуры) на первую происходит error который бы не хотелось допускать. А это, батенька, ошибки проектирования. Так делать не следует. Незря в Фоксе GOTO отсутствует... Или я чего-то недопонимаю? Может, вы мыслите о том, что вам надо переключаться между одновременно открытыми окнами с brows'ами и иметь правильные назначения клавиш в каждом из окон?.. тут да, READ EVENTS нет, так что "извращаться" придется. ... |
|||
:
Нравится:
Не нравится:
|
|||
08.05.2011, 21:00 |
|
Как контролировать вызовы по on key label
|
|||
---|---|---|---|
#18+
guestT1, Может отца русской демократии спасёт набор из двух функций, которые сохраняют/восстанавливают назначение клавиш F. Фунция SaveFKeys() сохраняет назначение клавиш, функция RestoreFKeys() восстанавливает ранее сохранённые значения. В модуле, вызванном по (пример) F5 в начале SaveFKeys(), в конце модуля перед RETURN ставим RestoreFKeys(). Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42.
... |
|||
:
Нравится:
Не нравится:
|
|||
09.05.2011, 04:48 |
|
|
start [/forum/topic.php?fid=41&fpage=75&tid=1584375]: |
0ms |
get settings: |
11ms |
get forum list: |
14ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
31ms |
get topic data: |
13ms |
get forum data: |
3ms |
get page messages: |
58ms |
get tp. blocked users: |
1ms |
others: | 273ms |
total: | 412ms |
0 / 0 |