:: Visual Foxpro, Foxpro for DOS
Re: Как работать с ON KEY LABEL или чем эту конструкцию заменить?
of63

Сообщений: 25256
Откуда: Н.Новгород
Дата регистрации: 13.02.2008
Да, Игорь, но текст был про простое. Вернеее это сложное, что ты написал, но это просто для писателей на фоксе, котрорые не ленятся экспериметировать, и не для спрашевильщиков

Игорь. Твой пост "ниасилил" в смысле я знаю как это сделать но ты умеешь это делать иначе.
Как всегда, спс за участие, в работе Британии на нашими ватниками (включая тебя) )
Ratings: 0 negative/0 positive
Re: Как работать с ON KEY LABEL или чем эту конструкцию заменить?
of63

Сообщений: 25256
Откуда: Н.Новгород
Дата регистрации: 13.02.2008
DODEFAULT() - это чисто выполнение нативной функции фокса (нативного класса, к которому не подобраться, не отдебагить),
NODEFAULT() - (скобки в фоксе в ф-ии не должны смущать или анти смущать) - это просто временный выклбючатель вызова нативной обработки нажатия клавишт (изображение ее). Вполне возможно , что после ее вызова этот "экран" "автоматически" возвращяется в "можно" (вы же не деоаете просле NODEF операцию "DODEF...", что-то такое )
Ratings: 0 negative/0 positive
Re: Как работать с ON KEY LABEL или чем эту конструкцию заменить?
akvvohinc

Сообщений: 4224
Откуда: Москва
Дата регистрации: 11.11.2008
of63
DODEFAULT() - это чисто выполнение нативной функции фокса (нативного класса, к которому не подобраться, не отдебагить),

В руководстве ее назначение описано несколько иначе:
Executes the parent class event or method of the same name from within a subclass.

of63
- если вызвать в коде DODEFAULT(), то можно получить и 2 символа на одно нажатие кнопки

Не может быть.
В описываемой ситуации (форма на основе базового класса) DODEFAULT() не окажет никакого действия, а отработает "автоматический" дефолт - второй символ не появится.
Если же форма "классифицирована", то будет выполнен KeyPress "родителя", но не будет никакого "автодефолта" - и вновь никакого второго символа.

of63
- если в коде указать DODEFAULT() и NODEFAULT(), то хз, смотря в какой последовательности, и вообще бессмысленно, надо избегать

Для NODEFAULT неважно, в каком месте метода (в начале, конце, середине, до или после DODEFAULT() ) он написан - главное, чтобы он был выполнен, и тогда "автодефолт" не отработает, а DODEFAULT() все равно будет выполнен.

А "ставить рядом" (сопоставлять или противопоставлять) NODEFAULT и DODEFAULT() - ИМХО то же самое, что сравнивать метры с килограммами - NODEFAULT не отменяет то, что выполняет DODEFAULT().
Скорее можно сказать, что любой код, написанный в методе, работает как некий NODEFAULT - то есть отменяет выполнение родительского метода, заменяя его собой, а DODEFAULT() выполняет метод родителя.

Поэтому и смысл совместного использования NODEFAULT и DODEFAULT() в одном методе вполне может быть - ведь выполняться они могут не всегда, а условно.
Конечно, речь при этом не идет об их "совместном" выполнении, а лишь об их наличии в теле одного метода.

PS
Вообще о DODEFAULT() в рамках данной темы говорить, думаю, бессмысленно.
Ведь буквально она призвана исполнить одноименный метод родителя, о наличии которого здесь речи пока не было.
А раз так, то DODEFAULT() вообще ничего полезного не произведет (как максимум - вернёт .T.).

PPS
Почти всё (кроме цитаты из Help) писал "по памяти" - возможно, где-то и зарапортовался.

Igor Korolyov
Никаких проблем в совместном использовании NODEFAULT и псевдо-функции DODEFAULT() нет. Для KeyPress таким образом можно "заменять" символы - к примеру отменить печать буквы А, и вместо этого проэмулировать печать буквы Б.

