Как работать с ON KEY LABEL или чем эту конструкцию заменить? | |
---|---|
Артём Автор Сообщений: 117 Дата регистрации: 23.04.2001 |
Хочу из формы по кнопке, к примеру, F2 запустить модальное окно. Там выбрать значение, это значение вернуть в форму. После этого обновить Grid на форме.
Передать выбранные данные я могу через глобальную (или , может, PRIVATE) переменную. А вот обновить Grid не знаю как. другими словами. есть обработчик кнопки
как это вызвать при нажатии на F2 (F2 - кнопка к которой все пользователи досовской версии привыкли) Из ON KEY LABEL F2 не видно this и следующая строка не работает
з.ы. Использую VFP 9 Исправлено 2 раз(а). Последнее : Артём, 10.11.19 16:20 |
Re: Как работать с ON KEY LABEL или чем эту конструкцию заменить? | |
---|---|
akvvohinc Сообщений: 4224 Откуда: Москва Дата регистрации: 11.11.2008 |
Если вы готовы передавать данные через глобальную переменную, то что мешает передавать в обработчик аналогично и ссылку на грид (или форму)? Напишите где-нибудь в Init формы:
и используйте ogrid в обработчике. PS А в обработчике первой же строкой надо отключать ваш ON KEY LABEL во избежание рекурсивного вызова обработчика:
Исправлено 2 раз(а). Последнее : akvvohinc, 10.11.19 16:56 |
Re: Как работать с ON KEY LABEL или чем эту конструкцию заменить? | |
---|---|
Артём Автор Сообщений: 117 Дата регистрации: 23.04.2001 |
Спасибо. Пока так и сделаю. Ну и жду более красивых решений, вдруг, они есть.
Это я в курсе. Помнится много лет назад, когда впервые ON KEY LABEL использовал, переназначил ON KEY LABEL ENTER и не отключил. Программа сразу сошла с ума. Искал ошибку несколько дней. теперь мои обработчики FOX for DOS выглядят примерно так
з.ы. про push key не знал. спасибо Исправлено 3 раз(а). Последнее : Артём, 10.11.19 17:08 |
Re: Как работать с ON KEY LABEL или чем эту конструкцию заменить? | |
---|---|
akvvohinc Сообщений: 4224 Откуда: Москва Дата регистрации: 11.11.2008 |
Обработчик F2 может ничего не выполнять, кроме установки некоторого флажка (это может быть что угодно - переменная, свойство объекта, поле таблицы, файл и т.п., но все равно - нечто внешнее по отношению к обработчику). А таймер на форме будет анализировать этот флаг, выполнять обработку, если требуется, и сбрасывать флаг. В таймере проблем с использованием this или thisform не будет. "Глобальность" есть и здесь, но при таком подходе ее проще "систематизировать" - "централизованные" глобальные флажки под кнопки ИМХО лучше, чем глобальные переменные под ссылки на объекты, разбросанные по разным формам. Ну, а более красивым я бы назвал решение отказаться от ON KEY LABEL - вы же не из BROWSE нажимаете F2, а из грида (ну, или какого-то другого объекта формы). Так почему бы не использовать событие KeyPress? Исправлено 1 раз(а). Последнее : akvvohinc, 10.11.19 17:56 |
Re: Как работать с ON KEY LABEL или чем эту конструкцию заменить? | |
---|---|
ssa Сообщений: 13008 Откуда: Москва Дата регистрации: 23.03.2005 |
1. Не слушать учителей которые учат плохому.
2. Не надо использовать On Key, лучше keypress формы. Только не забыть выставить KeyPreview у формы. 3. Формы могут принимать параметры Do form выбор_g_name with this Разумеется при том надо в форме эти параметры принять. 4. Как, надеюсь, заметил при вызове формы можно выкинуть мусор в виде &cFormPath., правильно настроив set path И никаких глобальных переменных, флагов, обработчиков и прочей... ------------------ Лень - это неосознанная мудрость. |
Re: Как работать с ON KEY LABEL или чем эту конструкцию заменить? | |
---|---|
Артём Автор Сообщений: 117 Дата регистрации: 23.04.2001 |
вот про KeyPreview я как раз и не знал. так, ясно дело, самое правильное. Только 2 кнопки не ловятся F1 и F10. F1 еще ладно, а вот F10 хотелось бы переназначить Это тоже принимается с удовольствием у меня иногда этих глобальных директорий штук 20 собирается. Очень плотно их использую, правда без сети в однопользовательском режиме. Особенно удобно, когда на разных компах разные директории используются. |
Re: Как работать с ON KEY LABEL или чем эту конструкцию заменить? | |
---|---|
Артём Автор Сообщений: 117 Дата регистрации: 23.04.2001 |
я пробовал, но без KeyPreview не работало. С флагами интересное решение и путаницы меньше. Но таймеры как то не очень мне нравятся для этого дела. Спасибо! |
Re: Как работать с ON KEY LABEL или чем эту конструкцию заменить? | |
---|---|
ssa Сообщений: 13008 Откуда: Москва Дата регистрации: 23.03.2005 |
Внимательно читаем хелп по функции Inkey() Цитата:У меня тоже далеко не один. И что? ------------------ Лень - это неосознанная мудрость. |
Re: Как работать с ON KEY LABEL или чем эту конструкцию заменить? | |
---|---|
Igor Korolyov Сообщений: 34580 Дата регистрации: 28.05.2002 |
KeyPress-ом не перехватываются кнопки которые связаны с пунктами меню (даже F2 если запускать программу из IDE - она занята под постановку закладки), или на которые повешены стандартные системные действия (F10 активирует главное меню). ON KEY LABEL может их перехватывать, но в общем случае лучше выбрать что-то другое, не занятое системой (для F2 - запускать из под рантайма, где не будет меню установки закладок).
Если без F10 совсем никуда, то лучше сделать один глобальный перехватчик типа
Никаких глобальных или приватных переменых не нужно, глобальные/приватные флаги в ON KEY LABEL тоже не нужны. Можно просто передать в вызываемую форму ссылку на вызывающую (DO FORM SomeDialog WITH ThisForm), там принять в Init эту ссылку и запомнить в своё свойство формы, ну и когда надо просто обратиться из вызываемой форме к вызывающей - лучше всего дёрнуть её метод (а не обращаться ко внутренностям - типа грида где-то там расположенного и как-то там называющегося). ------------------ WBR, Igor |
Re: Как работать с ON KEY LABEL или чем эту конструкцию заменить? | |
---|---|
akvvohinc Сообщений: 4224 Откуда: Москва Дата регистрации: 11.11.2008 |
А в каком месте программы будет написана эта команда:
|
Re: Как работать с ON KEY LABEL или чем эту конструкцию заменить? | |
---|---|
Аспид Сообщений: 3475 Откуда: Москва Дата регистрации: 01.04.2005 |
В обработчике KeyPress |
Re: Как работать с ON KEY LABEL или чем эту конструкцию заменить? | |
---|---|
Crispy Сообщений: 18571 Дата регистрации: 16.05.2005 |
Как и для любых случаев отмены выполнения реакции по умолчанию, можно использовать команду "NODEFAULT". Подавляя например те же стандартные нажатия F1-F12 в KeyPress формы. При этом для вставки в новую форму, чтобы каждый раз не морочиться с кодами клавиш, лучше заранее создать и иметь где-то конструкцию-шаблон типа:
Добавив сюда еще реакцию на все клавиши между F2-F10, их коды отличаются последовательно уменьшаясь на -1. Можно также добавить и другие часто используемые по логике работы программы клавиши, например Esc (27), Tab (9), Enter (13) и другие. Кстати по поводу ссылок, в частности "this" из приведенного в вопросе кода - на форме для корня ссылок, отталкивающихся от самой формы, лучше всегда использовать не "this" - а именно "thisform". Меньше проблем будет в дальнейшем. "this" же - имеет смысл использовать только, если отталкиваться от объектов на форме. Например стоит применять его для объектов контейнерного и составного типа - контейнеров, грида, группы кнопок или выбора - чтобы ссылаться из его методов на вложенные в него объекты. При этом отсылки ко внешнему объекту можно получать, используя в каждом из них параметр Parent. Скажем из метода столбца - к методу или свойству грида:
Также, еще такая вещь полезна - при количестве строк кода, большем двух, имеет смысл для лучшей читаемости кода стараться использовать структурные скобки WITH...ENDWITH (как в приведенном примере для KeyPress). Это намного упрощает конструкции. Внутрь скобок для "thisform" можно вкладывать следующие скобки - уже для вложенного контейнера:
Разумеется, всегда стоит не лениться добавлять сразу же в свой код комментарии, пояснения - что делает данная процедура или какая-то часть ее, полезно будет в дальнейшем, когда что-то уже позабудется, одним взглядом восстановить в памяти, зачем все это вообще делалось. ------------------ В действительности все иначе, чем на самом деле. (Антуан де Сент-Экзюпери) |
Re: Как работать с ON KEY LABEL или чем эту конструкцию заменить? | |
---|---|
dimag Сообщений: 464 Откуда: Одинцово Дата регистрации: 17.12.2002 |
Как переназначить фнкциональные клавиши, если чё:
------------------ Глупость - это не отсутствие ума, это такой ум. |
Re: Как работать с ON KEY LABEL или чем эту конструкцию заменить? | |
---|---|
akvvohinc Сообщений: 4224 Откуда: Москва Дата регистрации: 11.11.2008 |
Очевидно, что Игорь имел в виду что-то иное:
Передача ссылки на форму описывается как замена глобальных/приватных флагов в ON KEY LABEL, а не отказ от самой команды. Иначе при чем здесь флаги? |
Re: Как работать с ON KEY LABEL или чем эту конструкцию заменить? | |
---|---|
akvvohinc Сообщений: 4224 Откуда: Москва Дата регистрации: 11.11.2008 |
Речь шла о тех клавишах и комбинациях (типа F1), которые "стандартно" не вызывают метод KeyPress вовсе. Для F1, например, следует отключить "стандарт" командой
Лишь после этого нажатие F1 будет вызывать KeyPress со стандартным значением 28.
Поясни, что за проблемы могут случиться "в дальнейшем"? И особенно - какие из них исчезнут, если передать куда-то thisform вместо this? |
Re: Как работать с ON KEY LABEL или чем эту конструкцию заменить? | |
---|---|
Артём Автор Сообщений: 117 Дата регистрации: 23.04.2001 |
У меня на F1, F2, F10 KeyPress вообще не вызывается. так что или тут не то написано, или я неправильно понимаю, куда этот текст вставлять |
Re: Как работать с ON KEY LABEL или чем эту конструкцию заменить? | |
---|---|
of63 Сообщений: 25256 Откуда: Н.Новгород Дата регистрации: 13.02.2008 |
() В KeyPress Идея с NODEFAULT() и DODEFAULT(...параметры можно, или нужно) такая:
- если код в этом событии пустой - то выполняется что "должно" - изображается нажатая буква, симол - если прописан код, то, выполняется только он, но выполняется и DEFAULT-код (отображение символа в видеоэлементе) - если в коде выполнен NODEFAULT(), то код отображения символа в видеоэлементе не отображается - если вызвать в коде DODEFAULT(), то можно получить и 2 символа на одно нажатие кнопки - если в коде указать DODEFAULT() и NODEFAULT(), то хз, смотря в какой последовательности, и вообще бессмысленно, надо избегать |
Re: Как работать с ON KEY LABEL или чем эту конструкцию заменить? | |
---|---|
Igor Korolyov Сообщений: 34580 Дата регистрации: 28.05.2002 |
Лучше в отдельном методе формы, к примеру "CallSomeDialog", а уж этот метод вызывать из KeyPress, из click кнопки, из пункта меню и любого другого места, где вздумается сделать инициацию "вызова диалога ввода данных". Копипаст даже всего 1 строки вызова (а завтра там понадобится ещё пару строк добавить, или, что скорее, заменить прямую команду DO FORM на свою обёртку) - это неправильно. Опять глупость сморозил. F1, F2 (при нажатии в IDE, не в рантайме), F10 и ещё ряд кнопок/сочетаний просто не дойдут до KeyPress, и никакой NODEFAULT не сработает. Он вообще не для этого предназначен. А почему не дойдут - я писал уже выше, да и Сергей о том же написал... ------------------ WBR, Igor |
Re: Как работать с ON KEY LABEL или чем эту конструкцию заменить? | |
---|---|
of63 Сообщений: 25256 Откуда: Н.Новгород Дата регистрации: 13.02.2008 |
Просто надо перепроверять высказывания друг друга, честно и доказательно перепроверять, и вменять несоотвествия критериям проверки, (к которым тоже могут быть предьявлены претензии), культура общения в этом состоит (не стал вставлять вставку "и")
|
Re: Как работать с ON KEY LABEL или чем эту конструкцию заменить? | |
---|---|
Igor Korolyov Сообщений: 34580 Дата регистрации: 28.05.2002 |
NODEFAULT это не функция - ей не нужны скобки. Это даже и не совсем команда (хотя формально это именно команда) - это скоре директива рантайму фокса "не делай то что ты бы делал не будь в методе никакого кода". Для KeyPress - ввод символа в поле ввода, или перемещение курсора в/между полями ввода. Для click - визуализация "нажимания" кнопки. Для QueryUnload - "продолжение закрытия формы". Никаких проблем в совместном использовании NODEFAULT и псевдо-функции DODEFAULT() нет. Для KeyPress таким образом можно "заменять" символы - к примеру отменить печать буквы А, и вместо этого проэмулировать печать буквы Б.
------------------ WBR, Igor |
© 2000-2024 Fox Club  |