Re: Как работать с ON KEY LABEL или чем эту конструкцию заменить? | |
---|---|
akvvohinc Сообщений: 4212 Откуда: Москва Дата регистрации: 11.11.2008 |
Очевидно, что в реальном случае F2 (или какой другой код) - лишь часть общей задачи по обработке клавиш, так что полагаем по умолчанию, что KeyPress формы нужен, а следовательно, именно он "примет на себя первый удар". |
Re: Как работать с ON KEY LABEL или чем эту конструкцию заменить? | |
---|---|
Crispy Сообщений: 18571 Дата регистрации: 16.05.2005 |
Ну а как еще. ;) Хотя бывают конечно уникальные случаи, когда без ON KEY LABEL не обойтись. Но они уж очень уникальные. Это как кувалда. Все пробивает насквозь. Но для тонких работ все же лучше не пользоваться. ------------------ В действительности все иначе, чем на самом деле. (Антуан де Сент-Экзюпери) |
Re: Как работать с ON KEY LABEL или чем эту конструкцию заменить? | |
---|---|
akvvohinc Сообщений: 4212 Откуда: Москва Дата регистрации: 11.11.2008 |
Ну, не каждому, а каким-то конкретным, но я не ограничивал тебя тем, как именно решать эту задачу, то есть где писать код обработки. Главное, чтобы у пользователя происходили разные вещи при нажатии клавиши в разных активных объектах. Попробуй сначала обеспечить работу при том же подходе для обычных форм (не Top-Level)... |
Re: Как работать с ON KEY LABEL или чем эту конструкцию заменить? | |
---|---|
Crispy Сообщений: 18571 Дата регистрации: 16.05.2005 |
А в чем проблема? Вызываешь просто из топлевел-формы не топлевел - и все точно так же работает и в ней. Специально только что проверил. ------------------ В действительности все иначе, чем на самом деле. (Антуан де Сент-Экзюпери) |
Re: Как работать с ON KEY LABEL или чем эту конструкцию заменить? | |
---|---|
Crispy Сообщений: 18571 Дата регистрации: 16.05.2005 |
Т.е. если не пользоваться главным окно фокспро - проблем вообще никаках.
Если же пользоваться - блокируются F2, F10 и некоторые комбинации Ctrl+... - хотя остальные функциональные клавиши и сочетания в принципе работают нормально. Но это известная старая беда главного окна. Для ее решения нужны просто уже всякие извращения проделывать. Но я ж говорю - нафига вообще пользоваться этим главным окном? ;) Мы эту тему еще с Пивой помнится тут обсуждали фиг знает когда. А с неработабщими в главном окне нажатиями тоже что-то помнится всплывало уже и после периодически. ------------------ В действительности все иначе, чем на самом деле. (Антуан де Сент-Экзюпери) |
Re: Как работать с ON KEY LABEL или чем эту конструкцию заменить? | |
---|---|
akvvohinc Сообщений: 4212 Откуда: Москва Дата регистрации: 11.11.2008 |
Проблем вообще никаких и если не пользоваться фокспро. |
Re: Как работать с ON KEY LABEL или чем эту конструкцию заменить? | |
---|---|
Crispy Сообщений: 18571 Дата регистрации: 16.05.2005 |
Но жалко. ------------------ В действительности все иначе, чем на самом деле. (Антуан де Сент-Экзюпери) |
Re: Как работать с ON KEY LABEL или чем эту конструкцию заменить? | |
---|---|
Igor Korolyov Сообщений: 34580 Дата регистрации: 28.05.2002 |
Могу ошибаться, давно было, но мне кажется что у себя я практически никогда не использоват KeyPress формы для "обработки клавиш". "Глобальные" действия проще было прописать хоткеями для пунктов меню, всё "локальное" - в самих контролах. И потому логику взаимодействия KeyPress формы с KeyPress текстбокса на форме в режиме KeyPreview я не анализировал.
Пример, конечно, практически бессмысленный, но он работает - вместо "штатных" действий по нажатию стрелки вправо и клавиши ввода, происходят действия соответствующие нажатию табулятора и стрелки вверх. Как я понимаю, это как раз те "нажатия кнопок" которые и обрабатывает сама форма - что вполне логично. Ну а уж то что она не инициирует при подобной "замене" срабатывания KeyPress текстбоксов и выполнение "системных действий обработчика KeyPress текстбокса" (независимо от наличия там пользовательского кода, кстати) - ну может быть это баг. А может быть просто непредусмотренное поведение, т.к. до таких "странностей" разрабы вполне могли и не додуматься Кстати, у меня не захотела работать комбинация Shift+Tab - DODEFAULT(15, 1) - опять же не исключаю что это баг - и что статус кнопок-модификаторов в "системном" обработчике берётя не из параметров а напрямую через АПИ-функцию чтения состояния клавиатуры.
------------------ WBR, Igor |
Re: Как работать с ON KEY LABEL или чем эту конструкцию заменить? | |
---|---|
akvvohinc Сообщений: 4212 Откуда: Москва Дата регистрации: 11.11.2008 |
Пример интересный, и надо бы его получше осмыслить (на таких клавишах я, конечно, никогда не "играл" с DODEFAULT() ). Но немного поэкспериментировав с ним, я не заметил, чтобы DODEFAULT() после NODEFAULT сделал ровно то же, что и простое нажатие:
Курсор просто уходит на следующий текстбокс, в каком бы месте текущего текстбокса ни находился курсор. То есть сказать, что "происходят соответствующие действия" вряд ли верно.
Вот в этом месте и надо подумать - что это такое - "кнопки, которые обрабатывает сама форма". Ведь все кнопки, если ничего не делать, сначала попадут в KeyPress формы, а затем в KeyPress активного объекта. При этом NODEFAULT отменяет тоже все кнопки, а вот DODEFAULT() с каким-то набором кнопок ведет себя иначе - послать букву А или F2 не получается, а стрелки, Tab и т.п. - можно (пусть реакция на них и не совсем ожидаемая). |
Re: Как работать с ON KEY LABEL или чем эту конструкцию заменить? | |
---|---|
leonid Сообщений: 3204 Откуда: Рига Дата регистрации: 03.02.2006 |
Посмотрите еще такой вариант
|
Re: Как работать с ON KEY LABEL или чем эту конструкцию заменить? | |
---|---|
akvvohinc Сообщений: 4212 Откуда: Москва Дата регистрации: 11.11.2008 |
Посылать несколько таких кнопок я пробовал - здесь результат, на мой взгляд, закономерный - если одна "стрелка право" уводит курсор к "завтрашнему" объекту, то две - к "послезавтрашнему". |
Re: Как работать с ON KEY LABEL или чем эту конструкцию заменить? | |
---|---|
Taran Автор Сообщений: 13623 Откуда: Красноярск Дата регистрации: 16.01.2008 |
2Артём
Если далеко не ушёл от начального вопроса, то попробуй вместо
Исправлено 1 раз(а). Последнее : Taran, 16.11.19 16:32 |
Re: Как работать с ON KEY LABEL или чем эту конструкцию заменить? | |
---|---|
Igor Korolyov Сообщений: 34580 Дата регистрации: 28.05.2002 |
_screen.activeform периодически будет "not an object". Напрямую так писать нельзя - надо проверками окружать...
------------------ WBR, Igor |
Re: Как работать с ON KEY LABEL или чем эту конструкцию заменить? | |
---|---|
Taran Автор Сообщений: 13623 Откуда: Красноярск Дата регистрации: 16.01.2008 |
Да я в курсе. Если ты хотел ТСу сказать, то чеж сразу не привёл правильный код? И так уж третья страница ни о чем. |
Re: Как работать с ON KEY LABEL или чем эту конструкцию заменить? | |
---|---|
Igor Korolyov Сообщений: 34580 Дата регистрации: 28.05.2002 |
Да лень же, Олег Неактуальность всей темы не настраивает на вдумчивое и подробное объяснение. Как раз "ни о чём" ещё интересно поговорить, а решать конкретные проблемы ТС - увы, нет. Сам додумает, на то он и программист.
------------------ WBR, Igor |
Re: Как работать с ON KEY LABEL или чем эту конструкцию заменить? | |
---|---|
Taran Автор Сообщений: 13623 Откуда: Красноярск Дата регистрации: 16.01.2008 |
Все так, Игорь. ;)
Вторым постом в данной теме надо было сказать про activeform и забыть. Я думаю ТС, не в обиду будь сказано, слегка далёк от столь бурного обсуждения. У меня, кстати, глобальная процедура и обьект назначения горячих клавишь. И в большинстве случаях фокус перемещается на соотв. кнопку. Ну т.е. стоим в gride, нажали F4 (у меня это редактирование) и соотв. кнопка рядом получает фокус. И т.д. и т.п.. |
Re: Как работать с ON KEY LABEL или чем эту конструкцию заменить? | |
---|---|
akvvohinc Сообщений: 4212 Откуда: Москва Дата регистрации: 11.11.2008 |
Как же забыть, если самое интересное как раз и начинается после "not an object"? Неужели у ТС не возникнет вопрос "И что делать?" Ну, проверили мы и получили этот "необъект", а дальше? 1) ждать, когда "not an object" станет "object"; 2) заставить необъект стать объектом; 3) наплевать, что команда в этот раз не будет выполнена ("Ну не шмогла я, не шмогла!"); 4) наплевать на нестабильно работающий способ, заменив его на надежный (может, KeyPress()? ) ; 5) что-то еще... Исправлено 1 раз(а). Последнее : akvvohinc, 17.11.19 13:32 |
Re: Как работать с ON KEY LABEL или чем эту конструкцию заменить? | |
---|---|
Igor Korolyov Сообщений: 34580 Дата регистрации: 28.05.2002 |
Вообще-то просто наплевать - если not an object - значит нет активной формы. Смысла что-то делать с неактивной формой нет (например если она перекрыта превьюхой отчёта или каким modi file). Теоретически можно в атктивации/деактивации форм ставить/снимать все назначения, но на практике могут быть нюансы, так что защита нужна всё равно...
В любом случае никакой KeyPress в такой ситуации всё равно не сработает - просто до него не дойдёт дело, если форма не активна ------------------ WBR, Igor |
Re: Как работать с ON KEY LABEL или чем эту конструкцию заменить? | |
---|---|
pasha_usue Сообщений: 3649 Откуда: Е-бург Дата регистрации: 06.10.2006 |
Вообще, ошибочно считать, что в стеке вызовов KeyPress активного объекта лежит непосредственно после вызова KeyPress формы. Скорей всего они работают в режиме подписки на события, и вызываются последовательно на одном и том же уровне. Поэтому KeyPress формы не пересекается с KeyPress объекта. Как и BINDEVENT, например. |
Re: Как работать с ON KEY LABEL или чем эту конструкцию заменить? | |
---|---|
Igor Korolyov Сообщений: 34580 Дата регистрации: 28.05.2002 |
В стеке вызовов фоксового кода они то не лежат как "один вызванный из другого" - ну конечно если нет явных вызовов типа ThisForm.txtSome.KeyPress(5,0)
А как там внутри рантайма всё организовано - хз. Фоксовые контролы не являются полноценными окнами, потому послать WM текстбоксу система не может - всё разруливает обработчик WM самой формы. Потому то он без проблем может и "подавить" вызов KeyPress для текстбокса, и заслать туда что-то своё (хотя, похоже, он так и не делает никогда). ------------------ WBR, Igor |
© 2000-2024 Fox Club  |