Это можно сделать с помощью NODEFAULT для А и эмуляции Б с помощью KEYBOARD:
IF nKeyCode=ASC('А')
KEYBOARD 'Б'
NODEFAULT
ENDIF
но какую роль в этом сценарии ты запланировал для DODEFAULT()?



Исправлено 8 раз(а). Последнее : akvvohinc, 12.11.19 05:56
Ratings: 0 negative/1 positive
Re: Как работать с ON KEY LABEL или чем эту конструкцию заменить?
of63

Сообщений: 25256
Откуда: Н.Новгород
Дата регистрации: 13.02.2008
плюсанул )
Ratings: 0 negative/0 positive
Re: Как работать с ON KEY LABEL или чем эту конструкцию заменить?
Rifat

Сообщений: 32
Дата регистрации: 06.02.2012
Я реализовал горячие клавиши на форме с помощью меню формы.
При запуске формы в основное меню приложения добавляется меню формы, например "Действия".
В этом меню определяю нужные действия для формы и назначаю горячие клавиши.
При активации/деактивации формы, меню добавляю/убираю. Главное, проверять доступность активной формы.
Клавиши F1 и F10 не задействую, но, думаю, меню перебьет их. Удобно, что, при случае, можно и мышкой в меню тыкнуть.
Ratings: 0 negative/2 positive
Re: Как работать с ON KEY LABEL или чем эту конструкцию заменить?
Crispy

Сообщений: 18571
Дата регистрации: 16.05.2005
Артём
У меня на F1, F2, F10 KeyPress вообще не вызывается. так что или тут не то написано, или я неправильно понимаю, куда этот текст вставлять

В KeyPress формы. У меня давно работает - в рабочем проекте, откуда и скопировал.
Если же используется главное окно фокспро - ну там возможно и проблемы, не проверял.
Возможно хотя бы предварительно надо будет отключать меню и хелп:
SET SYSMENU OFF
SET HELP OFF

Вообще, на мой взгляд - использование главного окна больше для ленивых. А использование фоксовского меню - сплошное неудобство по функционалу. Я всегда делал все управление через горячие клавиши + дублирующие их кнопки - и всем было только удобно. Очень быстро и просто можно сделать что угодно. Чем елозить мышкой по иерарзическим менюшкам. А то, если еще и мышь полглючивает, что при нынешниз мышах не редкость - вообще море удовольствия пользователю в такие моменты.
То ли дело - горячие клавшиши. [sm128]


------------------
В действительности все иначе, чем на самом деле.
                                      (Антуан де Сент-Экзюпери)
Ratings: 0 negative/1 positive
Re: Как работать с ON KEY LABEL или чем эту конструкцию заменить?
Igor Korolyov

Сообщений: 34580
Дата регистрации: 28.05.2002
akvvohinc
of63
- если вызвать в коде DODEFAULT(), то можно получить и 2 символа на одно нажатие кнопки
Не может быть.
Но тем не менее это так и есть
PUBLIC oFrm
oFrm = CREATEOBJECT("frm")
oFrm.Show()
DEFINE CLASS frm as Form
ADD OBJECT txt as textbox
PROCEDURE txt.KeyPress(tnKeyCode, tnShiftAltCtrl)
DODEFAULT()
DODEFAULT(97,1)
ENDPROC
ENDDEFINE

akvvohinc
Скорее можно сказать, что любой код, написанный в методе, работает как некий NODEFAULT - то есть отменяет выполнение родительского метода, заменяя его собой, а DODEFAULT() выполняет метод родителя.
Не совсем так. Код написанный в методе "перекрывает" код родительского метода, но только лишь пользовательский код (то что написано на фоксе). Системный код (то что написано на си и зашито в среду исполнения самого фокса) работает как ни в чём не бывало. Команда NODEFAULT именно системный код и "отменяет" - но при этом при помощи DODEFAULT() вполне можно "провалиться" через все уровни пользовательского (фоксового) кода и снова вызвать системный код - а явно указав параметры (в частности для KeyPress - т.к. там системный код оперирует именно этими самыми параметрами, и в зависимости от них и модифицирует .Value текстбокса, ну и его визуальное отображение) можно ещё и "изменить" это самое поведение системного кода.
akvvohinc
Ведь буквально она призвана исполнить одноименный метод родителя, о наличии которого здесь речи пока не было.
Да, но этим самым "родительском кодом" вполне может оказаться и системный код фокса

akvvohinc
Это можно сделать с помощью NODEFAULT для А и эмуляции Б с помощью KEYBOARD
А можно и безо всякого KEYBOARD, при помощи DODEFAULT с параметрами При этом в случае с DODEFAULT мы по сути обрабатываем одно событие "нажатия кнопки", а при помощи KEYBOARD - два. Первое отменяем, а второе заново инициируем. Это легко проверить, и даже "зациклить" фокс если посылать ту же самую литеру - KeyPress будет бесконечно исполняться.


------------------
WBR, Igor
Ratings: 0 negative/0 positive
Re: Как работать с ON KEY LABEL или чем эту конструкцию заменить?
Igor Korolyov

Сообщений: 34580
Дата регистрации: 28.05.2002
Crispy
Вообще, на мой взгляд - использование главного окна больше для ленивых.
Ну да, зато поиметь секас по полной программе со своим самодельным AsTopLevel окном - удел реально "не ленивых" Ну да вроде как мы ж знаем кого работа любит
Crispy
То ли дело - горячие клавшиши.
Одно другому не мешает. А программа где вообще ничего нельзя сделать не прочитав мануал где все эти горячие кнопки расписаны - ну на о-о-очень большого любителя штука. Могу порекомендовать тебе попользоваться vi - классическим и весьма популярным текстовым редактором для линукса.
Вот тут есть онлайн терминал
bellard.org
после загрузки набираешь vi hello.c (там уже заботливо подготовлен маленький програмный файл на си)

и наслаждаешься настоящим интерфейсом для обработки алфавитно-цифровой информации, незамутнённым никакими б-гомерзкими окнами, и их враждебными менюшками
хинт - для выхода из vi надо нажать :q и потом ввод - далее уж сам, сам... Хоткеев/команд для редактирования текстового файла там очень и очень много


------------------
WBR, Igor
Ratings: 0 negative/0 positive
Re: Как работать с ON KEY LABEL или чем эту конструкцию заменить?
akvvohinc

Сообщений: 4224
Откуда: Москва
Дата регистрации: 11.11.2008
Igor Korolyov
Но тем не менее это так и есть
PUBLIC oFrm
oFrm = CREATEOBJECT("frm")
oFrm.Show()
DEFINE CLASS frm as Form
ADD OBJECT txt as textbox
PROCEDURE txt.KeyPress(tnKeyCode, tnShiftAltCtrl)
DODEFAULT()
DODEFAULT(97,1)
ENDPROC
ENDDEFINE

В начале топика давались советы заменить ON KEY LABEL на обработку клавиш в KeyPress формы.
Поэтому и я подразумевал, что речь идет о KeyPress формы на основе базового класса.
Ты же привел пример для TextBox.
Можешь вывести несколько символов из KeyPress формы с помощью DODEFAULT()?

Igor Korolyov
А можно и безо всякого KEYBOARD, при помощи DODEFAULT с параметрами

И здесь мое замечание то же, что и выше.
Можешь заменить символ с помощью NODEFAULT и DODEFAULT() из KeyPress формы?

Igor Korolyov
Да, но этим самым "родительском кодом" вполне может оказаться и системный код фокса

То есть и для KeyPress формы базового класса можно вызвать "системный код фокса" с помощью DODEFAULT()?
Хотелось бы увидеть такой пример, и если он существует, то мне придется переосмыслить ту абстракцию, что я построил для DODEFAULT().



Исправлено 3 раз(а). Последнее : akvvohinc, 13.11.19 01:43
Ratings: 0 negative/0 positive
Re: Как работать с ON KEY LABEL или чем эту конструкцию заменить?
Igor Korolyov

Сообщений: 34580
Дата регистрации: 28.05.2002
Честно говоря не понял вопроса. Какая разница какой именно KeyPress - формы или текстбокса или комбо - так работают все обработчики событий. Просто для формы, скорее всего, ничего осмысленного в обработке 2-3 типа-нажатий-кнопок не будет - в текстбоксе это просто очевидным образом видно.
Я не думаю что метод KeyPress формы имеет хоть какое-то отношение ко "вводу символов в текстбокс". Хотя и не проверял, да и не собираюсь
akvvohinc
То есть и для KeyPress формы базового класса можно вызвать "системный код фокса" с помощью DODEFAULT()?
Полагаю что именно так это и работает - если Dodefault прописан в форме/классе первого уровня наследования (непосредственно от Form, ну или там Textbox) то он попытается вызвать "системный код фокса".

На самом деле это не самый сложный из сценариев - куда как запутаннее происходит работа с методами адаптеров типа BeforeInsert и им подобным - там ещё и некоторые из параметров типа "по ссылке" передаются, и при нескольких уровнях наследования возникает проблема, что изменения этих параметров "не видны" фоксу - тогда как при 1 уровне наследования всё ок.


------------------
WBR, Igor
Ratings: 0 negative/0 positive
Re: Как работать с ON KEY LABEL или чем эту конструкцию заменить?
akvvohinc

Сообщений: 4224
Откуда: Москва
Дата регистрации: 11.11.2008
Igor Korolyov
Честно говоря не понял вопроса. Какая разница какой именно KeyPress - формы или текстбокса или комбо - так работают все обработчики событий. Просто для формы, скорее всего, ничего осмысленного в обработке 2-3 типа-нажатий-кнопок не будет - в текстбоксе это просто очевидным образом видно.

А здесь уже я не понял - я имел в виду твой же пример, но когда клавиши "ловит" KeyPress формы (KeyPreview = .T.), а выводятся они в том же текстбоксе (его KeyPress пуст).

Так что внешне ничего измениться не должно - видимость должна быть не менее прекрасной.

Igor Korolyov
Полагаю что именно так это и работает - если Dodefault прописан в форме/классе первого уровня наследования (непосредственно от Form, ну или там Textbox) то он попытается вызвать "системный код фокса".
Igor Korolyov
Хотя и не проверял, да и не собираюсь

Ok, тогда я остаюсь пока при своем мнении (относительно Keypress формы), пока кто-нибудь не захочет проверить, и проверка не покажет обратное.



Исправлено 2 раз(а). Последнее : akvvohinc, 14.11.19 04:45
Ratings: 0 negative/0 positive
Re: Как работать с ON KEY LABEL или чем эту конструкцию заменить?
Crispy

Сообщений: 18571
Дата регистрации: 16.05.2005
akvvohinc
Ok, тогда я остаюсь пока при своем мнении (относительно Keypress формы), пока кто-нибудь не захочет проверить, и проверка не покажет обратное.

Может не совсем понял, о чем речь, но таки "Keypress формы" у меня например вполне себе отрабатывает нажатия и для любых вложенных в форму объектов, тех же текстбоксов.
Другое дело, что все подобное обычно не совсем логично размещать в Keypress формы - имеет смысл конечно же для каждого объекта использовать относящиеся именно к нему методы перехвата нажатий. А Keypress формы использовать только для активации/визуализации какого-лиюбо объекта, либо запуска процесса вычислений или выполнения каких-то действий. Т.е. как бы привычная логика любого пользовательского интерфейса.


------------------
В действительности все иначе, чем на самом деле.
                                      (Антуан де Сент-Экзюпери)
Ratings: 0 negative/0 positive
Re: Как работать с ON KEY LABEL или чем эту конструкцию заменить?
akvvohinc

Сообщений: 4224
Откуда: Москва
Дата регистрации: 11.11.2008
Crispy
Может не совсем понял, о чем речь, но таки "Keypress формы" у меня например вполне себе отрабатывает нажатия и для любых вложенных в форму объектов, тех же текстбоксов.

Начало этой дискуссии, полагаю, началось с этого высказывания Олега:
of63
- если вызвать в коде DODEFAULT(), то можно получить и 2 символа на одно нажатие кнопки

А далее обсуждали, можно ли с помощью DODEFAULT(), выданного из KeyPress формы, "размножить" принятый символ - то есть сделать так, чтобы в активном объекте, например, текстбоксе, появились два символа вместо одного.

Игорь привел пример такого "размножения", но для KeyPress текстбокса.

Crispy
Другое дело, что все подобное обычно не совсем логично размещать в Keypress формы - имеет смысл конечно же для каждого объекта использовать относящиеся именно к нему методы перехвата нажатий.

Ok, как бы ты распределил код по объектам формы для такой задачи - нажатие F2 должно выполнять некие функции, зависящие от того, какой объект является активным?



Исправлено 1 раз(а). Последнее : akvvohinc, 14.11.19 10:13
Ratings: 0 negative/0 positive
Re: Как работать с ON KEY LABEL или чем эту конструкцию заменить?
Igor Korolyov

Сообщений: 34580
Дата регистрации: 28.05.2002
akvvohinc
А здесь уже я не понял - я имел в виду твой же пример, но когда клавиши "ловит" KeyPress формы (KeyPreview = .T.), а выводятся они в том же текстбоксе (его KeyPress пуст).
KeyPress формы ничего ни в какие текстбоксы не выводит. С чего бы его переопределение повлияло на работу текстбокса? Выводит символ в поле KeyPress этого самого поля ввода, а не какой-то иной код, тоже реагирующий на нажатия клавиш. Ну может быть за исключением случая с NODEFAULT - возможно там прерывается не только работа самого KeyPress формы, но и вообще вся обработка события нажатия кнопки - включая всякие биндинги и т.п.
akvvohinc
Ok, тогда я остаюсь пока при своем мнении (относительно Keypress формы), пока кто-нибудь не захочет проверить, и проверка не покажет обратное.
А что по твоему делает KeyPress самой формы? Ну его "системная" часть...

То что ты не прав относительно DODEFAULT() я показал

akvvohinc
А далее обсуждали, можно ли с помощью DODEFAULT(), выданного из KeyPress формы, "размножить" принятый символ
Вовсе нет. Обсуждали не "конкретное применение" (которое в общем то не имеет смысла, поскольку KeyPress формы никоим образом не отвечает за появление буковок в текстбоксе), а "смысл и логику работы DODEFAULT() как такового".


------------------
WBR, Igor
Ratings: 0 negative/0 positive
Re: Как работать с ON KEY LABEL или чем эту конструкцию заменить?
akvvohinc

Сообщений: 4224
Откуда: Москва
Дата регистрации: 11.11.2008
Igor Korolyov
KeyPress формы ничего ни в какие текстбоксы не выводит. С чего бы его переопределение повлияло на работу текстбокса? Выводит символ в поле KeyPress этого самого поля ввода, а не какой-то иной код, тоже реагирующий на нажатия клавиш.
Я написал "ловит" клавиши, а не "выводит в текстбокс".
Код KeyPress формы влияет на то, что появится/не появится в поле текстбокса.

И когда я писал, что с помощью DODEFAULT() нажимаемый символ не дублируется, то имел в виду лишь то, что уже пояснил выше - DODEFAULT(), написанный в KeyPress формы, не продублирует нажимаемый символ в поле текстбокса.

Igor Korolyov
А что по твоему делает KeyPress самой формы? Ну его "системная" часть...
Пропускает нажатую клавишу дальше - в активный объект формы.
Соответственно, NODEFAULT используется для запрета этой "системной" части - в случае, если нажатая клавиша не должна быть пропущена в активный объект.
А DODEFAULT() не сделает ничего полезного.

Поэтому я и писал, что с помощью DODEFAULT(), написанного в KeyPress формы, ни продублировать, ни подменить символ не получится.
(точнее говоря, у меня не получалось, но пока никто не захотел попробовать )

Igor Korolyov
KeyPress формы никоим образом не отвечает за появление буковок в текстбоксе

Тот же ответ, что и на вопрос "Что делает системная часть KeyPress формы?" (см.выше).

Igor Korolyov
Вовсе нет. Обсуждали не "конкретное применение", а "смысл и логику работы DODEFAULT() как такового"

Пусть ты писал и об этом - тебе виднее.

Ну, а я имел в виду именно "конкретное применение" DODEFAULT().
Зачем бы я вдруг стал отвлекаться от темы и писать о смысле DODEFAULT() "вообще", если на тот момент ТС было предложено заменить ON KEY LABEL на вполне конкретный KeyPress формы?

Вот "история" DODEFAULT() в этом топике, какой ее вижу я
1) первым это слово написал Олег:
of63
В KeyPress Идея с NODEFAULT() и DODEFAULT(...параметры можно, или нужно)
2) написано это было сразу за примером Криспы, расписывающим обработку клавиш в KeyPress формы;
(еще ранее было предложено заменить ON KEY LABEL на KeyPress формы)
3) поэтому я понял пост Олега не как "теорию" DODEFAULT(), а о том, что сделает DODEFAULT() в KeyPress формы (возможно, в этом я ошибся);
4) соответственно, и всё написанное мною тоже относилось к использованию DODEFAULT() в KeyPress формы.
5) твой DODEFAULT() был написан в KeyPress текстбокса, то есть не мог ни подтвердить, ни опровегнуть мои слова.

Igor Korolyov
То что ты не прав относительно DODEFAULT() я показал

Я буду неправ, если ты покажешь пример, подтверждающий твои слова:
Igor Korolyov
Команда NODEFAULT именно системный код и "отменяет" - но при этом при помощи DODEFAULT() вполне можно "провалиться" через все уровни пользовательского (фоксового) кода и снова вызвать системный код
применительно к KeyPress формы.

!Вызови "системные" действия KeyPress формы после их отмены NODEFAULT'ом! - и я неправ.



Исправлено 11 раз(а). Последнее : akvvohinc, 15.11.19 05:27
Ratings: 0 negative/0 positive
Re: Как работать с ON KEY LABEL или чем эту конструкцию заменить?
Crispy

Сообщений: 18571
Дата регистрации: 16.05.2005
akvvohinc
Ok, как бы ты распределил код по объектам формы для такой задачи - нажатие F2 должно выполнять некие функции, зависящие от того, какой объект является активным?

Проще всего для этого использовать перепосыл кода нажатия в соответствующий объект в качестве параметра KeyPress().
Это не совсем очевидные использование KeyPress(), но я в прицнипе давно уже так делаю. И оно вполне себя оправдывает.
Т.е. просто вызываем в нужном случае данный метод объекта, но - именно с параметром.
В данном случае например - с конкректным его значением.
thisform.textbox1.KeyPress(-1)

Ну или скажем вот такой пример для наглядности, как раз с перепосылом кода нажатия:

PUBLIC oForm
oForm = CREATEOBJECT("form1")
oForm.Show()
**************************************************
DEFINE CLASS form1 AS form
ShowWindow = 2
AutoCenter = .T.
KeyPreview = .T.
ADD OBJECT text1 AS textbox WITH Top=10, Left=10
ADD OBJECT text2 AS textbox WITH Top=10, Left=200
PROCEDURE KeyPress
LPARAMETERS nKeyCode, nShiftAltCtrl
DO CASE
CASE nKeyCode=-1 && F2
NODEFAULT
MESSAGEBOX("F2 - form")
thisform.ActiveControl.KeyPress(nKeyCode)
CASE nKeyCode=27 && Esc
thisform.Release()
ENDCASE
ENDPROC
PROCEDURE text1.KeyPress
LPARAMETERS nKeyCode, nShiftAltCtrl
DO CASE
CASE nKeyCode=-1 && F2
MESSAGEBOX("F2 - textbox1")
ENDCASE
ENDPROC
PROCEDURE text2.KeyPress
LPARAMETERS nKeyCode, nShiftAltCtrl
DO CASE
CASE nKeyCode=-1 && F2
MESSAGEBOX("F2 - textbox2")
ENDCASE
ENDPROC
ENDDEFINE

Где строка перепосыла кода нажатия из KeyPress() формы в активный объект:
thisform.ActiveControl.KeyPress(nKeyCode)

Активизируя мышкой каждый текстбокс и нажимая F2 - видим обработку нажатия именно из активного текстбокса.


------------------
В действительности все иначе, чем на самом деле.
                                      (Антуан де Сент-Экзюпери)




Исправлено 4 раз(а). Последнее : Crispy, 15.11.19 09:08
Ratings: 0 negative/0 positive
Re: Как работать с ON KEY LABEL или чем эту конструкцию заменить?
Crispy

Сообщений: 18571
Дата регистрации: 16.05.2005
akvvohinc
Ok, как бы ты распределил код по объектам формы для такой задачи - нажатие F2 должно выполнять некие функции, зависящие от того, какой объект является активным?

Кстати, в предложенной тобой задаче - отдельной обработки активных объектов по нажатию на F2 - можно же и вообще никак не задействовать непосредственно KeyPress() формы.
Т.е., если для каждого объекта нужен именно свой уникальный обработчик, размещаемый в его KeyPress() - в примере выше достаточно просто выкинуть перехват нажатия у формы, оставив его только у каждого объекта.
а вот если скажем по F2 сначала должен выполняться какой-то общий для всех код, и только затем уже у каждого объекта свой специфический для даннойго объекта код, т.е. нужна именно последовательность такого вида:
"KeyPress() формы" -> "KeyPress() Объекта",
тогда вот как раз и можно использовать приводившийся выше вариант.


------------------
В действительности все иначе, чем на самом деле.
                                      (Антуан де Сент-Экзюпери)
Ratings: 0 negative/0 positive
Re: Как работать с ON KEY LABEL или чем эту конструкцию заменить?
akvvohinc

Сообщений: 4224
Откуда: Москва
Дата регистрации: 11.11.2008
Crispy
CASE nKeyCode=-1 && F2
NODEFAULT
MESSAGEBOX("F2 - form")
thisform.ActiveControl.KeyPress(nKeyCode)

Во-первых, такая конструкция не сработает для не Top-Level формы (убери ShowWindow = 2, проверь).

А кроме того, зачем отменять F2, а затем посылать его объекту, если его можно просто не отменять?

Но в любом случае ты посылаешь F2 всем объектам, даже тем, кому он не нужен, и должен написать код (обработчик) в каждом таком объекте, что усложняет понимание происходящего - ты не видишь всей картинки сразу (ведь форма - это не PRG, как в твоем примере), и, как следствие, усложняет сопровождение.

А почему бы не сконцентрировать весь функционал по обработке F2 в одном месте - в отдельном методе или хотя бы в KeyPress формы?



Исправлено 3 раз(а). Последнее : akvvohinc, 15.11.19 13:56
Ratings: 0 negative/0 positive
Re: Как работать с ON KEY LABEL или чем эту конструкцию заменить?
Crispy

Сообщений: 18571
Дата регистрации: 16.05.2005
akvvohinc
А почему бы не сконцентрировать весь функционал по обработке F2 в одном месте - в отдельном методе или хотя бы в KeyPress формы?

Ну так оно и делается обычно. Но это ж твоя идея - каждому объекту свою обработку.
Ну разве что, если код для всех объектов однотиный, отличаясь лишь какими-то парметрами - естественно его вынести в отдельный метод формы с параметрами, а потом просто вызывать - из каждого объекта со своим параметром. Я кстати так часто делал, передавая в качестве караметра такому методу либо имя объекта, либо даже просто сам объект, что-то типа такого: "thisform.Method(this)".


------------------
В действительности все иначе, чем на самом деле.
                                      (Антуан де Сент-Экзюпери)
Ratings: 0 negative/0 positive
Re: Как работать с ON KEY LABEL или чем эту конструкцию заменить?
Crispy

Сообщений: 18571
Дата регистрации: 16.05.2005
akvvohinc
Во-первых, такая конструкция не сработает для не Top-Level формы (убери ShowWindow = 2, проверь).

Да я знаю. Просто у меня никогда не используется главное окно фокспро, уже говорил про это выше. На мой взгляд, своя главная форма - намного более удобнее и гибче по настройкам. Ну дело вкуса конечно.


------------------
В действительности все иначе, чем на самом деле.
                                      (Антуан де Сент-Экзюпери)
Ratings: 0 negative/0 positive


Извините, только зарегистрированные пользователи могут оставлять сообщения в этом форуме.

On-line: 18 (Гостей: 18)

© 2000-2024 Fox Club 
Яндекс.Метрика